【问题标题】:Azure KeyVault: How to set access policy in parallelAzure KeyVault:如何并行设置访问策略
【发布时间】:2021-08-15 13:42:04
【问题描述】:

使用Set-AzKeyVaultAccessPolicy 命令创建访问策略时,出现错误:操作失败,因为“Key Vault”从操作开始时发生了变化。如果在 上执行并行操作,则可能会发生这种情况。为防止出现此错误,请对操作进行序列化,以便一次仅对 执行一个操作。点击此链接了解更多信息:https://go.microsoft.com/fwlink/?linkid=2147741

多个脚本并行运行以在同一密钥库上设置不同的访问策略集,从而导致此冲突。

还有其他方法可以并行设置访问策略吗?

【问题讨论】:

    标签: azure powershell azure-keyvault


    【解决方案1】:

    如错误信息中所述,如果您并行运行命令来设置访问策略,则会导致ConflictError

    因此,如果您想同时在访问策略中设置一堆用户/服务主体/安全组,更好的选择是使用ARM template,您可以将访问策略部署到现有的密钥保管库,而无需重新部署整个密钥保管库模板,请参阅sample。在这个示例中,只有一个对象,要添加多个对象,只需像下面这样添加它们,将tenantIdobjectIdpermissions 修改为您的。

    "resources": [
         {
          "type": "Microsoft.KeyVault/vaults/accessPolicies",
          "name": "[concat(parameters('keyVaultName'), '/add')]",
          "apiVersion": "2019-09-01",
          "properties": {
          "accessPolicies": [
                        {
                            "tenantId": "xxxxxxx",
                            "objectId": "xxxxxxx",
                            "permissions": {
                                "keys": [
                                    "Get",
                                    "List",
                                    "Update",
                                    "Create",
                                    "Import",
                                    "Delete",
                                    "Recover",
                                    "Backup",
                                    "Restore",
                                    "UnwrapKey",
                                    "WrapKey"
                                ],
                                "secrets": [
                                    "Get",
                                    "List",
                                    "Set",
                                    "Delete",
                                    "Recover",
                                    "Backup",
                                    "Restore"
                                ],
                                "certificates": [
                                    "Get",
                                    "List",
                                    "Update",
                                    "Create",
                                    "Import",
                                    "Delete",
                                    "Recover",
                                    "Backup",
                                    "Restore",
                                    "ManageContacts",
                                    "ManageIssuers",
                                    "GetIssuers",
                                    "ListIssuers",
                                    "SetIssuers",
                                    "DeleteIssuers"
                                ]
                            }
                        },
                        {
                            "tenantId": "xxxxxxx",
                            "objectId": "xxxxxxx",
                            "permissions": {
                                "keys": [
                                    "Get",
                                    "List",
                                    "Update",
                                    "Create",
                                    "Import",
                                    "Delete",
                                    "Recover",
                                    "Backup",
                                    "Restore"
                                ],
                                "secrets": [
                                    "Get",
                                    "List",
                                    "Set",
                                    "Delete",
                                    "Recover",
                                    "Backup",
                                    "Restore"
                                ],
                                "certificates": [
                                    "Get",
                                    "List",
                                    "Import",
                                    "Update",
                                    "Create"
                                ]
                            }
                        },
                        {
                            "tenantId": "xxxxxxx",
                            "objectId": "xxxxxxx",
                            "permissions": {
                                "keys": [
                                    "Get",
                                    "List",
                                    "Update",
                                    "Create",
                                    "Import",
                                    "Delete",
                                    "Recover",
                                    "Backup",
                                    "Restore"
                                ],
                                "secrets": [
                                    "Get",
                                    "List",
                                    "Set",
                                    "Delete",
                                    "Recover",
                                    "Backup",
                                    "Restore"
                                ],
                                "certificates": [
                                    "Get",
                                    "List",
                                    "Update",
                                    "Create",
                                    "Import",
                                    "Delete",
                                    "Recover",
                                    "Backup",
                                    "Restore",
                                    "ManageContacts",
                                    "ManageIssuers",
                                    "GetIssuers",
                                    "ListIssuers",
                                    "SetIssuers",
                                    "DeleteIssuers"
                                ]
                            }
                        },
                        {
                            "tenantId": "xxxxxxx",
                            "objectId": "xxxxxxx",
                            "permissions": {
                                "secrets": [
                                    "List",
                                    "Get"
                                ],
                                "keys": [],
                                "certificates": []
                            }
                        }
                    ]
                }
           }
      ]
    

    【讨论】:

    • 如果我在同一个 keyvault 上并行运行多个 ARM 模板会怎样?会不会有冲突?
    • @AniketPrashar 当然会有冲突,但是为什么你需要在同一个keyvault上运行多个模板呢?为什么不在一个模板中包含您需要的所有内容?
    • 我在不同的资源组中有多个 Web 应用程序,我正在并行部署它们以节省时间。
    • @AniketPrashar 这与 keyvault 模板有什么关系?
    • @AniketPrashar 如果你想使用 web 应用的 keyvault 引用功能,它不支持用户分配的身份,无论如何你不能同时对访问策略进行操作,你可以首先创建所有 Web 应用程序,然后将系统分配的身份一起添加到 keyvault 模板中。
    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    相关资源
    最近更新 更多