注意事项
密钥保管库支持两种类型的资源:保管库和托管 HSM。 本文介绍托管硬件安全模块 (HSM)。 若要了解如何管理保管库,请参阅 Quickstart:使用 Azure CLI。
本文提供有关管理托管 HSM 的角色和角色分配的实用说明。 它通过使用托管 HSM 本地 RBAC 内置角色中记录的内置角色,实现托管 HSM 访问控制中描述的基于角色的访问控制模型。
有关托管 HSM 的概述,请参阅什么是托管 HSM?。 如果没有 Azure 订阅,请在开始前创建 试用订阅。
若要允许安全主体(例如用户、服务主体、组或托管标识)执行托管 HSM 数据平面操作,请为其分配允许这些操作的角色。 例如,如果要允许应用程序使用密钥执行签名操作,请为其分配一个角色,该角色包含 Microsoft.KeyVault/managedHSM/keys/sign/action 作为数据操作之一。 在特定范围内分配角色。 托管 HSM 本地 RBAC 支持两种范围,整个 HSM(/ 或 /keys)和每个密钥 (/keys/<key-name>)。
有关所有托管 HSM 内置角色及其允许的操作的列表,请参阅托管 HSM 内置角色。
先决条件
需要Azure订阅。 如果没有帐户,请在开始之前创建 一个免费帐户 。
还需要:
创建新的角色分配
在 Azure 门户中,导航到托管 HSM 资源。
在左侧菜单中的“设置”下,选择“本地 RBAC”。
选择 “添加角色分配”,选择角色、范围和主体,然后保存。
为所有密钥分配角色
使用 az keyvault role assignment create 命令为由用户主体名称 标识的用户分配 <user-principal-name> 角色,该角色应用于 中所有范围为 /keys 的 <hsm-name>。
az keyvault role assignment create --hsm-name <hsm-name> --role "Managed HSM Crypto User" --assignee <user-principal-name> --scope /keys
为特定密钥分配角色
使用 az keyvault role assignment create 命令将 托管 HSM Crypto 用户 角色分配给由用户主体名称 <user-principal-name> 标识的特定密钥的用户 <key-name>。
az keyvault role assignment create --hsm-name <hsm-name> --role "Managed HSM Crypto User" --assignee <user-principal-name> --scope /keys/<key-name>
为所有密钥分配角色
使用 New-AzKeyVaultRoleAssignment cmdlet 为所有密钥(范围)向用户分配/keys角色。
New-AzKeyVaultRoleAssignment -HsmName <hsm-name> -RoleDefinitionName "Managed HSM Crypto User" -SignInName <user-principal-name> -Scope /keys
为特定密钥分配角色
New-AzKeyVaultRoleAssignment -HsmName <hsm-name> -RoleDefinitionName "Managed HSM Crypto User" -SignInName <user-principal-name> -Scope /keys/<key-name>
列出现有的角色分配
在 Azure 门户中,导航到托管 HSM 资源。
在左侧菜单中的“设置”下,选择“本地 RBAC”。
门户显示托管 HSM 的所有角色分配。 可以按主体或范围进行筛选。
在作用域/(未指定 --scope 时则为默认作用域)中为所有用户(未指定 --assignee 时则为默认用户)执行的所有角色分配
az keyvault role assignment list --hsm-name <hsm-name>
特定用户 <user-principal-name> 在 HSM 层级中所有的角色分配。
az keyvault role assignment list --hsm-name <hsm-name> --assignee <user-principal-name>
注意事项
当范围为 /(或 /keys)时,list 命令仅列出顶级的所有角色分配,而不会显示各个密钥级别的角色分配。
针对特定用户 <user-principal-name> 和特定密钥 <key-name> 的所有角色分配。
az keyvault role assignment list --hsm-name <hsm-name> --assignee <user-principal-name> --scope /keys/<key-name>
为特定用户 分配适用于特定密钥 <user-principal-name> 的“托管 HSM 加密管理人员”这一特定角色<key-name>
az keyvault role assignment list --hsm-name <hsm-name> --assignee <user-principal-name> --scope /keys/<key-name> --role "Managed HSM Crypto Officer"
列出托管 HSM 的所有角色分配:
Get-AzKeyVaultRoleAssignment -HsmName <hsm-name>
列出特定用户的所有角色分配:
Get-AzKeyVaultRoleAssignment -HsmName <hsm-name> -SignInName <user-principal-name>
列出特定密钥范围内的特定用户的角色分配:
Get-AzKeyVaultRoleAssignment -HsmName <hsm-name> -SignInName <user-principal-name> -Scope /keys/<key-name>
删除角色分配
在 Azure 门户中,导航到托管 HSM 资源。
在左侧菜单中的“设置”下,选择“本地 RBAC”。
找到您想从系统中删除的角色分配。
选择分配旁边的 “删除 ”(垃圾桶)图标。
出现提示时,确认删除。
使用 az keyvault role assignment delete 命令删除分配给用户 的适用于密钥 <user-principal-name> 的“托管 HSM 加密管理人员”角色。<key-name>
az keyvault role assignment delete --hsm-name <hsm-name> --role "Managed HSM Crypto Officer" --assignee <user-principal-name> --scope /keys/<key-name>
使用 Remove-AzKeyVaultRoleAssignment cmdlet 删除角色分配:
Remove-AzKeyVaultRoleAssignment -HsmName <hsm-name> -RoleDefinitionName "Managed HSM Crypto Officer" -SignInName <user-principal-name> -Scope /keys/<key-name>
列出所有可用的角色定义
在 Azure 门户中,导航到托管 HSM 资源。
在左侧菜单中的“设置”下,选择“本地 RBAC”。
选择“ 角色 ”选项卡可查看所有可用的内置和自定义角色定义。
使用 az keyvault role definition list 命令列出所有角色定义。
az keyvault role definition list --hsm-name <hsm-name>
使用 Get-AzKeyVaultRoleDefinition cmdlet 列出所有角色定义:
Get-AzKeyVaultRoleDefinition -HsmName <hsm-name>
创建新的角色定义
注意事项
只能通过使用Azure CLI或Azure PowerShell来管理自定义角色定义。
托管 HSM 具有几个内置(预定义)角色,适用于大多数常见使用场景。 您可以定义自己的角色,其中包含允许角色执行的特定操作的列表。 然后,您可以将此角色分配给主体,以向其授予对指定操作的权限。
自定义角色创建目前在 Azure 门户中不可用。 使用Azure CLI或Azure PowerShell。
使用 JSON 字符串,通过 az keyvault role definition create 命令应用于名为My Custom Role的角色。
az keyvault role definition create --hsm-name <hsm-name> --role-definition '{
"roleName": "My Custom Role",
"description": "The description of the custom rule.",
"actions": [],
"notActions": [],
"dataActions": [
"Microsoft.KeyVault/managedHsm/keys/read/action"
],
"notDataActions": []
}'
对名为 az keyvault role definition create 的文件中的角色使用 命令,文件中含有角色定义的 JASON 字符串。 请参看上述示例。
az keyvault role definition create --hsm-name <hsm-name> --role-definition @my-custom-role-definition.json
使用 New-AzKeyVaultRoleDefinition cmdlet 从 JSON 文件创建自定义角色:
New-AzKeyVaultRoleDefinition -HsmName <hsm-name> -InputFile ./my-custom-role-definition.json
显示角色定义的详细信息
查看自定义角色定义详细信息目前在Azure门户中不可用。 使用Azure CLI或Azure PowerShell。
使用 az keyvault role definition show 命令查看使用名称 (GUID) 的特定角色定义的详细信息。
az keyvault role definition show --hsm-name <hsm-name> --name xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
使用 Get-AzKeyVaultRoleDefinition cmdlet 查看角色定义。 按名称查看特定自定义角色:
Get-AzKeyVaultRoleDefinition -HsmName <hsm-name> -RoleDefinitionName "My Custom Role"
更新自定义角色定义
更新自定义角色定义目前在 Azure 门户中不可用。 使用Azure CLI或Azure PowerShell。
使用 az keyvault role definition update 命令通过 JSON 字符串更新名为我的自定义角色的角色。
az keyvault role definition create --hsm-name <hsm-name> --role-definition '{
"roleName": "My Custom Role",
"name": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"id": "Microsoft.KeyVault/providers/Microsoft.Authorization/roleDefinitions/xxxxxxxx-
xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"description": "The description of the custom rule.",
"actions": [],
"notActions": [],
"dataActions": [
"Microsoft.KeyVault/managedHsm/keys/read/action",
"Microsoft.KeyVault/managedHsm/keys/write/action",
"Microsoft.KeyVault/managedHsm/keys/backup/action",
"Microsoft.KeyVault/managedHsm/keys/create"
],
"notDataActions": []
}'
若要更新自定义角色,请修改角色对象并重新创建它:
$role = Get-AzKeyVaultRoleDefinition -HsmName <hsm-name> -RoleDefinitionName "My Custom Role"
$role.Permissions[0].DataActions = @("Microsoft.KeyVault/managedHsm/keys/read/action", "Microsoft.KeyVault/managedHsm/keys/write/action", "Microsoft.KeyVault/managedHsm/keys/backup/action", "Microsoft.KeyVault/managedHsm/keys/create")
New-AzKeyVaultRoleDefinition -HsmName <hsm-name> -Role $role
删除自定义角色定义
删除自定义角色定义目前在 Azure 门户中不可用。 使用Azure CLI或Azure PowerShell。
使用 Azure CLI az keyvault role definition delete 命令,通过名称(GUID)删除自定义角色定义。
az keyvault role definition delete --hsm-name <hsm-name> --name xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
使用 Remove-AzKeyVaultRoleDefinition cmdlet 删除自定义角色定义:
Remove-AzKeyVaultRoleDefinition -HsmName <hsm-name> -RoleName "My Custom Role"
注意事项
无法删除内置角色。 删除自定义角色后,所有使用该自定义角色的角色分配都将失效。
后续步骤