本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将硬编码的机密移至 AWS Secrets Manager
如果代码中存在明文密钥,我们建议将其轮换并存储到 Secrets Manager 中。将密钥移动到 Secrets Manager 后,您的代码将直接从 Secrets Manager 中检索密钥,从而解决了任何看到代码的人会看到密钥的问题。轮换密钥会吊销当前硬编码的密钥,使其不再有效。
关于数据库凭证密钥,请参见将硬编码的数据库凭据移至 AWS Secrets Manager。
在开始之前,您需要确定谁需要访问该密钥。我们建议使用两个IAM角色来管理您的密钥的权限:
-
负责管理组织中的密钥的角色。有关更多信息,请参阅 Secrets Manager 管理员权限。您将使用此角色创建和轮换密钥。
-
一个可以在运行时使用密钥的角色,例如在本教程中你使用
RoleToRetrieveSecretAtRuntime
。 您的代码扮演此角色来检索密钥。在本教程中,您将向该角色仅授予检索一个密钥值的权限,并您将使用密钥的资源策略授予权限。有关其他替代方法,请参阅后续步骤。
第 1 步:创建密钥
第一步是将现有硬编码的密钥复制到 Secrets Manager 中的密钥中。如果密钥与 AWS 资源相关,请将其存储在与该资源相同的区域。否则,请将其存储在您的用例延迟最低的区域。
创建密钥(控制台)
打开 Secrets Manager 控制台,网址为https://console.aws.amazon.com/secretsmanager/
。 -
选择 存储新密钥。
-
在 Choose secret type(选择密钥类型)页面上,执行以下操作:
-
对于密钥类型,请选择其他密钥类型。
-
以 Key/value pairs(键值对)或者 Plaintext(明文)格式输入密钥。一些示例:
-
对于 Encryption key(加密密钥),选择 aws/secretsmanager 使用 Secrets Manager 的 AWS 托管式密钥 。使用此密钥不产生任何费用。例如,您还可以使用自己的客户管理型密钥来访问来自其他 AWS 账户的密钥。有关使用客户托管密钥的成本的信息,请参阅 定价。
-
选择下一步。
-
-
在 Choose secret type(选择密钥类型)页面上,执行以下操作:
-
输入一个描述性的 Secret name(密钥名称)和 Description(说明)。
-
在 Resource permissions(资源权限)中,选择 Edit permissions(编辑权限)。粘贴以下政策,该策略允许
RoleToRetrieveSecretAtRuntime
检索密钥,然后选择保存。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountId
:role/
" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }RoleToRetrieveSecretAtRuntime
-
在页面底部,选择 Next。
-
-
在 Configure rotation(配置轮换)页面上,将轮换禁用。选择下一步。
-
在 Review (审核) 页上,审核您的密钥详细信息,然后选择 Store (存储)。
第 2 步:更新代码
你的代码必须扮IAM演这个角色 RoleToRetrieveSecretAtRuntime
以便能够检索秘密。有关更多信息,请参阅切换到IAM角色 (AWS API)。
然后,您可以使用 Secrets Manager 提供的示例代码更新您的代码,以检索 Secrets Manager 中的密钥。
查找示例代码
打开 Secrets Manager 控制台,网址为https://console.aws.amazon.com/secretsmanager/
。 -
在密钥列表页上,选择您的密钥。
-
向下滚动到 Sample code(示例代码)。选择您的编程语言,然后复制代码片段。
移除应用程序中的硬编码密钥并粘贴此代码片段。根据代码语言的不同,您可能需要在片段中添加对函数或方法的调用。
使用密钥代替硬编码密钥,测试您的应用程序是否符合预期。
第 3 步:更新密钥
最后一步是吊销并更新硬编码的密钥。请参阅密钥的来源以查找吊销和更新密钥的说明。例如,您可能需要停用当前密钥并生成一个新密钥。
用新值更新密钥
打开 Secrets Manager 控制台,网址为https://console.aws.amazon.com/secretsmanager/
。 -
选择 Secrets(密钥),然后选择该密钥。
-
在 Secret details(密钥详细信息)页面上,向下滚动并选择 Retrieve secret value(检索密钥值),然后选择 Edit(编辑)。
-
更新密钥然后选择 Save(保存)。
然后,测试您的应用程序按照预期那样在使用新密钥。
后续步骤
从代码中移除硬编码的密钥后,接下来需要注意以下事项:
-
要在你的 Java 和 Python 应用程序中查找硬编码的机密,我们建议使用 Amazon CodeGuru Reviewer。
-
您可以通过缓存密钥来提高性能并降低成本。有关更多信息,请参阅 从中获取秘密 AWS Secrets Manager。
-
对于从多个区域访问的密钥,请考虑复制密钥以减少延迟。有关更多信息,请参阅 跨区域复制 AWS Secrets Manager 密钥。
-
在本教程中,您授予了
RoleToRetrieveSecretAtRuntime
只有检索机密值的权限。要向角色授予更多权限(例如获取有关密钥的元数据或查看密钥列表),请参阅基于资源的策略。 -
在本教程中,您授予了以下权限
RoleToRetrieveSecretAtRuntime
通过使用密钥的资源策略。有关授予权限的其他方法,请参阅基于身份的策略。