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

注意

密钥保管库资源提供程序支持两种资源类型:保管库和托管 HSM。 本文中所述的访问控制仅适用于保管库。 若要详细了解托管 HSM 的访问控制,请参阅托管 HSM 访问控制

注意

通过 Azure 门户进行的 Azure 应用服务证书配置不支持 Key Vault RBAC 权限模型。 可以在“密钥保管库证书用户”角色分配中使用 Azure PowerShell、Azure CLI、ARM 模板部署实现应用服务全局标识,例如公有云中的 Azure 应用服务。

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 基于角色的访问控制”权限模型的密钥保管库。 21090545-7ca7-4776-b22c-e363652d74d2
Key Vault 证书管理人员 对密钥保管库的证书执行任何操作,不包括读取机密和密钥部分以及管理权限。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 a4417e6f-fecd-4de8-b567-7b0420556985
密钥保管库证书用户 读取整个证书内容,包括机密和密钥部分。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 db79e9a7-68ee-4b58-9aeb-b90e7c24fcba
Key Vault 加密管理人员 对密钥保管库的密钥执行任何操作(管理权限除外)。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 14b46e9e-c2b7-41b4-b07b-48a6ebf60603
密钥保管库加密服务加密用户 读取密钥的元数据并执行包装/展开操作。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 e147488a-f6f5-4113-8e2d-b22465e65bf6
Key Vault 加密用户 使用密钥执行加密操作。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 12338af0-0e69-4776-bea7-57ae8d297424
密钥保管库加密服务发布用户 Azure 机密计算和等效环境的发布密钥。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。
Key Vault 机密管理人员 对密钥保管库的机密执行任何操作(管理权限除外)。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 b86a8fe4-44ce-4948-aee5-eccb2c155cd7
Key Vault 机密用户 读取机密内容,包括带有私钥的证书的机密部分。 仅适用于使用“Azure 基于角色的访问控制”权限模型的密钥保管库。 4633458b-17de-408a-b874-0445c86b69e6

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

管理内置的密钥保管库数据平面角色分配

内置角色 说明 ID
密钥保管库数据访问管理员 通过添加或删除 Key Vault 管理员、Key Vault 证书主管、Key Vault 加密管理人员、Key Vault 加密服务加密用户、Key Vault 加密用户、Key Vault 加密用户、Key Vault 读取者、Key Vault 机密主管或 Key Vault 机密用户角色来管理对 Azure Key Vault 的访问。 包括用于约束角色分配的 ABAC 条件。 8b54135c-b56d-4d72-a534-26097cfdc8d8

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

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

先决条件

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

若要管理角色分配,必须具有 Microsoft.Authorization/roleAssignments/writeMicrosoft.Authorization/roleAssignments/delete 权限,例如 Key Vault 数据访问管理员(具有仅分配/删除特定 Key Vault 角色的受限权限)、用户访问管理员所有者

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

注意

更改权限模型需要不受限制的“Microsoft.Authorization/roleAssignments/write”权限,这是所有者用户访问管理员角色的一部分。 经典订阅管理员角色(如“服务管理员”和“共同管理员”)或受限的“Key Vault 数据访问管理员”不能用于更改权限模型。

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

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

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

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

重要

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

分配角色

注意

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

若要使用 Azure CLI 创建角色分配,请使用 az role assignment 命令:

az role assignment create --role {role-name-or-id} --assignee {assignee-upn}> --scope {scope}

有关详细信息,请参阅使用 Azure CLI 分配 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 范围角色分配

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

有关详细信息,请参阅使用 Azure CLI 分配 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 自定义角色

常见问题

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

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

了解更多