本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在 Amazon 中使用客户托管的密钥 QLDB
您可以使用 AWS Management Console、 AWS Command Line Interface (AWS CLI) 或,为 Amazon 中的 AWS KMS key 新账本和现有账本指定。QLDB API QLDB以下主题介绍如何在中管理和监控客户托管密钥的使用情况QLDB。
先决条件
必须先在 AWS Key Management Service (AWS KMS) 中创建密钥,然后才能使用客户管理的密钥保护QLDB账本。您还必须指定QLDB允许代表您创建授权 AWS KMS key 的密钥策略。
- 创建客户托管的密钥
-
要创建客户托管密钥,请按照《AWS Key Management Service 开发人员指南》中创建对称加密KMS密钥中的步骤进行操作。QLDB不支持非对称密钥。
- 设置密钥策略
-
密钥策略是控制中客户托管密钥访问权限的主要方法 AWS KMS。每个 KMS 密钥必须只有一个密钥策略。密钥政策文档中的声明决定了谁有权使用KMS密钥以及他们如何使用密钥。有关更多信息,请参阅中的使用密钥策略 AWS KMS。
创建客户托管式密钥时,可以指定密钥策略。要更改现有客户托管密钥的密钥策略,请参阅更改密钥策略。
QLDB要允许使用您的客户托管密钥,密钥策略必须包含以下 AWS KMS 操作的权限:
-
kms: CreateGrant — 向客户托管密钥添加授权。授予对指定KMS密钥的控制访问权限。
当您使用指定的客户托管密钥创建或更新账本时,QLDB会创建允许访问其所需的授权操作的授权。授权操作包括:
-
kms: DescribeKey — 返回有关客户托管密钥的详细信息。QLDB使用此信息来验证密钥。
密钥策略示例
以下是您可以使用的关键策略示例QLDB。此策略允许有权使用该账户QLDB的委托人
111122223333
对资源arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
调用DescribeKey
和CreateGrant
操作。要使用此政策,请替换
us-east-1
,111122223333
,以及1234abcd-12ab-34cd-56ef-1234567890ab
在示例中包含您自己的信息。{ "Version": "2012-10-17", "Statement": [ { "Sid" : "Allow access to principals authorized to use Amazon QLDB", "Effect" : "Allow", "Principal" : { "AWS" : "*" }, "Action" : [ "kms:DescribeKey", "kms:CreateGrant" ], "Resource" : "arn:aws:kms:
us-east-1
:111122223333
:key/1234abcd-12ab-34cd-56ef-1234567890ab
", "Condition" : { "StringEquals" : { "kms:ViaService" : "qldb.us-east-1
.amazonaws.com", "kms:CallerAccount" : "111122223333
" } } } ] } -
为新分类账指定 AWS KMS key
使用QLDB控制台或创建新账本时,请按照以下步骤指定KMS密钥 AWS CLI。
您可以使用 ID、别名或 Amazon 资源名称 (ARN) 来指定客户托管密钥。要了解更多信息,请参阅《AWS Key Management Service 开发者指南》中的密钥标识符 (KeyId)。
注意
不支持跨区域密钥。指定的KMS密钥必须与您的账本 AWS 区域 相同。
-
登录 AWS Management Console,然后通过 https://console.aws.amazon.com/ql
db 打开亚马逊QLDB控制台。 -
选择 创建分类账。
-
在 创建分类账 页面上,执行以下操作:
-
分类帐信息-输入在当前 AWS 账户 和区域的所有分类帐中唯一的分类帐名称。
-
权限模式 - 选择要分配给分类帐的权限模式:
-
允许全部
-
标准(已推荐)
-
-
加密静态数据-选择用于静态加密的密KMS钥类型:
-
使用 AWS 拥有的KMS密KMS钥-使用由您代表自己拥有和管理 AWS 的密钥。这是默认选项,无需额外设置。
-
选择其他 AWS KMS 密钥-在您的账户中使用由您创建、拥有和管理的对称加密KMS密钥。
要使用 AWS KMS 控制台创建新密钥,请选择创建 AWS KMS 密钥。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的创建对称加密KMS密钥。
要使用现有KMS密钥,请从下拉列表中选择一个密钥或指定一个KMS密钥ARN。
-
-
-
根据需要进行设置后,选择 创建分类账。
当QLDB账本的状态变为 “有效” 时,您可以访问账本。这个过程可能需要几分钟。
使用使用默认密钥 AWS 拥有的密钥 或客户托管密钥在中QLDB创建账本。 AWS CLI
例 — 使用默认 AWS 拥有的密钥创建分类账
aws qldb create-ledger --name
my-example-ledger
--permissions-modeSTANDARD
例 — 创建包含客户托管密钥的分类账
aws qldb create-ledger \ --name
my-example-ledger
\ --permissions-modeSTANDARD
\ --kms-keyarn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
更新现有分类账的 AWS KMS key
您也可以随时使用QLDB控制台或 AWS CLI 将现有账本的KMS密钥更新为 AWS 拥有的密钥 或客户托管密钥。
注意
亚马逊QLDB于 2021 年 7 月 22 AWS KMS keys 日推出了对客户管理的支持。默认情况下,在发布之前创建的所有账本都 AWS 拥有的密钥 受到保护,但目前不符合使用客户托管密钥进行静态加密的资格。
您可以在QLDB控制台上查看账本的创建时间。
中的关键更改QLDB是异步的。在处理关键变更期间,分类账完全可以访问,不会对性能产生任何影响。秘钥更新所用时间因分类账大小而异。
您可以使用 ID、别名或 Amazon 资源名称 (ARN) 来指定客户托管密钥。要了解更多信息,请参阅《AWS Key Management Service 开发者指南》中的密钥标识符 (KeyId)。
注意
不支持跨区域密钥。指定的KMS密钥必须与您的账本 AWS 区域 相同。
-
登录 AWS Management Console,然后通过 https://console.aws.amazon.com/ql
db 打开亚马逊QLDB控制台。 -
在导航窗格中,选择分类账。
-
在分类账列表中,选择要更新的分类帐,然后选择编辑分类账。
-
在编辑账本页面上,选择用于静态加密的密KMS钥类型:
-
使用 AWS 拥有的KMS密KMS钥-使用由您代表自己拥有和管理 AWS 的密钥。这是默认选项,无需额外设置。
-
选择其他 AWS KMS 密钥-在您的账户中使用由您创建、拥有和管理的对称加密KMS密钥。
要使用 AWS KMS 控制台创建新密钥,请选择创建 AWS KMS 密钥。有关更多信息,请参阅《AWS Key Management Service 开发人员指南》中的创建对称加密KMS密钥。
要使用现有KMS密钥,请从下拉列表中选择一个密钥或指定一个KMS密钥ARN。
-
-
选择“确认更改”。
使用使用默认密钥 AWS 拥有的密钥 或客户托管密钥更新中的QLDB现有账本。 AWS CLI
例 — 使用默认 AWS 拥有的密钥创建分类账
aws qldb update-ledger --name
my-example-ledger
--kms-key AWS_OWNED_KMS_KEY
例 — 更新包含客户托管密钥的分类账
aws qldb update-ledger \ --name
my-example-ledger
\ --kms-keyarn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
监控 AWS KMS keys
如果您使用客户托管密钥来保护您的亚马逊QLDB账本,则可以使用AWS CloudTrail或 Amazon CloudWatch Lo gs 来跟踪代表您QLDB发送的请求。 AWS KMS 有关更多信息,请参阅 AWS Key Management Service 开发人员指南 中的 监控 AWS KMS keys。
以下示例是操作CreateGrant
、、GenerateDataKey
Decrypt
Encrypt
、和的 CloudTrail 日志条目DescribeKey
。
- CreateGrant
-
当您指定客户托管密钥来保护您的账本时,QLDB会 AWS KMS 代表您向发送
CreateGrant
请求以允许访问您的KMS密钥。此外,在您删除账本时,QLDB使用该RetireGrant
操作来删除授权。QLDB创建的赠款特定于账本。CreateGrant 请求
CreateGrant
的委托人是创建了表的用户。记录
CreateGrant
操作的事件与以下示例事件类似。这些参数包括客户托管密钥的 Amazon 资源名称 (ARN)、被授权人委托人和即将退休的委托人(QLDB服务),以及拨款涵盖的操作。{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AKIAIOSFODNN7EXAMPLE:sample-user", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/sample-user", "accountId": "111122223333", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-06-04T21:37:11Z" } }, "invokedBy": "qldb.amazonaws.com" }, "eventTime": "2021-06-04T21:40:00Z", "eventSource": "kms.amazonaws.com", "eventName": "CreateGrant", "awsRegion": "us-west-2", "sourceIPAddress": "qldb.amazonaws.com", "userAgent": "qldb.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "granteePrincipal": "qldb.us-west-2.amazonaws.com", "operations": [ "DescribeKey", "GenerateDataKey", "Decrypt", "Encrypt" ], "retiringPrincipal": "qldb.us-west-2.amazonaws.com" }, "responseElements": { "grantId": "b3c83f999187ccc0979ef2ff86a1572237b6bba309c0ebce098c34761f86038a" }, "requestID": "e99188d7-3b82-424e-b63e-e086d848ed60", "eventID": "88dc7ba5-4952-4d36-9ca8-9ab5d9598bab", "readOnly": false, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333" }
- GenerateDataKey
-
当您指定客户管理的密钥来保护您的账本时,QLDB会创建一个唯一的数据密钥。它向发送
GenerateDataKey
请求 AWS KMS ,指定账本的客户托管密钥。记录
GenerateDataKey
操作的事件与以下示例事件类似。用户是QLDB服务帐号。这些参数包括客户托管密钥的、需要长度为 32 字节的数据密钥说明符以及标识内部密钥层次结构节点的加密上下文。ARN{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "qldb.amazonaws.com" }, "eventTime": "2021-06-04T21:40:01Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-west-2", "sourceIPAddress": "qldb.amazonaws.com", "userAgent": "qldb.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "numberOfBytes": 32, "encryptionContext": { "key-hierarchy-node-id": "LY4HWMnkeZWKYi6MlitVJC", "key-hierarchy-node-version": "1" } }, "responseElements": null, "requestID": "786977c9-e77c-467a-bff5-9ad5124a4462", "eventID": "b3f082cb-3e75-454e-bf0a-64be13075436", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333", "sharedEventID": "26688de5-0b1c-43d3-bc4f-a18029b08446" }
- Decrypt
-
当您访问账本时,会QLDB调用该
Decrypt
操作来解密账本存储的数据密钥,以便它可以访问账本中的加密数据。记录
Decrypt
操作的事件与以下示例事件类似。用户是QLDB服务帐号。参数包括客户托管密钥ARN的参数和标识内部密钥层次结构节点的加密上下文。{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "qldb.amazonaws.com" }, "eventTime": "2021-06-04T21:40:56Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "qldb.amazonaws.com", "userAgent": "qldb.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "encryptionAlgorithm": "SYMMETRIC_DEFAULT", "encryptionContext": { "key-hierarchy-node-id": "LY4HWMnkeZWKYi6MlitVJC", "key-hierarchy-node-version": "1" } }, "responseElements": null, "requestID": "28f2dd18-3cc1-4fe2-82f7-5154f4933ebf", "eventID": "603ad5d4-4744-4505-9c21-bd4a6cbd4b20", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333", "sharedEventID": "7b6ce3e3-a764-42ec-8f90-5418c97ec411" }
- Encrypt
-
QLDB调用该
Encrypt
操作使用您的客户托管密钥将纯文本加密为密文。记录
Encrypt
操作的事件与以下示例事件类似。用户是QLDB服务帐号。这些参数包括客户托管密钥ARN的参数和指定账本内部唯一 ID 的加密上下文。{ "eventVersion": "1.08", "userIdentity": { "type": "AWSService", "invokedBy": "qldb.amazonaws.com" }, "eventTime": "2021-06-04T21:40:01Z", "eventSource": "kms.amazonaws.com", "eventName": "Encrypt", "awsRegion": "us-west-2", "sourceIPAddress": "qldb.amazonaws.com", "userAgent": "qldb.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "encryptionContext": { "LedgerId": "F6qRNziJLUXA4Vy2ZUv8YY" }, "encryptionAlgorithm": "SYMMETRIC_DEFAULT" }, "responseElements": null, "requestID": "b2daca7d-4606-4302-a2d7-5b3c8d30c64d", "eventID": "b8aace05-2e37-4fed-ae6f-a45a1c6098df", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333", "sharedEventID": "ce420ab0-288e-4b4f-aee8-541e18a28aa5" }
- DescribeKey
-
QLDB调用
DescribeKey
操作来确定您指定的KMS密钥是否存在于 AWS 账户 和区域中。记录
DescribeKey
操作的事件与以下示例事件类似。委托人是您 AWS 账户 中指定KMS密钥的用户。参数包括客户托管密钥的。ARN{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AKIAIOSFODNN7EXAMPLE:sample-user", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/sample-user", "accountId": "111122223333", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::111122223333:role/Admin", "accountId": "111122223333", "userName": "Admin" }, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "false", "creationDate": "2021-06-04T21:37:11Z" } }, "invokedBy": "qldb.amazonaws.com" }, "eventTime": "2021-06-04T21:40:00Z", "eventSource": "kms.amazonaws.com", "eventName": "DescribeKey", "awsRegion": "us-west-2", "sourceIPAddress": "qldb.amazonaws.com", "userAgent": "qldb.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, "responseElements": null, "requestID": "a30586af-c783-4d25-8fda-33152c816c36", "eventID": "7a9caf07-2b27-44ab-afe4-b259533ebb88", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsApiCall", "managementEvent": true, "eventCategory": "Management", "recipientAccountId": "111122223333" }