使用 API 查看 KMS 密钥 - Amazon Key Management Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 API 查看 KMS 密钥

您可以使用 Amazon Key Management Service (Amazon KMS) API 查看 KMS 密钥。本部分演示几种返回现有 KMS 密钥详细信息的操作。此示例使用 Amazon Command Line Interface (Amazon CLI),但您可以使用任何受支持的编程语言。

ListKeys: 获取所有 KMS 密钥的 ID 和 ARN

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

例如,这个对 ListKeys 操作的调用会返回该虚构账户中每个 KMS 密钥的 ID 和 ARN。有关使用多种编程语言的示例,请参阅获取 KMS 密钥的密钥 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: 获取有关 KMS 密钥的详细信息

DescribeKey操作返回有关指定 KMS 密钥的详细信息。要标识 KMS 密钥,请使用密钥 ID密钥 ARN别名名称别名 ARN

与仅显示调用者账户和区域中的 KMS 密钥的ListKeys操作不同,授权用户可以使用该DescribeKey操作来获取有关其他账户中 KMS 密钥的详细信息。

注意

DescribeKey 响应包括具有相同值的两个 KeySpecCustomerMasterKeySpec 成员。CustomerMasterKeySpec 成员已弃用。

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

$ 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, "KeySpec": "SYMMETRIC_DEFAULT", "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT", "KeyUsage": "ENCRYPT_DECRYPT", "KeyState": "Enabled", "CreationDate": 1499988169.234, "MultiRegion": false, "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "AWSAccountId": "111122223333", "EncryptionAlgorithms": [ "SYMMETRIC_DEFAULT" ] } }

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

$ 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": "", "KeySpec": "ECC_NIST_P521", "CustomerMasterKeySpec": "ECC_NIST_P521", "AWSAccountId": "111122223333", "Enabled": true, "MultiRegion": false, "KeyManager": "CUSTOMER", "SigningAlgorithms": [ "ECDSA_SHA_512" ] } }

GetKeyPolicy: 获取附加到 KMS 密钥的密钥策略

GetKeyPolicy操作将获取附加到 KMS 密钥的密钥策略。要标识 KMS 密钥,请使用其密钥 ID 或密钥 ARN。您还必须指定策略名称,而策略名称始终是 default。(如果您的输出难以阅读,可在命令中添加 --output text 选项。)GetKeyPolicy 仅适用于调用方账户和区域中的 KMS 密钥。

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

$ 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: 获取 KMS 密钥的别名和 ARN

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

默认情况下,ListAliases 命令会返回账户和区域中的所有别名。这包括您创建的别名(此别名与您的客户托管式密钥关联),以及 Amazon 创建并与您账户中的 Amazon 托管式密钥 关联的别名。您可以识别 Amazon 别名,因为其名称的格式为 aws/<service-name>(例如 aws/dynamodb)。

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

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

$ 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/financeKey", "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/financeKey", "TargetKeyId": "0987dcba-09fe-87dc-65ba-ab0987654321", "CreationDate": 1604958290.014, "LastUpdatedDate": 1604958290.014 }, { "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 }, { "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 }, { "AliasName": "alias/aws/redshift", "AliasArn": "arn:aws:kms:us-west-2:111122223333:alias/aws/redshift" }, ] }

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

以下示例中的命令可获取引用客户托管密钥的别名。但也可以使用类似命令来查找引用 Amazon 托管式密钥 的别名。

$ 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 }, ] }

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

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

ListResourceTags: 获取 KMS 密钥上的标签

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

ListResourceTags 操作会返回所有 KMS 密钥的标签,但 Amazon 托管式密钥无标签。它仅适用于调用方账户和区域中的 KMS 密钥。

要查找 KMS 密钥的标签,请使用 ListResourceTags 操作。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 操作来获取具有特定标签、标签键或标签值的账户和区域中的所有 KMS 密钥。要做到这一点,请使用您的编程语言的筛选功能。

例如,以下 Bash 脚本使用ListKeysListResourceTags操作使用Project标签密钥获取账户和区域中的所有 KMS 密钥。这两个操作都只获取结果的第一页。如果您有很多 KMS 密钥或很多标签,请使用语言的分页功能来获取每个操作的完整结果。在运行此示例之前,请将示例密钥 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" } ]