你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Azure 密钥保管库和托管标识为 Azure Batch 帐户配置客户管理的密钥
默认情况下,Azure Batch 使用平台管理的密钥来加密 Azure Batch 服务中存储的所有客户数据,例如证书、作业/任务元数据。 你也可以选择使用自己的密钥(即客户管理的密钥)来加密 Azure Batch 中存储的数据。
提供的密钥必须是在 Azure 密钥保管库中生成的,并且必须可以通过 Azure 资源托管标识访问这些密钥。
有两种类型的托管标识:系统分配的托管标识和用户分配的托管标识 。
可以创建使用系统分配的托管标识的 Batch 帐户,也可以创建单独的、有权访问客户管理的密钥的用户分配的托管标识。 请查看比较表来了解不同之处,并考虑哪种做法最适合你的解决方案。 例如,如果你要使用同一个托管标识来访问多个 Azure 资源,则需要用户分配的托管标识。 否则,与 Batch 帐户关联的系统分配的托管标识可能足以实现这种访问。 使用用户分配的托管标识,还可以选择强制要求在创建 Batch 帐户时提供客户管理的密钥,如下所示。
创建具有系统分配的托管标识的 Batch 帐户
如果你不需要单独的用户分配的托管标识,可以在创建 Batch 帐户时启用系统分配的托管标识。
重要
如本文档中所述,为 Batch 帐户创建的用于客户数据加密的系统分配托管标识不能用作 Batch 池上用户分配的托管标识。 如果要在 Batch 帐户和 Batch 池上使用相同的托管标识,请改用用户分配的通用托管标识。
Azure 门户
在 Azure 门户中创建 Batch 帐户时,请在“高级”选项卡下的标识类型中选择“系统分配” 。
创建帐户后,可以在“属性”部分下的“标识主体 ID”字段中找到唯一的 GUID 。 “标识类型”将显示 System assigned
。
需要提供此值才能向此 Batch 帐户授予对密钥保管库的访问权限。
Azure CLI
创建新的 Batch 帐户时,请为 --identity
参数指定 SystemAssigned
。
resourceGroupName='myResourceGroup'
accountName='mybatchaccount'
az batch account create \
--name $accountName \
--resource-group $resourceGroupName \
--locations regionName='West US 2' \
--identity 'SystemAssigned'
创建帐户后,可以验证是否已在此帐户中启用系统分配的托管标识。 请务必注意 PrincipalId
,因为需要提供此值才能向该 Batch 帐户授予对密钥保管库的访问权限。
az batch account show \
--name $accountName \
--resource-group $resourceGroupName \
--query identity
注意
在 Batch 帐户中创建的系统分配的托管标识仅用于从密钥保管库中检索客户管理的密钥。 此标识在 Batch 池中不可用。 若要在池中使用用户分配的托管标识,请参阅在 Batch 池中配置托管标识。
创建用户分配的托管标识
如果需要,你可以创建用户分配的托管标识用于访问客户管理的密钥。
需要提供此标识的“客户端 ID”值才能使它能够访问密钥保管库。
配置 Azure Key Vault 实例
要在其中生成密钥的 Azure 密钥保管库必须是在 Batch 帐户所在的同一租户中创建的。 它不需要位于同一资源组中,甚至不需要位于同一订阅中。
创建 Azure Key Vault
创建 Azure 密钥保管库实例(用于 Azure Batch 的客户管理的密钥)时,请确保“软删除”和“清除保护”都已启用 。
将访问策略添加到 Azure Key Vault 实例
在 Azure 门户中创建密钥保管库后,请在“设置”下的“访问策略”中,使用托管标识添加 Batch 帐户访问权限 。 在“密钥权限”下,选择“获取”、“包装密钥”和“解包密钥” 。
在“主体”下的“选择”字段中,填写下列其中一项 :
- 对于系统分配的托管标识:输入先前检索到的
principalId
,或 Batch 帐户的名称。 - 对于用户分配的托管标识:输入先前检索到的“客户端 ID”,或用户分配的托管标识的名称。
在 Azure Key Vault 中生成密钥
在 Azure 门户中,转到“密钥”部分中的密钥保管库实例,选择“生成/导入” 。 为“密钥类型”选择 RSA
,为“RSA 密钥大小”选择至少 2048
位 。 目前不支持将 EC
密钥类型用作 Batch 帐户上的客户管理的密钥。
创建密钥后,单击新建的密钥和当前版本,并复制“属性”部分下的“密钥标识符” 。 请确保在“允许的操作”下,“包装密钥”和“解包密钥”均已选中。
在 Batch 帐户上启用客户管理的密钥
满足先决条件后,可以在 Batch 帐户中启用客户管理的密钥。
Azure 门户
在 Azure 门户中,转到“Batch 帐户”页。 在“加密”部分下,启用“客户管理的密钥” 。 可以直接使用“密钥标识符”,或者,可以选择密钥保管库,然后单击“选择密钥保管库和密钥”。
Azure CLI
创建具有系统分配的托管标识的 Batch 帐户并为其授予对密钥保管库的访问权限后,使用 keyVaultProperties
参数下的 {Key Identifier}
URL 更新 Batch 帐户。 此外,将 --encryption-key-source
设置为 Microsoft.KeyVault
。
az batch account set \
--name $accountName \
--resource-group $resourceGroupName \
--encryption-key-source Microsoft.KeyVault \
--encryption-key-identifier {YourKeyIdentifier}
创建具有用户分配的托管标识和客户管理的密钥的 Batch 帐户
例如,使用 Batch Management .NET 客户端,可以创建具有用户分配的托管标识和客户管理的密钥的 Batch 帐户。
string subscriptionId = "Your SubscriptionID";
string resourceGroupName = "Your ResourceGroup name";
var credential = new DefaultAzureCredential();
ArmClient _armClient = new ArmClient(credential);
ResourceIdentifier resourceGroupResourceId = ResourceGroupResource.CreateResourceIdentifier(subscriptionId, resourceGroupName);
ResourceGroupResource resourceGroupResource = _armClient.GetResourceGroupResource(resourceGroupResourceId);
var data = new BatchAccountCreateOrUpdateContent(AzureLocation.EastUS)
{
Encryption = new BatchAccountEncryptionConfiguration()
{
KeySource = BatchAccountKeySource.MicrosoftKeyVault,
KeyIdentifier = new Uri("Your Key Azure Resource Manager Resource ID"),
},
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.UserAssigned)
{
UserAssignedIdentities = {
[new ResourceIdentifier("Your Identity Azure Resource Manager ResourceId")] = new UserAssignedIdentity(),
},
}
};
var lro = resourceGroupResource.GetBatchAccounts().CreateOrUpdate(WaitUntil.Completed, "Your BatchAccount name", data);
BatchAccountResource batchAccount = lro.Value;
更新客户管理的密钥版本
创建密钥的新版本时,请将 Batch 帐户更新为使用该新版本。 按照以下步骤操作:
- 在 Azure 门户中导航到你的 Batch 帐户,并显示“加密”设置。
- 输入新密钥版本的 URI。 或者,可以再次选择密钥保管库和密钥以更新版本。
- 保存更改。
还可以使用 Azure CLI 更新版本。
az batch account set \
--name $accountName \
--resource-group $resourceGroupName \
--encryption-key-identifier {YourKeyIdentifierWithNewVersion}
提示
可以通过在密钥保管库中创建密钥轮换策略来自动轮换密钥。 指定 Batch 帐户的密钥标识符时,请使用无版本密钥标识符来启用通过有效轮换策略进行自动轮换的功能。 有关详细信息,请参阅如何在密钥保管库中配置密钥轮换。
使用不同的密钥进行 Batch 加密
若要更改用于 Batch 加密的密钥,请执行以下步骤:
- 导航到你的 Batch 帐户,并显示“加密”设置。
- 输入新密钥的 URI。 或者,可以选择密钥保管库和一个新密钥。
- 保存更改。
还可以通过 Azure CLI 使用不同的密钥。
az batch account set \
--name $accountName \
--resource-group $resourceGroupName \
--encryption-key-identifier {YourNewKeyIdentifier}
常见问题
- 现有的 Batch 帐户是否支持客户管理的密钥? 不是。 只有新 Batch 帐户才支持客户管理的密钥。
- 是否可以选择大于 2048 位的 RSA 密钥大小? 是,还支持
3072
和4096
位的 RSA 密钥大小。 - 吊销客户管理的密钥后可执行哪些操作? 如果 Batch 失去了对客户管理的密钥的访问权限,则允许的唯一一项操作就是删除帐户。
- 如果我意外删除了密钥保管库密钥,应如何还原 Batch 帐户的访问权限? 由于清除保护和软删除已启用,因此你可以还原现有密钥。 有关详细信息,请参阅恢复 Azure 密钥保管库。
- 是否可以禁用客户管理的密钥? 可随时将 Batch 帐户的加密类型重新设置为“Microsoft 管理的密钥”。 以后可以随意删除或更改密钥。
- 如何轮换密钥? 除非密钥无版本,并在密钥保管库中设置了适当的密钥轮换策略,否则客户管理的密钥不会自动轮换。 若要手动轮换密钥,请更新与帐户关联的密钥标识符。
- 还原访问权限后,Batch 帐户在多长时间后可再次正常工作? 还原访问权限后,最长可能需要经过 10 分钟才能访问该帐户。
- 当 Batch 帐户不可用时,我的资源会发生什么情况呢? 当 Batch 失去客户管理的密钥的访问权限时,活跃的所有池将继续运行。 但是,这些池中的节点将转换为不可用状态,且任务将停止运行(并重新排队)。 还原访问权限后,节点将再次可用,任务将重启。
- 此加密机制是否适用于 Batch 池中的 VM 磁盘? 否。 对于云服务配置池(已弃用),没有对 OS 和临时磁盘应用加密。 对于虚拟机配置池,默认将使用 Microsoft 平台管理的密钥来加密 OS 和任何指定的数据磁盘。 目前,不能对这些磁盘指定你自己的密钥。 若要使用 Microsoft 平台管理的密钥来加密 Batch 池 VM 的临时磁盘,必须在虚拟机配置池中启用 diskEncryptionConfiguration 属性。 对于高度敏感的环境,我们建议启用临时磁盘加密,并避免将敏感数据存储在 OS 和数据磁盘上。 有关详细信息,请参阅创建包含已启用加密的磁盘的池
- Batch 帐户中系统分配的托管标识是否在计算节点上可用? 不是。 系统分配的托管标识目前仅用于访问 Azure Key Vault 以获取客户管理的密钥。 若要在计算节点上使用用户分配的托管标识,请参阅在 Batch 池中配置托管标识。
后续步骤
- 详细了解 Azure Batch 中的安全最佳做法。
- 详细了解 Azure Key Vault。