为 Azure NetApp 文件卷加密配置客户管理的密钥

用于加密 Azure NetApp 文件卷的客户管理的密钥使你能够在创建新卷时使用自己的密钥而不是平台管理的密钥。 使用客户管理的密钥,你可以全面管理密钥的生命周期、密钥使用权限以及密钥审核操作之间的关系。

下图演示了客户管理的密钥如何与 Azure NetApp 文件配合使用:

客户管理的密钥的概念图。

  1. Azure NetApp 文件向托管标识授予加密密钥的权限。 托管标识可以是你创建和管理的用户分配的托管标识,也可以是与 NetApp 帐户关联的系统分配的托管标识。

  2. 可以使用客户管理的密钥为 NetApp 帐户配置加密。

  3. 可以使用 Azure Key Vault 管理员在步骤 1 中授予权限的托管标识,通过 Microsoft Entra ID 对 Azure Key Vault 的访问权限进行身份验证。

  4. Azure NetApp 文件使用 Azure Key Vault 中的客户管理的密钥包装帐户加密密钥。

    客户管理的密钥不会影响 Azure NetApp 文件的性能。 它与平台管理的密钥的唯一区别在于密钥的管理方式。

  5. 对于读/写操作,Azure NetApp 文件将向 Azure Key Vault 发送解包帐户加密密钥的请求,以执行加密和解密操作。

注意事项

  • 若要使用客户管理的密钥创建卷,必须选择“标准”网络功能。 无法将客户管理的密钥卷与使用基本网络功能配置的卷一起使用。 按照在卷创建页面中设置网络功能选项中的说明进行操作。
  • 为了提高安全性,可以在密钥保管库的网络设置中选择“禁用公共访问”选项。 选择此选项时,还必须选择“允许受信任的 Microsoft 服务绕过此防火墙”,以允许 Azure NetApp 文件服务访问加密密钥。
  • 客户管理的密钥支持自动托管系统标识 (MSI) 证书续订。 如果证书有效,则无需手动更新。
  • 如果 Azure NetApp 文件无法创建客户管理的密钥卷,则会显示错误消息。 有关详细信息,请参阅错误消息和故障排除
  • 创建了客户管理的密钥卷后,不要对基础 Azure Key Vault 或 Azure 专用终结点进行任何更改。 进行更改会使卷不可访问。 如果必须进行更改,请参阅更新客户管理的密钥的专用终结点 IP
  • Azure NetApp 文件服务支持将现有卷从平台管理的密钥 (PMK) 转换到客户管理的密钥 (CMK) 而无需数据迁移。 这为加密密钥生命周期(续订、轮换)提供了灵活性,并为受监管行业的要求提供了额外的安全性。
  • 如果 Azure Key Vault 无法访问,Azure NetApp Files 将失去对加密密钥的访问权限,同时也无法读取或写入使用客户管理的密钥启用的卷。 在这种情况下,请创建支持工单,为受影响的卷手动还原访问权限。
  • Azure NetApp 文件在具有跨地区复制或跨区域复制关系的源和数据复制卷上支持客户管理的密钥。
  • Azure NetApp 文件客户管理的密钥不支持将专用链接子网上的 Azure 网络安全组 (NSG) 应用于 Azure Key Vault。 NSG 不会影响与专用链接的连接,除非子网上启用了专用终结点网络策略。

支持的区域

以下区域支持 Azure NetApp 文件客户管理的密钥:

  • 澳大利亚中部
  • 澳大利亚中部 2
  • 澳大利亚东部
  • 澳大利亚东南部
  • 巴西南部
  • 巴西东南部
  • 加拿大中部
  • 加拿大东部
  • 印度中部
  • 美国中部
  • 东亚
  • 美国东部
  • 美国东部 2
  • 法国中部
  • 德国北部
  • 德国中西部
  • 以色列中部
  • 意大利北部
  • 日本东部
  • 日本西部
  • 韩国中部
  • 韩国南部
  • 美国中北部
  • 北欧
  • 挪威东部
  • 挪威西部
  • 卡塔尔中部
  • 南非北部
  • 美国中南部
  • 印度南部
  • 东南亚
  • 西班牙中部
  • 瑞典中部
  • 瑞士北部
  • 瑞士西部
  • 阿联酋中部
  • 阿拉伯联合酋长国北部
  • 英国南部
  • 英国西部
  • US Gov 亚利桑那州
  • US Gov 德克萨斯州
  • US Gov 弗吉尼亚州
  • 西欧
  • 美国西部
  • 美国西部 2
  • 美国西部 3

要求

在创建第一个客户管理的密钥卷之前,必须设置:

  • 一个包含至少一个密钥的 Azure Key Vault
    • 密钥保管库必须启用“软删除”和“清除保护”。
    • 密钥的类型必须为 RSA。
  • 密钥保管库必须具有 Azure 专用终结点
    • 该专用终结点不能驻留在委托给 Azure NetApp 文件的同一子网中。 子网必须与委托给 Azure NetApp 的虚拟网络位于同一虚拟网络中。

有关 Azure Key Vault 和 Azure 专用终结点的详细信息,请参阅:

将 NetApp 帐户配置为使用客户管理的密钥

  1. 在 Azure 门户和 Azure NetApp 文件下,选择“加密”。

    使用“加密”页可以管理 NetApp 帐户的加密设置。 它包括一个选项,用于将 NetApp 帐户设置为使用自己的加密密钥,该密钥存储在 Azure Key Vault 中。 此设置为 NetApp 帐户提供系统分配的标识,并为具有所需密钥权限的标识添加访问策略。

    加密菜单的屏幕截图。

  2. 将 NetApp 帐户设置为使用客户管理的密钥时,可以通过两种方式指定密钥 URI:

    • “从密钥保管库中选择”选项可用于选择密钥保管库和密钥。 选择密钥界面的屏幕截图。

    • 通过“输入密钥 URI”选项,可以手动输入密钥 URI。 显示密钥 URI 字段的加密菜单的屏幕截图。

  3. 选择要用于 Azure Key Vault 身份验证的标识类型。 如果 Azure Key Vault 配置为使用保管库访问策略作为其权限模型,则这两个选项均可用。 否则,只有用户分配的选项可用。

    • 如果选择“系统分配”,请选择“保存”按钮。 Azure 门户通过将系统分配的标识添加到 NetApp 帐户来自动配置 NetApp 帐户。 还会在 Azure Key Vault 上创建具有“获取”、“加密”、“解密”密钥权限的访问策略。

    包含系统分配的选项的加密菜单的屏幕截图。

    • 如果选择“用户分配”,则必须选择一个标识。 选择“选择标识”来打开上下文窗格,在其中选择用户分配的托管标识。

    用户分配的子菜单的屏幕截图。

    如果已将 Azure Key Vault 配置为使用 Vault 访问策略,Azure 门户将通过以下流程自动配置 NetApp 帐户:选择的用户分配标识将添加到 NetApp 帐户。 在 Azure Key Vault 上创建具有“获取”、“加密”、“解密”密钥权限的访问策略。

    如果已将 Azure Key Vault 配置为使用 Azure 基于角色的访问控制,则需要确保所选用户分配的标识在具有操作权限的密钥保管库上具有角色分配:

  4. 选择“保存”,然后观察传达操作状态的通知。 如果操作不成功,则会显示一条错误消息。 为获取解决错误的帮助,请参阅错误消息和故障排除

使用基于角色的访问控制

可以使用配置为使用 Azure 基于角色的访问控制的 Azure Key Vault。 若要通过 Azure 门户配置客户管理的密钥,需要提供用户分配的标识。

  1. 在 Azure 帐户中,依次导航到“密钥保管库”和“访问策略”。

  2. 若要创建访问策略,请在“权限模型”下选择“Azure 基于角色的访问控制”。 访问配置菜单的屏幕截图。

  3. 创建用户分配的角色时,需要授予三个权限才能使用客户管理的密钥:

    1. Microsoft.KeyVault/vaults/keys/read
    2. Microsoft.KeyVault/vaults/keys/encrypt/action
    3. Microsoft.KeyVault/vaults/keys/decrypt/action

    尽管存在包含这些权限的预定义角色,但这些角色所获得的权限超出了所需权限。 建议创建仅具有所需最低权限的自定义角色。 有关详细信息,请参阅 Azure 自定义角色

    {
        "id": "/subscriptions/<subscription>/Microsoft.Authorization/roleDefinitions/<roleDefinitionsID>",
        "properties": {
            "roleName": "NetApp account",
            "description": "Has the necessary permissions for customer-managed key encryption: get key, encrypt and decrypt",
            "assignableScopes": [
                "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroup>"
            ],
            "permissions": [
              {
                "actions": [],
                "notActions": [],
                "dataActions": [
                    "Microsoft.KeyVault/vaults/keys/read",
                    "Microsoft.KeyVault/vaults/keys/encrypt/action",
                    "Microsoft.KeyVault/vaults/keys/decrypt/action"
                ],
                "notDataActions": []
                }
            ]
          }
    }
    
  4. 创建自定义角色并可用于密钥保管库后,可以将其应用至用户分配的标识。

基于角色的访问控制评审和分配菜单的屏幕截图。

使用客户管理的密钥创建 Azure NetApp 文件卷

  1. 从 Azure NetApp 文件中,选择“”,然后选择“+ 添加卷”。

  2. 请按照为 Azure NetApp 文件卷配置网络功能中的说明进行操作:

  3. 对于配置为使用客户管理的密钥的 NetApp 帐户,“创建卷”页面包括选项“加密密钥源”。

    若要使用密钥加密卷,请在“加密密钥源”下拉菜单中选择“客户管理的密钥”。

    使用客户管理的密钥创建卷时,还必须为“网络功能”选项选择“标准”。 不支持基本网络功能。

    还必须选择密钥保管库专用终结点。 下拉菜单显示所选虚拟网络中的专用终结点。 如果所选虚拟网络中没有密钥保管库的专用终结点,则下拉列表为空,你将无法继续。 如果遇到这种情况,请参阅 Azure 专用终结点

    创建卷菜单的屏幕截图。

  4. 继续完成卷创建流程。 请参阅:

将 Azure NetApp 文件卷转换为客户管理的密钥(预览版)

Azure NetApp 文件支持将使用平台管理的密钥的现有卷移动到客户管理的密钥。 完成迁移后,将无法还原到平台管理的密钥。

注册功能

Azure NetApp 文件的加密密钥转换目前为预览版。 首次使用此功能之前,需要先注册它。

  1. 注册此功能:

    Register-AzProviderFeature -ProviderNamespace Microsoft.NetApp -FeatureName ANFMigratePmkToCmk 
    
  2. 检查功能注册的状态:

    Get-AzProviderFeature -ProviderNamespace Microsoft.NetApp -FeatureName ANFMigratePmkToCmk
    

    注意

    RegistrationState 可以在更改为Registered之前保持Registering状态长达 60 分钟。 请等到状态变为“已注册”后再继续。

此外,还可使用 Azure CLI 命令az feature registeraz feature show 来注册功能并显示注册状态。

转换卷

注意

在转换卷以使用客户管理的密钥时,必须为 Azure NetApp 文件帐户具有卷的每个虚拟网络执行转换。

  1. 确保已配置 Azure NetApp 文件帐户以使用客户管理的密钥
  2. 在 Azure 门户中,导航到“加密”
  3. 选择“CMK 迁移”选项卡。
  4. 从下拉菜单中,选择要使用的虚拟网络和密钥保管库专用终结点。
  5. Azure 会生成一个供客户管理的密钥加密的卷列表,。
  6. 选择“确认”以启动迁移。

重新为 NetApp 帐户下的所有卷生成密钥

如果已为 NetApp 帐户配置客户管理的密钥,并且有一个或多个使用客户管理的密钥加密的卷,则可以更改用于加密 NetApp 帐户下所有卷的密钥。 可以选择同一密钥保管库中的任何密钥。 不支持更改密钥保管库。

  1. 在 NetApp 帐户下,导航至“加密”菜单。 在“当前密钥”输入字段下,选择“重新生成密钥”链接。 加密密钥的屏幕截图。

  2. 在“重新生成密钥”菜单中,从下拉菜单中选择可用密钥之一。 所选密钥必须与当前密钥不同。 重新生成密钥菜单的屏幕截图。

  3. 选择“确定”进行保存。 重新生成密钥作可能需要几分钟时间。

从系统分配的标识切换到用户分配的标识

若要从系统分配的标识切换到用户分配的标识,必须向目标标识授予对正在使用的密钥保管库的访问权限以及读取/获取、加密和解密权限。

  1. 通过使用 az rest 命令发送 PATCH 请求来更新 NetApp 帐户:

    az rest -m PATCH -u <netapp-account-resource-id>?api-versions=2022-09-01 -b @path/to/payload.json
    

    有效负载应使用以下结构:

    {
      "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
         "<identity-resource-id>": {}
        }
      },
      "properties": {
        "encryption": {
          "identity": {
            "userAssignedIdentity": "<identity-resource-id>"
          }
        }
      }
    }
    
  2. 使用 az netappfiles account show 命令确认操作成功完成。 输出包括以下字段:

        "id": "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.NetApp/netAppAccounts/account",
        "identity": {
            "principalId": null,
            "tenantId": null,
            "type": "UserAssigned",
            "userAssignedIdentities": {
                "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity>": {
                    "clientId": "<client-id>",
                    "principalId": "<principalId>",
                    "tenantId": <tenantId>"
                }
            }
        },
    

    请确保:

    • encryption.identity.principalIdidentity.userAssignedIdentities.principalId 中的值匹配
    • encryption.identity.userAssignedIdentityidentity.userAssignedIdentities[] 中的值匹配
    "encryption": {
        "identity": {
            "principalId": "<principal-id>",
            "userAssignedIdentity": "/subscriptions/<subscriptionId>/resourceGroups/<resource-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity>"
        },
        "KeySource": "Microsoft.KeyVault",
    },
    

更新专用终结点

在创建客户管理的密钥卷后更改 Azure 专用终结点可能会使卷无法访问。 如果需要进行更改,则必须创建新的终结点,并将卷更新为指向新终结点。

  1. 在虚拟网络和 Azure Key Vault 之间创建新终结点。
  2. 使用旧终结点更新所有卷以使用新终结点。
    az netappfiles volume update --g $resource-group-name --account-name $netapp-account-name --pool-name $pool-name --name $volume-name --key-vault-private-endpoint-resource-id $newendpoint
    
  3. 删除旧的专用终结点

后续步骤