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

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

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

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

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

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

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

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

第 1 步:创建密钥

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

创建密钥(控制台)
  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 的 AWS 托管式密钥。使用此密钥不产生任何费用。例如,您还可以使用自己的客户管理型密钥来访问来自其他 AWS 账户 的密钥。有关使用客户托管密钥的成本的信息,请参阅 定价

    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 角色(AWS)

然后,您可以使用 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(保存)。

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

后续步骤

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