首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们如何为依赖资源定义azure策略规则?

我们如何为依赖资源定义azure策略规则?
EN

Stack Overflow用户
提问于 2020-10-20 05:42:45
回答 1查看 129关注 0票数 1

给定此ARM模板:https://github.com/Azure/azure-quickstart-templates/blob/master/101-redis-cache/azuredeploy.json

如何强制在启用诊断设置的情况下部署Redis缓存?

是否仅当Azure团队提供适当的别名时才有可能?

Redis缓存的当前别名集:

代码语言:javascript
复制
{
    "Microsoft.Cache/Redis/redisConfiguration": {
        "maxfragmentationmemory-reserved": "300",
        "maxmemory-reserved": "200",
        "maxmemory-delta": "200",
        "maxclients": "7500",
        "rdb-backup-enabled": "true",
        "rdb-backup-frequency": "60",
        "rdb-backup-max-snapshot-count": "1",
        "rdb-storage-connection-string": "DefaultEndpointsProtocol=https;AccountName=blobnubldepenclsstgwu2;AccountKey=[key hidden]"
    },
    "Microsoft.Cache/Redis/provisioningState": "Succeeded",
    "Microsoft.Cache/Redis/enableNonSslPort": false,
    "Microsoft.Cache/Redis/sku.capacity": 1,
    "Microsoft.Cache/Redis/redisVersion": "4.0.14",
    "Microsoft.Cache/Redis/sku.family": "P",
    "Microsoft.Cache/Redis/hostName": "rc-nuRed-epe-ncls-stg-wu2.redis.cache.windows.net",
    "Microsoft.Cache/Redis/sku.name": "Premium",
    "Microsoft.Cache/Redis/sslPort": 6380,
    "Microsoft.Cache/Redis/port": 6379,
    "Microsoft.Cache/Redis/sku": {
        "name": "Premium",
        "capacity": 1,
        "family": "P"
    },
    "Microsoft.Cache/Redis/subnetId": "/subscriptions/d0ee6b93-7d29-45db-aabf-784018016241/resourceGroups/rg-grp-epe-ncls-stg-wu2/providers/Microsoft.Network/virtualNetworks/AZ-BIZ-10.32.223.0-26/subnets/AZ-BIZ-10.32.223.16-28",
    "Microsoft.Cache/Redis/staticIP": "10.32.223.24",
    "Microsoft.Cache/Redis/minimumTlsVersion": "1.2",
    "Microsoft.Cache/Redis/shardCount": 2,
    "Microsoft.Cache/Redis/zones": [
        "3"
    ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-21 00:51:38

您需要使用auditIfNotExistsdeployIfNotExists策略。auditIfNotExists将引导您开始了解如何在没有诊断设置的情况下检测资源,但是deployIfNotExists路由的复杂性要高得多,因此需要更多关于特定应用程序的信息才能解决问题。

代码语言:javascript
复制
"policyRule": {
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.Cache/redis"
      }
    ]
  },
  "then": {
    "effect": "auditIfNotExists",
    "details": {
      "type": "Microsoft.Insights/diagnosticSettings",
      "existenceCondition": {
        "allOf": [              
          {
            "field": "Microsoft.Insights/diagnosticSettings/metrics.enabled",
            "equals": "true"
          },
          {
            "field": "Microsoft.Insights/diagnosticSettings/metrics[*].retentionPolicy.enabled",
            "equals": "false"
          }
        ]
      }
    }
  }
}

请记住,截至今天(2020年10月20日),Redis还没有任何" log“选项。如果您计划将此选项应用于另一个资源,则还需要检查log选项,您的存在条件将如下所示

代码语言:javascript
复制
"existenceCondition": {
        "allOf": [
          {
            "field": "Microsoft.Insights/diagnosticSettings/logs.enabled",
            "equals": "true"
          },
          {
            "field": "Microsoft.Insights/diagnosticSettings/logs[*].retentionPolicy.enabled",
            "equals": "false"
          },
          {
            "field": "Microsoft.Insights/diagnosticSettings/metrics.enabled",
            "equals": "true"
          },
          {
            "field": "Microsoft.Insights/diagnosticSettings/metrics[*].retentionPolicy.enabled",
            "equals": "false"
          }
        ]
      }
    }

这将使您能够审计诊断日志。如果要创建修正,则需要向策略中添加roleDefinitiondeployment,并将效果更改为deployIfNotExists。仅仅是警告、诊断设置可能很难补救,因为它们还需要存在存储帐户、事件中心或其他资源。如果这个问题已经存在,并且可以静态定义,那么这个问题就更容易解决。但是,如果需要采取补救措施来动态提供这些支持基础架构,则还必须围绕基础架构名称的全局唯一性以及其他问题创建规则。

如果你打算走deployIfNotExists路线,这里是“冰山一角”的文档,你需要知道才能开始。https://docs.microsoft.com/en-us/azure/governance/policy/concepts/effects#deployifnotexists

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64435453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档