Azure 存储可对存储帐户中的所有数据进行静态加密。 默认情况下,队列存储和表存储使用由 Azure 管理且作用域限定在服务级别的密钥。 你也可以选择使用客户管理的密钥来加密队列或表数据。 要使用带有队列和表的客户管理密钥,首先必须创建一个存储账户,使用针对账户而非服务范围的加密密钥。 在创建了一个使用账户加密密钥管理队列和表数据的账户后,你可以为该存储账户配置客户管理的密钥。
本文介绍了如何创建一个依赖于该账户范围的密钥的存储账户。 首次创建帐户时,Azure使用帐户密钥加密帐户中的数据,并Azure管理密钥。 随后,你可以为账户配置客户管理的密钥,以利用这些优势,包括提供自己的密钥、更新密钥版本、轮换密钥以及撤销访问控制。
创建一个使用账户加密密钥的账户
你必须在创建存储账户时配置一个新的存储账户,以便在创建该账户时使用队列和表的加密密钥。 账户创建后,加密密钥的范围无法更改。
存储账户必须属于通用 v2 类型。 你可以创建存储账户,并通过Azure门户、PowerShell、Azure CLI或Azure 资源管理器模板配置其依赖账户加密密钥。
想了解更多关于创建存储账户的信息,请参见 创建存储账户。
注释
只有队列和表存储可以在创建存储账户时选择性地配置为用账户加密密钥加密数据。 blob 存储和 Azure 文件存储 总是使用账户加密密钥来加密数据。
要创建依赖Azure门户账户加密密钥的存储账户,请遵循以下步骤:
在 Azure 门户顶部的搜索框中,搜索并选择存储账户。
在 “存储帐户 ”页上,选择“ 新建”。
在 基础 标签页填写字段。
在高级选项卡中,找到 “表和队列 ”部分,选择 启用客户管理密钥的支持。
要使用 PowerShell 创建一个依赖账户加密密钥的存储账户,请确保你安装了 Azure PowerShell 模块,版本为 3.4.0 或更高版本。 有关详细信息,请参阅 安装 Azure PowerShell 模块。
接下来,通过调用 New-AzStorageAccount 命令创建通用的 v2 存储账户,并满足相应参数:
- 添加
-EncryptionKeyTypeForQueue 选项,并将其值设置为 Account,以使用帐户加密密钥对队列存储中的数据进行加密。
- 包含
-EncryptionKeyTypeForTable 该选项,并将其值 Account 设置为使用账户加密密钥来加密表存储中的数据。
以下示例展示了如何创建一个通用的v2存储账户,该账户配置为可读访问地理冗余存储(RA-GRS),并使用账户加密密钥加密队列存储和表存储的数据。 请记得将括号中的占位符值替换为你自己的值:
New-AzStorageAccount -ResourceGroupName <resource_group> `
-AccountName <storage-account> `
-Location <location> `
-SkuName "Standard_RAGRS" `
-Kind StorageV2 `
-EncryptionKeyTypeForTable Account `
-EncryptionKeyTypeForQueue Account
要使用 Azure CLI 创建一个依赖账户加密密钥的存储账户,请确保你安装的是 Azure CLI 2.0.80 或更高版本。 有关详细信息,请参阅安装 Azure CLI。
接下来,通过调用 az storage account create 命令创建通用v2存储账户,并满足相应参数:
- 添加
--encryption-key-type-for-queue 选项,并将其值设置为 Account,以使用帐户加密密钥对队列存储中的数据进行加密。
- 包含
--encryption-key-type-for-table 该选项,并将其值 Account 设置为使用账户加密密钥来加密表存储中的数据。
以下示例展示了如何创建一个通用的v2存储账户,该账户配置为可读访问地理冗余存储(RA-GRS),并使用账户加密密钥加密队列存储和表存储的数据。 请记得将括号中的占位符值替换为你自己的值:
az storage account create \
--name <storage-account> \
--resource-group <resource-group> \
--location <location> \
--sku Standard_RAGRS \
--kind StorageV2 \
--encryption-key-type-for-table Account \
--encryption-key-type-for-queue Account
以下 JSON 示例创建了一个通用的 v2 存储账户,该账户配置为可读访问地理冗余存储(RA-GRS),并使用账户加密密钥加密队列存储和表存储的数据。 请务必将尖括号中的占位符值替换为你自己的值:
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2019-06-01",
"name": "[parameters('<storage-account>')]",
"location": "[parameters('<location>')]",
"dependsOn": [],
"tags": {},
"sku": {
"name": "[parameters('Standard_RAGRS')]"
},
"kind": "[parameters('StorageV2')]",
"properties": {
"accessTier": "[parameters('<accessTier>')]",
"supportsHttpsTrafficOnly": "[parameters('supportsHttpsTrafficOnly')]",
"largeFileSharesState": "[parameters('<largeFileSharesState>')]",
"encryption": {
"services": {
"queue": {
"keyType": "Account"
},
"table": {
"keyType": "Account"
}
},
"keySource": "Microsoft.Storage"
}
}
}
],
创建依赖于帐户加密密钥的帐户后,可以配置存储在Azure 密钥保管库中的客户管理的密钥。 要了解如何将客户管理的密钥存储在密钥库中,请参见“配置存储在 Azure 密钥保管库 中的客户管理密钥加密”。
验证账户加密密钥
创建账户后,您可以通过Azure门户、PowerShell或Azure CLI验证存储账户是否使用了该账户范围的加密密钥。
要验证存储账户中的服务是否使用了与Azure门户账户有范围的加密密钥,请遵循以下步骤:
在 Azure 门户中导航到新的存储帐户。
在 “安全+网络” 部分,选择 加密。
如果存储账户是为依赖账户加密密钥创建的,你会在加密标签页看到客户管理密钥可以为所有四种 Azure 存储 服务:blob、文件、表和队列启用。
要验证存储账户中的服务是否使用PowerShell的账户加密密钥,请调用 Get-AzStorageAccount 命令。 此命令返回一组存储帐户属性及其值。 在 Encryption 属性中查找每个服务的 KeyType 字段,并确认其设置为 Account。
$account = Get-AzStorageAccount -ResourceGroupName <resource-group> `
-StorageAccountName <storage-account>
$account.Encryption.Services.Queue
$account.Encryption.Services.Table
要验证存储账户中的服务是否使用了带有 Azure CLI 的账户加密密钥,调用 az storage account show 命令。 此命令返回一组存储帐户属性及其值。 在加密属性中寻找 keyType 每个服务的字段,并确认它被设置为 Account。
az storage account show \
--name <storage-account> \
--resource-group <resource-group>
在验证存储账户所使用的加密密钥的作用域限定为该账户后,即可为该账户启用客户管理的密钥。 所有四个 Azure 存储 服务——blob、文件、表和队列——都将使用客户管理的密钥进行加密。
定价和计费
使用该账户范围加密密钥创建的存储账户,其表存储容量和交易的计费率与使用默认服务范围密钥的账户不同。 详情请参见 Azure 表存储 定价。
后续步骤