确保在 AWS 的 KMS 中只创建一个 CMK

Ensure only a single CMK is created in AWS's KMS

AWS 开发工具包允许以编程方式创建新的 CMK。

但是,我想检查给定的 CMK 是否已经创建,如果是,就使用它而不是重新创建它。

据我所知,描述和别名都不是唯一标识符,并且与 S3 不同,它们没有唯一名称,因此我不确定代码中可以使用哪些其他属性检查给定的 CMK 是否存在。

关于如何执行此操作的任何想法?是否有我缺少的 CMK 属性?

根据你的问题,我不清楚你是否想要:

1)判断是否已经创建了一个(任意)CMK;或
2)判断是否已经创建了(特定的)CMK;
3) 保证客户端不能创建多个密钥;

对于1),可以使用ListKeys and DescribeKeyAPI的组合。

不过,就像您自己指出的那样,您可以在创建密钥的过程中指定任何独特的内容,以便稍后在使用前检查是否存在。所以 2) 有点棘手。在 创建 CMK 之后,您可以做的是使用 CreateAlias API. KMS guarantees a one-to-one mapping between aliases and CMKs, so you can do that and then call the DescribeKey API。 DescribeKey 接受别名作为参数,因此应该可以满足您的需求。只检查它是否存在,如果存在,则重用它,如果不存在,则创建它。

如果您想要完成 3,我的建议是您使用 AWS 控制台创建一个 CMK,并为您在调用 SDK 时承担的 IAM 角色或用户分配一个策略 API 无法创建 CMK。