写入 Key Vault 秘密的 Azure 最低权限角色,特定于特定的保险库甚至特定的秘密名称(或全局通配符)

Azure least permission role to write a Key Vault secret, specific to a particular vault and even particular secret names (or globbed wildcard)

我想以一个服务 account/principal 结束,它的最小权限越小越好。它需要将 new/updated 个机密写入特定的 Azure Key Vault。所以,我想为此创建一个自定义角色并将该角色分配给服务帐户。我已经能够找到足够的文档来知道我需要一个类似的角色:

{
  "Name": "Vault-Secret-Write",
  "Description": "Allow writing new secrets to a particular Key Vault",
  "Actions": [ "Microsoft.KeyVault/vaults/secrets/write" ],
  "AssignableScopes": [ "MAGIC-GOES-HERE" ]
}

我找不到可以帮助我确定范围的文档。如上所述,它应该尽可能窄,至少指向特定的 Key Vault 甚至是与 glob-wildcard(例如 keyprefix*)匹配的秘密。

您的解决方案不正确。

Azure keyvault 由管理平面(Access control (IAM)) 和数据平面(Access policies) 保护,secrets 由数据平面管理。即使您在管理平面中向您的 user/service 委托人提供 owner/your custom rbac role,它也不允许您访问密钥库中的秘密。

要解决您的问题,无需授予 RBAC 角色,只需导航到密钥库中的 Access policies,添加具有正确权限的 user/service 主体。在你的情况下,给你的 user/service 委托人一个 Set 秘密权限,那么它将只拥有对密钥库的 Set 秘密权限。

有关安全访问密钥库的更多详细信息,您可以参考此link

此外,如果你想测试你的解决方案,只需如下指定AssignableScopes,然后你就可以添加你的user/service主体作为密钥保管库 Access control (IAM) 中的自定义角色。然后你可以在不设置访问策略的情况下测试create/update秘密,你会得到一个Forbidden错误。

"AssignableScopes": [
    "/subscriptions/{subscription id}/resourceGroups/{resource group name}/providers/Microsoft.KeyVault/vaults/{keyvault name}"
  ]