使用 Azure 基于角色的访问控制提供对 Key Vault 密钥、证书和机密的访问权限

注意

通过 Azure 门户进行的 Azure 应用服务证书配置不支持 Key Vault RBAC 权限模型。 使用客户端库(例如具有“密钥保管库机密用户”和“密钥保管库读取者”角色分配的 Azure PowerShell、Azure CLI、ARM 模板部署)时,支持 Key Vault RBAC 权限模型。

Azure 基于角色的访问控制 (Azure RBAC) 是在 Azure 资源管理器基础上构建的授权系统,针对 Azure 资源提供精细的访问权限管理。

Azure RBAC 允许用户管理密钥、机密和证书权限。 它提供了一个可跨所有密钥保管库管理所有权限的位置。

Azure RBAC 模型提供了在不同范围级别设置权限的功能:管理组、订阅、资源组或单个资源。 用于密钥保管库的 Azure RBAC 还提供了对单个密钥、机密和证书设定单独权限的功能

有关详细信息,请参阅 Azure 基于角色的访问控制 (Azure RBAC)

单个密钥、机密和证书角色分配的最佳做法

我们的建议是对每个环境(开发环境、预生产环境和生产环境)的每个应用程序使用一个保管库。

单个密钥、机密和证书权限应仅用于特定场景:

  • 在多个应用程序之间共享单个机密,例如,一个应用程序需要访问来自其他应用程序的数据

有关 Azure Key Vault 管理指南的详细信息,请参阅:

用于 Key Vault 数据平面操作的 Azure 内置角色

注意

Key Vault Contributor 角色适用于管理平面操作,用于管理密钥保管库。 它不允许访问密钥、机密和证书。

内置角色 说明 ID
Key Vault 管理员 对密钥保管库以及其中的所有对象(包括证书、密钥和机密)执行所有数据平面操作。 无法管理密钥保管库资源或管理角色分配。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 00482a5a-887f-4fb3-b363-3b7fe8e74483
Key Vault 证书管理人员 对密钥保管库的证书执行任何操作(管理权限除外)。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 a4417e6f-fecd-4de8-b567-7b0420556985
Key Vault 加密管理人员 对密钥保管库的密钥执行任何操作(管理权限除外)。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 14b46e9e-c2b7-41b4-b07b-48a6ebf60603
密钥保管库加密服务加密用户 读取密钥的元数据并执行包装/展开操作。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 e147488a-f6f5-4113-8e2d-b22465e65bf6
Key Vault 加密用户 使用密钥执行加密操作。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 12338af0-0e69-4776-bea7-57ae8d297424
Key Vault 读取者 读取密钥保管库及其证书、密钥和机密的元数据。 无法读取机密内容或密钥材料等敏感值。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 21090545-7ca7-4776-b22c-e363652d74d2
Key Vault 机密管理人员 对密钥保管库的机密执行任何操作(管理权限除外)。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 b86a8fe4-44ce-4948-aee5-eccb2c155cd7
Key Vault 机密用户 读取机密内容,包括带有私钥的证书的机密部分。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 4633458b-17de-408a-b874-0445c86b69e6

注意

之所以没有 Key Vault Certificate User,是因为应用程序需要具有私钥的证书的机密部分。 应用程序应使用“Key Vault Secrets User”角色来检索证书。

有关 Azure 内置角色定义的详细信息,请参阅 Azure 内置角色

对密钥保管库使用 Azure RBAC 机密、密钥和证书权限

用于密钥保管库的新 Azure RBAC 权限模型提供了保管库访问策略权限模型的替代方案。

先决条件

必须拥有 Azure 订阅。 如果没有 Azure 订阅,可以在开始之前创建一个试用版订阅

若要添加角色分配,必须拥有 Microsoft.Authorization/roleAssignments/writeMicrosoft.Authorization/roleAssignments/delete 权限,例如用户访问管理员所有者

对密钥保管库启用 Azure RBAC 权限

注意

更改权限模型需要具有“Microsoft.Authorization/roleAssignments/write”权限,该权限是所有者用户访问管理员角色的一部分。 不支持经典订阅管理员角色(如“服务管理员”和“共同管理员”)。

  1. 对新密钥保管库启用 Azure RBAC 权限:

    启用 Azure RBAC 权限 - 新建保管库

  2. 对现有密钥保管库启用 Azure RBAC 权限:

    启用 Azure RBAC 权限 - 现有保管库

重要

设置 Azure RBAC 权限模型会使所有访问策略权限失效。 若未分配对等的 Azure 角色,它可能会导致故障。

分配角色

注意

建议在脚本中使用唯一的角色 ID,而不是角色名称。 这样一来,即使角色重命名,脚本仍可以继续使用。 此文档中的角色名称仅用于提高可读性。

运行以下命令创建角色分配:

az role assignment create --role <role_name_or_id> --assignee <assignee> --scope <scope>

有关详细信息,请参阅使用 Azure CLI 分配 Azure 角色

若要使用 Azure 门户分配角色,请参阅使用 Azure 门户分配 Azure 角色。 在 Azure 门户中,Azure 角色分配屏幕可用于访问控制 (IAM) 选项卡上的所有资源。

资源组范围的角色分配

  1. 转到包含你的密钥保管库的资源组。

    角色分配 - 资源组

  2. 选择“访问控制 (IAM)”。

  3. 选择“添加”>“添加角色分配”,打开“添加角色分配”页面 。

  4. 分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色

    设置
    角色 “密钥保管库读取者”
    将访问权限分配到 当前用户
    成员 按电子邮件地址搜索

    Azure 门户中的“添加角色分配”页。

az role assignment create --role "Key Vault Reader" --assignee {i.e user@microsoft.com} --scope /subscriptions/{subscriptionid}/resourcegroups/{resource-group-name}

有关详细信息,请参阅使用 Azure CLI 分配 Azure 角色

上述角色分配提供了在密钥保管库中列出密钥保管库对象的功能。

Key Vault 范围角色分配

  1. 转到“Key Vault”>“访问控制(IAM)”选项卡

  2. 选择“添加”>“添加角色分配”,打开“添加角色分配”页面 。

  3. 分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色

    设置
    角色 “密钥保管库机密主管”
    将访问权限分配到 当前用户
    成员 按电子邮件地址搜索

    Azure 门户中的“添加角色分配”页。

az role assignment create --role "Key Vault Secrets Officer" --assignee {i.e jalichwa@microsoft.com} --scope /subscriptions/{subscriptionid}/resourcegroups/{resource-group-name}/providers/Microsoft.KeyVault/vaults/{key-vault-name}

有关详细信息,请参阅使用 Azure CLI 分配 Azure 角色

机密范围角色分配

注意

密钥保管库机密、证书、密钥范围角色分配仅适用于此处所述的有限方案,以符合安全最佳做法。

  1. 打开以前创建的机密。

  2. 单击“访问控制 (IAM)”选项卡

    角色分配 - 机密

  3. 选择“添加”>“添加角色分配”,打开“添加角色分配”页面 。

  4. 分配以下角色。 有关详细步骤,请参阅使用 Azure 门户分配 Azure 角色

    设置
    角色 “密钥保管库机密主管”
    将访问权限分配到 当前用户
    成员 按电子邮件地址搜索

    Azure 门户中的“添加角色分配”页。

az role assignment create --role "Key Vault Secrets Officer" --assignee {i.e user@microsoft.com} --scope /subscriptions/{subscriptionid}/resourcegroups/{resource-group-name}/providers/Microsoft.KeyVault/vaults/{key-vault-name}/secrets/RBACSecret

有关详细信息,请参阅使用 Azure CLI 分配 Azure 角色

测试和验证

注意

浏览器使用缓存,删除角色分配后需要刷新页面。
预留几分钟时间供角色分配刷新

  1. 验证在密钥库级别上没有“Key Vault 机管理人员”角色的情况下添加新机密。

    1. 转到密钥保管库“访问控制(IAM)”选项卡,删除此资源的“Key Vault 机密管理人员”角色分配。

      删除分配 - 密钥保管库

    2. 导航到以前创建的机密。 你可以看到所有机密属性。

      具有访问权限的机密视图

    3. 若创建新机密(“机密”>“+ 生成/导入”),应会看到以下错误:

      创建新机密

  2. 验证在机密级别上没有“Key Vault 机密管理人员”角色的情况下编辑机密。

    1. 转到先前创建的机密“访问控制(IAM)”选项卡,删除此资源的“Key Vault 机密管理人员”角色分配。

    2. 导航到以前创建的机密。 你可以看到机密属性。

      无访问权限的机密视图

  3. 验证在密钥库级别没有读取者角色的情况下读取机密。

    1. 转到密钥保管库资源组“访问控制(IAM)”选项卡,删除“Key Vault 读取者”角色分配。

    2. 若导航到密钥保管库的“机密”选项卡,应会看到以下错误:

      “机密”选项卡 - 错误

创建自定义角色

az role definition create 命令

az role definition create --role-definition '{ \
   "Name": "Backup Keys Operator", \
   "Description": "Perform key backup/restore operations", \
    "Actions": [ 
    ], \
    "DataActions": [ \
        "Microsoft.KeyVault/vaults/keys/read ", \
        "Microsoft.KeyVault/vaults/keys/backup/action", \
         "Microsoft.KeyVault/vaults/keys/restore/action" \
    ], \
    "NotDataActions": [ 
   ], \
    "AssignableScopes": ["/subscriptions/{subscriptionId}"] \
}'

有关如何创建自定义角色的详细信息,请参阅:

Azure 自定义角色

已知的限制和性能

  • 多租户方案(例如与 Azure Lighthouse 配合使用)不支持密钥保管库数据平面 RBAC
  • 每个订阅 2000 个 Azure 角色分配
  • 角色分配延迟:在当前预期的性能下,角色分配更改后最多需要 10 分钟(600 秒)才能应用角色

常见问题:

能否使用 Key Vault 基于角色的访问控制 (RBAC) 权限模型对象范围分配来为 Key Vault 中的应用程序团队提供隔离?

否。 RBAC 权限模型允许将 Key Vault 中单个对象的访问权限分配给用户或应用程序,但任何管理操作(如网络访问控制、监视和对象管理)都需要保险库级别权限,这将向应用程序团队的操作员公开安全信息。

了解更多