使用 API 查看 CMK - AWS Key Management Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 API 查看 CMK

您可以使用AWS Key Management Service (AWS KMS) API查看您的 CMK。本部分演示几种返回现有 CMK 详细信息的操作。这些示例使用AWS 命令行界面 (AWS CLI),但您可以使用任何受支持的编程语言。

ListKeys: 获取所有 CMK 的 ID 和 ARN

ListKeys 操作返回账户和区域中所有 CMK 的 ID 和 Amazon 资源名称 (ARN)。

例如,这个对 ListKeys 的调用会返回该虚构账户中每个 CMK 的 ID 和 ARN。有关使用多种编程语言的示例,请参阅获取 CMK 的密钥 ID 和密钥 ARN

$ aws kms list-keys { "Keys": [ { "KeyArn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab" }, { "KeyArn": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "KeyId": "0987dcba-09fe-87dc-65ba-ab0987654321" }, { "KeyArn": "arn:aws:kms:us-east-2:111122223333:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d", "KeyId": "1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d" } }

DescribeKey: 获取 CMK 的详细信息

DescribeKey 操作返回特定 CMK 的详细信息。要标识 CMK,请使用其密钥 ID密钥 ARN别名名称别名 ARN

例如,这个对 DescribeKey 的调用会返回有关对称 CMK 的信息。响应中的字段因客户主密钥规范密钥状态密钥材料源而异。有关使用多种编程语言的示例,请参阅查看客户主密钥

$ aws kms describe-key --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "KeyMetadata": { "Origin": "AWS_KMS", "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "Description": "", "KeyManager": "CUSTOMER", "Enabled": true, "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1499988169.234, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333" "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }

此示例对用于签名和验证的非对称 CMK 调用 DescribeKey 操作。响应包括 AWS KMS 为此 CMK 支持的签名算法。

$ aws kms describe-key --key-id 0987dcba-09fe-87dc-65ba-ab0987654321 { "KeyMetadata": { "KeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "Origin": "AWS_KMS", "Arn": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "KeyState": "Enabled", "KeyUsage": "SIGN_VERIFY", "CreationDate": 1569973196.214, "Description": "", "CustomerMasterKeySpec": "ECC_NIST_P521", "AWSAccountId": "111122223333", "Enabled": true, "KeyManager": "CUSTOMER" "SigningAlgorithms": [ "ECDSA_SHA_512" ] } }

您可以使用DescribeKey操作,即没有密钥 ID 的 AWS 别名。当您执行此操作时,AWS KMS 会将别名与AWS 托管 CMK并返回其KeyIdArn在响应中为。

GetKeyPolicy: 获取 CMK 附加的密钥策略

GetKeyPolicy 操作获取附加到 CMK 的密钥策略。要标识 CMK,请使用其密钥 ID 或密钥 ARN。您还必须指定策略名称,而策略名称始终是 default。(如果您的输出难以读取,请向您的命令中添加 --output text 选项。)

有关使用多种编程语言的示例,请参阅获取密钥策略

$ aws kms get-key-policy --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --policy-name default { "Version" : "2012-10-17", "Id" : "key-default-1", "Statement" : [ { "Sid" : "Enable IAM User Permissions", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:root" }, "Action" : "kms:*", "Resource" : "*" } ] }

ListAliases: 获取 CMK 的别名和 ARN

ListAliases 操作可返回账户和区域中的别名。响应中的 TargetKeyId 会显示别名所引用 CMK 的密钥 ID(如果有)。

默认情况下,ListAliases 命令会返回账户和区域中的所有别名。这包括您创建的别名),并与您的客户托管 CMK,以及 AWS 创建并与之关联的别名AWS 托管 CMK在您的账户中使用。您可以识别 AWS 别名,因为其名称的格式为aws/<service-name>之外的压缩算法(例如aws/dynamodb

响应可能还包含没有 TargetKeyId 字段的别名,如本示例中的 aws/redshift 别名。这些是 AWS 已创建但尚未与 CMK 关联的预定义别名。

有关使用多种编程语言的示例,请参阅列出别名

$ aws kms list-aliases { "Aliases": [ { "AliasName": "alias/access-key", "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/access-key", "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "CreationDate": 1516435200.399, "LastUpdatedDate: 1516435200.399 }, { "AliasName": "alias/ECC-P521-Sign", "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ECC-P521-Sign", "TargetKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1693622000.704, "LastUpdatedDate: 1693622000.704 }, { "AliasName": "alias/ImportedKey", "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/ImportedKey", "TargetKeyId": "1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d", "CreationDate": 1493622000.704, "LastUpdatedDate: 1521097200.235 }, { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/financeKey", "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "AliasName": "alias/financeKey", "CreationDate": 1604958290.014, "LastUpdatedDate: 1604958290.014 }, { "AliasName": "alias/aws/dynamodb", "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/aws/dynamodb", "TargetKeyId": "0987ab65-43cd-21ef-09ab-87654321cdef", "CreationDate": 1521097200.454, "LastUpdatedDate: 1521097200.454 }, { "AliasName": "alias/aws/ebs", "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/aws/ebs", "TargetKeyId": "abcd1234-09fe-ef90-09fe-ab0987654321", "CreationDate": 1466518990.200, "LastUpdatedDate: 1466518990.200 } ] }

要获取引用特定 CMK 的别名,请使用 KeyId 参数。参数值可以是密钥 ID密钥 ARN。您不能指定别名名称别名 ARN

以下示例中的命令可获取引用客户托管 CMK 的别名。但您可以使用类似命令来查找引用AWS 托管 CMK,太。

$ aws kms list-aliases --key-id arn:aws:kms:us-west-2:111122223333:key:0987dcba-09fe-87dc-65ba-ab0987654321 { "Aliases": [ { "AliasName": "alias/access-key", "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/access-key", "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "CreationDate": 1516435200.399, "LastUpdatedDate: 1516435200.399 }, { "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/financeKey", "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "AliasName": "alias/financeKey", "CreationDate": 1604958290.014, "LastUpdatedDate: 1604958290.014 }, ] }

要仅获取 AWS 托管 CMK 的别名,请使用编程语言的功能筛选响应。

$ aws kms list-aliases --query 'Aliases[?starts_with(AliasName, `alias/aws/`)]'

ListResourceTags: 获取 CMK 上的标签

这些区域有:ListResourceTags操作返回指定 CMK 上的标签。API 返回一个 CMK 的标签,但您可以循环运行命令,以获取账户和区域中所有 CMK 的标签,或者您选择的一组 CMK 的标签。这个 API 一次返回一个页面,所以如果你在许多 CMK 上有很多标签,你可能需要使用编程语言中的分页器来获取所有你想要的标签。

列表资源标签操作将返回所有 AWS KMS CMK 的标签,但AWS 托管 CMK未标记。

要查找 CMK 的标签,请使用ListResourceTagsoperation. KeyId 参数是必需的。它接受密钥 ID或者密钥 ARN。在运行此示例之前,请将示例密钥 ARN 替换为有效 ARN。

$ aws kms list-resource-tags --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab { "Tags": [ { "TagKey": "Department", "TagValue": "IT" }, { "TagKey": "Purpose", "TagValue": "Test" } ], "Truncated": false }

您可能想要使用ListResourceTags操作来获取帐户和区域中具有特定标签、标签键或标签值的所有 CMK。要执行此操作,请使用编程语言的筛选功能。

例如,以下 Bash 脚本使用ListKeysListResourceTags操作来获取帐户和区域中的所有 CMKProject标签键。这两个操作都只获取结果的第一页。如果您有许多 CMK 或许多标签,请使用语言的分页功能来获取每个操作的整个结果。在运行此示例之前,请将示例密钥 ID 替换为有效密钥 ID。

TARGET_TAG_KEY='Project' for key in $(aws kms list-keys --query 'Keys[*].KeyId' --output text); do key_tags=$(aws kms list-resource-tags --key-id "$key" --query "Tags[?TagKey==\`$TARGET_TAG_KEY\`]") if [ "$key_tags" != "[]" ]; then echo "Key: $key" echo "$key_tags" fi done

输出格式化如下面的示例输出所示。

Key: 0987dcba-09fe-87dc-65ba-ab0987654321 [ { "TagKey": "Project", "TagValue": "Gamma" } ] Key: 1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d [ { "TagKey": "Project", "TagValue": "Alpha" } ] Key: 0987ab65-43cd-21ef-09ab-87654321cdef [ { "TagKey": "Project", "TagValue": "Alpha" } ]