将硬编码的密钥移动到 Amazon Secrets Manager - Amazon Secrets Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将硬编码的密钥移动到 Amazon Secrets Manager

如果代码中存在明文密钥,我们建议将其轮换并存储到 Secrets Manager 中。将密钥移动到 Secrets Manager 后,您的代码将直接从 Secrets Manager 中检索密钥,从而解决了任何看到代码的人会看到密钥的问题。轮换密钥会吊销当前硬编码的密钥,使其不再有效。

关于数据库凭证密钥,请参见将硬编码的数据库凭据移至 Amazon Secrets Manager

在开始之前,您需要确定谁需要访问该密钥。我们建议使用两个 IAM 角色来管理密钥的权限:

  • 负责管理组织中的密钥的角色。有关更多信息,请参阅Secrets Manager 管理员权限。您将使用此角色创建和轮换密钥。

  • 一个可以在运行时(例如在本教程中为 RoleToRetrieveSecretAtRuntime)使用密钥的角色。您的代码将代入此角色以检索密钥。在本教程中,您将向该角色仅授予检索一个密钥值的权限,并您将使用密钥的资源策略授予权限。有关其他替代方法,请参阅后续步骤

第 1 步:创建密钥

第一步是将现有硬编码的密钥复制到 Secrets Manager 中的密钥中。如果密钥与某个 Amazon 资源相关,则应将其存储在与该资源相同的区域中。否则,请将其存储在对于您的使用案例而言延迟最低的区域中。

创建密钥(控制台)
  1. 通过 https://console.aws.amazon.com/secretsmanager/ 打开 Secrets Manager 控制台。

  2. 选择 Store a new secret (存储新密钥)

  3. Choose secret type(选择密钥类型)页面上,执行以下操作:

    1. 对于 Secret type(密钥类型),请选择 Other type of secret(其他密钥类型)。

    2. Key/value pairs(键值对)或者 Plaintext(明文)格式输入密钥。一些示例:

      API 密钥键值对:

      ClientID : my_client_id

      ClientSecret : wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

      凭证键值对:

      Username : saanvis

      Password : EXAMPLE-PASSWORD

      OAuth 令牌明文:

      AKIAI44QH8DHBEXAMPLE

      数字证书明文:
      -----BEGIN CERTIFICATE----- EXAMPLE -----END CERTIFICATE-----
      私有密钥明文:
      –---BEGIN PRIVATE KEY –-- EXAMPLE ––-- END PRIVATE KEY –---
    3. 对于 Encryption key(加密密钥),选择 aws/secretsmanager 使用 Secrets Manager 的 Amazon 托管式密钥。使用此密钥不产生任何费用。例如,您还可以使用自己的客户管理型密钥来访问来自其他 Amazon Web Services 账户 的密钥。有关使用客户托管密钥的成本的信息,请参阅 定价

    4. 选择 Next(下一步)。

  4. Choose secret type(选择密钥类型)页面上,执行以下操作:

    1. 输入一个描述性的 Secret name(密钥名称)和 Description(说明)。

    2. Resource permissions(资源权限)中,选择 Edit permissions(编辑权限)。粘贴以下策略(允许 RoleToRetrieveSecretAtRuntime 检索密钥),然后选择 Save(保存)。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountId:role/RoleToRetrieveSecretAtRuntime" }, "Action": "secretsmanager:GetSecretValue", "Resource": "*" } ] }
    3. 在页面底部,选择 Next

  5. Configure rotation(配置轮换)页面上,将轮换禁用。选择 Next(下一步)。

  6. Review (审核) 页上,审核您的密钥详细信息,然后选择 Store (存储)

第 2 步:更新代码

您的代码必须代入 IAM 角色 RoleToRetrieveSecretAtRuntime 才能检索密钥。有关更多信息,请参阅切换到 IAM 角色(Amazon)

然后,您可以使用 Secrets Manager 提供的示例代码更新您的代码,以检索 Secrets Manager 中的密钥。

查找示例代码
  1. 通过 https://console.aws.amazon.com/secretsmanager/ 打开 Secrets Manager 控制台。

  2. 密钥列表页上,选择您的密钥。

  3. 向下滚动到 Sample code(示例代码)。选择您的编程语言,然后复制代码片段。

移除应用程序中的硬编码密钥并粘贴此代码片段。根据代码语言的不同,您可能需要在片段中添加对函数或方法的调用。

使用密钥代替硬编码密钥,测试您的应用程序是否符合预期。

第 3 步:更新密钥

最后一步是吊销并更新硬编码的密钥。请参阅密钥的来源以查找吊销和更新密钥的说明。例如,您可能需要停用当前密钥并生成一个新密钥。

用新值更新密钥
  1. 通过 https://console.aws.amazon.com/secretsmanager/ 打开 Secrets Manager 控制台。

  2. 选择 Secrets(密钥),然后选择该密钥。

  3. Secret details(密钥详细信息)页面上,向下滚动并选择 Retrieve secret value(检索密钥值),然后选择 Edit(编辑)。

  4. 更新密钥然后选择 Save(保存)。

然后,测试您的应用程序按照预期那样在使用新密钥。

后续步骤

从代码中移除硬编码的密钥后,接下来需要注意以下事项: