你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

托管 HSM 角色管理

注意

Key Vault 支持两种类型的资源:保管库和托管 HSM。 本文介绍托管 HSM。 若要了解如何管理保管库,请参阅使用 Azure CLI 管理密钥保管库

有关托管 HSM 的概述,请参阅什么是托管 HSM?。 如果你还没有 Azure 订阅,可以在开始前创建一个免费帐户

本文介绍如何管理托管 HSM 数据平面的角色。 若要了解托管 HSM 访问控制模型,请参阅托管 HSM 访问控制

若要允许安全主体(例如用户、服务主体、组或托管标识)执行托管 HSM 数据平面操作,需要为它们分配允许执行这些操作的角色。 例如,如果要允许应用程序使用密钥执行签名操作,则必须为其分配一个角色,该角色包含“Microsoft.KeyVault/managedHSM/keys/sign/action”作为数据操作之一。 可以在特定范围内分配角色。 托管 HSM 本地 RBAC 支持两种范围,HSM 范围(//keys)和按密钥 (/keys/<keyname>)。

有关所有托管 HSM 内置角色及其允许的操作的列表,请参阅托管 HSM 内置角色

先决条件

若要使用本文中的 Azure CLI 命令,必须准备好以下各项:

Azure Cloud Shell

Azure 托管 Azure Cloud Shell(一个可通过浏览器使用的交互式 shell 环境)。 可以将 Bash 或 PowerShell 与 Cloud Shell 配合使用来使用 Azure 服务。 可以使用 Cloud Shell 预安装的命令来运行本文中的代码,而不必在本地环境中安装任何内容。

若要启动 Azure Cloud Shell,请执行以下操作:

选项 示例/链接
选择代码或命令块右上角的“试用”。 选择“试用”不会自动将代码或命令复制到 Cloud Shell。 显示 Azure Cloud Shell 的“试用”示例的屏幕截图。
转到 https://shell.azure.com 或选择“启动 Cloud Shell”按钮可在浏览器中打开 Cloud Shell。 用于启动 Azure Cloud Shell 的按钮。
选择 Azure 门户右上角菜单栏上的 Cloud Shell 按钮。 显示 Azure 门户中的 Cloud Shell 按钮的屏幕截图

若要使用 Azure Cloud Shell,请执行以下操作:

  1. 启动 Cloud Shell。

  2. 选择代码块(或命令块)上的“复制”按钮以复制代码或命令。

  3. 在 Windows 和 Linux 上选择 Ctrl+Shift+V,或在 macOS 上选择 Cmd+Shift+V 将代码或命令粘贴到 Cloud Shell 会话中。

  4. 选择“Enter”运行代码或命令。

登录 Azure

若要使用 CLI 登录到 Azure,可以键入:

az login

若要详细了解通过 CLI 使用的登录选项,请参阅使用 Azure CLI 登录

创建新的角色分配

为所有密钥分配角色

使用 az keyvault role assignment create 命令为适用于 ContosoHSM 中所有密钥(范围 /keys)的用户主体名称 user2@contoso.com 所标识的用户分配“托管 HSM 加密用户”角色。

az keyvault role assignment create --hsm-name ContosoMHSM --role "Managed HSM Crypto User" --assignee user2@contoso.com  --scope /keys

为特定密钥分配角色

使用 az keyvault role assignment create 命令为由名为 myrsakey 的特定密钥的用户主体名称 user2@contoso.com 标识的用户分配“托管 HSM 加密用户”角色。

az keyvault role assignment create --hsm-name ContosoMHSM --role "Managed HSM Crypto User" --assignee user2@contoso.com  --scope /keys/myrsakey

列出现有的角色分配

使用 az keyvault role assignment list 列出角色分配。

在作用域/(未指定 --scope 时则为默认作用域)中为所有用户(未指定 --assignee 时则为默认用户)执行的所有角色分配

az keyvault role assignment list --hsm-name ContosoMHSM

特定用户 user1@contoso.com 在 HSM 级别的所有角色分配。

az keyvault role assignment list --hsm-name ContosoMHSM --assignee user@contoso.com

注意

当范围为 /(或 /keys)时,list 命令仅列出顶级的所有角色分配,而不会显示各个密钥级别的角色分配。

针对特定密钥 myrsakey 的特定用户 user2@contoso.com 的所有角色分配。

az keyvault role assignment list --hsm-name ContosoMHSM --assignee user2@contoso.com --scope /keys/myrsakey

为特定用户 user2@contoso.com 分配适用于特定密钥 myrsakey 的“托管 HSM 加密管理人员”这一特定角色

az keyvault role assignment list --hsm-name ContosoMHSM --assignee user2@contoso.com --scope /keys/myrsakey --role "Managed HSM Crypto Officer"

删除角色分配

使用 az keyvault role assignment delete 命令删除分配给用户 user2@contoso.com 的适用于密钥 myrsakey2 的“托管 HSM 加密管理人员”角色。

az keyvault role assignment delete --hsm-name ContosoMHSM --role "Managed HSM Crypto Officer" --assignee user2@contoso.com  --scope /keys/myrsakey2

列出所有可用的角色定义

使用 az keyvault role definition list 命令列出所有角色定义。

az keyvault role definition list --hsm-name ContosoMHSM

创建新的角色定义

托管 HSM 具有几个内置(预定义)角色,适用于大多数常见使用方案。 您可以定义自己的角色,其中包含允许角色执行的特定操作的列表。 然后,您可以将此角色分配给主体,以向其授予对指定操作的权限。

对使用 JSON 字符串的名为我的自定义角色的角色使用 az keyvault role definition create 命令。

az keyvault role definition create --hsm-name ContosoMHSM --role-definition '{
    "roleName": "My Custom Role",
    "description": "The description of the custom rule.",
    "actions": [],
    "notActions": [],
    "dataActions": [
        "Microsoft.KeyVault/managedHsm/keys/read/action"
    ],
    "notDataActions": []
}'

对名为 my-custom-role-definition.jso 的文件中的角色使用 az keyvault role definition create 命令,文件中含有角色定义的 JASON 字符串。 请参看上述示例。

az keyvault role definition create --hsm-name ContosoMHSM --role-definition @my-custom-role-definition.json

显示角色定义的详细信息

使用 az keyvault role definition show 命令查看使用名称 (GUID) 的特定角色定义的详细信息。

az keyvault role definition show --hsm-name ContosoMHSM --name xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

更新自定义角色定义

使用 az keyvault role definition update 命令来更新使用 JSON 字符串的名为我的自定义角色的角色。

az keyvault role definition create --hsm-name ContosoMHSM --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": []
        }'

删除自定义角色定义

使用 az keyvault role definition delete 命令查看使用名称 (GUID) 的特定角色定义的详细信息。

az keyvault role definition delete --hsm-name ContosoMHSM --name xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

注意

无法删除内置角色。 删除自定义角色后,所有使用该自定义角色的角色分配都将失效。

后续步骤