创建基本密钥 - AWS Secrets Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

创建基本密钥

AWS Secrets Manager 使您能够非常方便地存储基本密钥。基本密钥包含最少的元数据和单个加密的密钥值。Secrets Manager 存储密钥并自动使用 AWSCURRENT 对其进行标记。

创建基本密钥

请按照以下选项卡之一中的步骤进行操作。

Using the Secrets Manager console
最小权限

要在控制台中创建密钥,您必须具有以下权限:

  • SecretsManagerReadWrite AWS 托管策略授予的权限。

  • IAMFullAccess AWS 托管策略授予的权限 – 只有在您为密钥启用轮换时才是必需的。

  • kms:CreateKey – 只有在您希望 Secrets Manager 创建自定义 AWS KMS 客户主密钥 (CMK) 时才是必需的。

  • kms:Encrypt – 仅当您使用自定义 AWS KMS 密钥加密您的密钥(而不是使用您账户的默认 Secrets Manager CMK)时是必需的。您不需要具有该权限,即可使用 Secrets Manager 的账户默认 AWS 托管 CMK。

  • kms:Decrypt – 仅当您使用自定义 AWS KMS 密钥加密您的密钥(而不是使用您账户的默认 Secrets Manager CMK)时是必需的。您不需要具有该权限,即可使用 Secrets Manager 的账户默认 AWS 托管 CMK。

  • kms:GenerateDataKey – 仅当您使用自定义 AWS KMS 密钥加密您的密钥(而不是使用您账户的默认 Secrets Manager CMK)时是必需的。您不需要具有该权限,即可使用 Secrets Manager 的账户默认 AWS 托管 CMK。

  1. 登录到 AWS Secrets Manager 控制台 (https://console.amazonaws.cn/secretsmanager/)。

  2. 选择存储新密钥

  3. 选择密钥类型部分中,选择以下选项之一以指定要创建的密钥类型。然后提供所需信息。

  4. 对于 秘密名称,键入可选路径和名称,例如 production/MyAwesomeAppSecretdevelopment/TestSecret。请注意,使用斜线字符可以将您的秘密结构化为层次结构(例如按部署环境分组),这样您可能会在规模的组织和管理秘密中发现有用的分组。您可以选择添加描述以帮助记住该密钥的用途。

    密钥名称应仅包含 ASCII 字母、数字或以下任意字符:/_+=.@-。

    注意

    如果向 Systems Manager Parameter Store 中添加密钥,则必须向目录结构添加正斜杠。有关更多信息,请参阅有关将参数组织成层次结构的 AWS Systems Manager 文档。

  5. (可选)在 Tags (标签) 部分中,您可以向密钥添加一个或多个标签。标签包含您定义的键和值。标签有助于管理您的 AWS 资源。您可以创建标签以将资源与组织的结构相关联,例如,键=“Department”,值=“Accounting”。这有助于成本分配和跟踪。您可以分配标签以按使用资源的应用程序对资源进行分组(键=“AppName”,值=“HRDatabase”)。您几乎可以为任何用途创建标签。每个资源(如密钥)均可附加多个标签。有关详细信息,请参阅 AWS 标签策略AWS 答案 网站。

    重要

    请不要将有关密钥的敏感信息存储在标签中。只能将敏感信息存储在密钥的密钥值(SecretStringSecretBinary 字段)中,将在其中使用加密保护信息。

  6. 在填写 Name (名称)Description (描述) 和任何 Tags (标签) 后,选择 Next (下一步)

  7. (可选) 此时,您可以为密钥配置轮换。由于您创建了不轮换的“基本”密码,因此,请将该选项保留为禁用自动轮换,然后选择下一步

    有关在新的或现有密钥上配置轮换的信息,请参阅轮换您的 AWS Secrets Manager 密钥

  8. 检查您的设置,然后选择 Store secret (存储密钥) 以将输入的所有内容作为新密钥保存在 Secrets Manager 中。

Amazon RDS

将这种类型的密钥用于支持的数据库服务之一(Secrets Manager 使用预配置的 Lambda 轮换函数为其提供全面的轮换支持)。您仅指定身份验证凭证,因为 Secrets Manager 查询数据库实例以确定其他参数。

  1. 键入用户名和密码以允许访问数据库。选择一个仅具有访问该密钥的客户所需的权限的用户。

  2. 选择要用于加密密钥中的受保护文本的 AWS KMS 加密密钥。如果您未选择任何密钥,Secrets Manager 将检查账户的默认密钥,并使用该密钥(如果存在)。如果不存在默认密钥,则 Secrets Manager 将自动为您创建一个。您也可以选择添加新密钥以创建专用于该密钥的自定义 CMK。要创建您自己的 AWS KMS CMK,您必须具有在您的账户中创建 CMK 的权限。

  3. 从列表中选择数据库实例。Secrets Manager 通过查询所选实例来检索有关数据库的连接详细信息。

Amazon Redshift

将这种类型的密钥用于 Amazon Redshift 集群。您仅指定身份验证凭证,因为 Secrets Manager 查询数据库实例以确定其他参数。

  1. 键入用户名和密码以允许访问数据库。

  2. 选择要用于加密密钥中的受保护文本的 AWS KMS 加密密钥。如果您未选择任何密钥,Secrets Manager 将检查账户的默认密钥,并使用该密钥(如果存在)。如果不存在默认密钥,则 Secrets Manager 将自动为您创建一个。您也可以选择添加新密钥以创建专用于该密钥的自定义 CMK。要创建您自己的 AWS KMS CMK,您必须具有在您的账户中创建 CMK 的权限。

  3. 选择正确的数据库引擎。

  4. 键入数据库服务器 IP 地址、数据库名称和 TCP 端口号以指定连接详细信息。

Other databases

Secrets Manager 支持其他类型的数据库,并将该密钥用于这些类型。不过,您必须提供有关数据库的其他信息。要轮换该密钥,您必须编写一个自定义 Lambda 轮换函数以解析密钥,并与服务交互以轮换密钥。

  1. 键入用户名和密码以允许访问数据库。

  2. 选择要用于加密密钥中的受保护文本的 AWS KMS 加密密钥。如果您未选择任何密钥,Secrets Manager 将检查账户的默认密钥,并使用该密钥(如果存在)。如果不存在默认密钥,则 Secrets Manager 将自动为您创建一个。您也可以选择添加新密钥以创建专用于该密钥的自定义 CMK。要创建您自己的 AWS KMS CMK,您必须具有在您的账户中创建 CMK 的权限。

  3. 选择数据库引擎类型以运行数据库。

  4. 键入数据库服务器 IP 地址、数据库名称和 TCP 端口号以指定连接详细信息。

Other type of secret

可以为 Secrets Manager 配置其他数据库或服务,并将该密钥用于这些数据库或服务。您必须提供您的密钥的结构和详细信息。要轮换该密钥,您必须编写一个自定义 Lambda 轮换函数以解析密钥,并与服务交互以代表您轮换密钥。

  1. Key (键)Value (值) 对的形式指定自定义密钥的详细信息。例如,您可以指定 UserName 键,然后提供相应的用户名以作为值。添加第二个名为 Password 的键,并将密码文本作为值。您也可以为 Database nameServer addressTCP port 等添加条目。您可以添加所需数量的对以存储所需的信息。

    或者,您也可以选择明文选项卡,并以任何格式输入密钥值。

  2. 选择要用于加密密钥中的受保护文本的 AWS KMS 加密密钥。如果您未选择任何密钥,Secrets Manager 将检查账户中的默认密钥,并使用该密钥(如果存在)。如果不存在默认密钥,则 Secrets Manager 将自动为您创建一个。您也可以选择添加新密钥以创建专用于该密钥的自定义 CMK。要创建您自己的 AWS KMS CMK,您必须具有在您的账户中创建 CMK 的权限。

Using the AWS CLI or AWS SDK operations

您可以使用以下命令在 Secrets Manager 中创建基本密钥:

执行与基于控制台的密钥配置等效的操作的 AWS CLI 命令示例。该命令假定您将密钥放在名为 mycreds.json 的文件中,例如该示例 JSON 文本结构 {"username":"anika","password":"aDM4N3*!8TT"}

$ aws secretsmanager create-secret --name production/MyAwesomeAppSecret --secret-string file://mycreds.json { "SecretARN": "arn:aws-cn:secretsmanager:region:accountid:secret:production/MyAwesomeAppSecret-AbCdEf", "SecretName": "production/MyAwesomeAppSecret", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE" }
重要

您可以使用任何所需格式创建一个基本密码 SecretString。例如,您可以使用简单的JSONKey-Value对, {"username":"someuser", "password":"securepassword"} 但是,如果您希望稍后启用此密码的旋转,则必须使用与此秘密使用的旋转功能预期的特定结构。有关与密钥值一起使用的每个必需轮换函数的详细信息,请参阅可用于创建 Lambda 轮换函数的 AWS 模板 中的相关轮换函数下面的预期的 SecretString 值条目。

Secrets Manager 不需要使用 ClientRequestToken 参数,因为您使用 AWS CLI,它会自动为您生成并提供一个参数。在使用账户的默认 Secrets Manager CMK 时,您不需要使用 KmsKeyId 参数。在使用 Secrets Manager 控制台和 SecretString 时,您无法使用 SecretBinary。Secrets Manager 保留 SecretType 以供控制台使用。

在工作环境中,您的客户使用的应用程序使用密钥以访问数据库,您可能仍需要为应用程序用于访问密钥的 IAM 用户或角色授予权限。您可以通过将基于资源的策略直接附加到密钥,然后在 Principal 元素中列出用户或角色,来完成此操作。或者,您可以将策略附加到在 Resource 元素中指定密钥的用户或角色。