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

注意

通过 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
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 基于角色的访问控制”权限模型的密钥保管库。 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 数据访问权限管理员用户访问权限管理员所有者

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

注意

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

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

    Enable Azure RBAC permissions - new vault

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

    Enable Azure RBAC permissions - existing vault

重要

设置 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. 转到包含你的密钥保管库的资源组。

    Role assignment - resource group

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

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

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

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

    Add role assignment page in Azure portal.

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 角色

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

    Add role assignment page in Azure portal.

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)”选项卡

    Role assignment - secret

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

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

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

    Add role assignment page in Azure portal.

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 机密管理人员”角色分配。

      Remove assignment - key vault

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

      Secret view with access

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

      Create new secret

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

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

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

      Secret view without access

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

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

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

      Secret tab - error

创建自定义角色

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 中单个对象的访问权限分配给用户或应用程序,但任何管理操作(如网络访问控制、监视和对象管理)都需要保险库级别权限,这将向应用程序团队的操作员公开安全信息。

了解更多