AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

引用 Parameter Store 参数中的 AWS Secrets Manager 密钥

Secrets Manager 帮助您组织和管理重要配置数据(如凭证、密码和许可证密钥)。Parameter Store 现已与 Secrets Manager 集成,以便您可以在使用其他已支持对 Parameter Store 参数的引用的 AWS 服务时检索 Secrets Manager 密钥。这些服务包括 Amazon EC2、Amazon Elastic Container Service、AWS Lambda、AWS CloudFormation、AWS CodeBuild、AWS CodeDeploy 和其他 Systems Manager 功能。通过使用 Parameter Store 引用 Secrets Manager 密钥,可创建一致且安全的过程来调用和使用代码和配置脚本中的密钥和引用数据。

有关 Secrets Manager 的更多信息,请参阅什么是 AWS Secrets Manager?(位于 AWS Secrets Manager User Guide 中)。

重要

Parameter Store 充当对 Secrets Manager 密钥的引用的直通服务。Parameter Store 不会保留有关密钥的数据或元数据。引用是无状态的。

限制

使用 Parameter Store 引用 Secrets Manager 密钥时,请注意以下限制:

  • 只能通过使用 GetParameterGetParameters API 操作检索 Secrets Manager 密钥。Secrets Manager 不支持修改操作和高级查询 API 操作(如 DescribeParametersGetParametersByPath)。

  • 可以使用 AWS CLI、AWS Tools for Windows PowerShell 和软件开发工具包通过使用 Parameter Store 检索密钥。

  • 当通过 Parameter Store 检索 Secrets Manager 密钥时,参数名称必须以以下预留路径开头:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager

    下面是示例:/aws/reference/secretsmanager/CFCreds1

  • Parameter Store 遵守附加到 Secrets Manager 密钥的 IAM 策略。例如,如果用户 1 没有密钥 A 的访问权限,则用户 1 无法使用 Parameter Store 检索密钥 A。

  • 引用 Secrets Manager 密钥的参数无法使用 Parameter Store 版本控制或历史记录功能。

  • Parameter Store 遵守 Secrets Manager 版本阶段。如果您引用一个版本阶段,则它只能使用字母、数字、句点 (.)、连字符 (-) 或下划线 (_)。在版本阶段中指定的所有其他符号都会导致引用失败。

如何使用 Parameter Store 引用 Secrets Manager 密钥

以下过程介绍如何使用 Parameter Store API 引用 Secrets Manager 密钥。此过程引用 AWS Secrets Manager User Guide 中的其他过程。

注意

在开始之前,请确认您有权引用 Parameter Store 参数中的 Secrets Manager 密钥。如果您在 Secrets Manager 和 Systems Manager 中具有管理员特权,则可使用 Parameter Store API 引用或检索密钥。如果您引用 Parameter Store 参数中的 Secrets Manager 密钥,且您无权访问该密钥,则引用将失败。有关更多信息,请参阅 AWS Secrets Manager User Guide 中的 AWS Secrets Manager 身份验证和访问控制

使用 Parameter Store 引用 Secrets Manager 密钥

  1. 在 Secrets Manager 中创建密钥。有关更多信息,请参阅使用 AWS Secrets Manager 创建和管理密钥

  2. 使用 AWS CLI、AWS Tools for Windows PowerShell 或软件开发工具包引用密钥。当您引用 Secrets Manager 密钥时,参数名称必须以以下预留路径开头:/aws/reference/secretsmanager/。指定此路径后,Systems Manager 知道从 Secrets Manager 而不是 Parameter Store 检索密钥。下面是正确引用 Secrets Manager 密钥的一些示例参数:

    • /aws/reference/secretsmanager/CFCreds1

    • /aws/reference/secretsmanager/DBPass

    下面是引用存储在 Secrets Manager 中的访问密钥和秘密密钥的 Java 代码示例。此代码示例设置 Amazon DynamoDB 客户端。代码通过 Parameter Store 检索配置数据和凭证。配置数据以字符串参数形式存储在 Parameter Store 中,凭证存储在 Secrets Manager 中。即使配置数据和凭证存储在不同的服务中,但这两组数据都可通过 Parameter Store 使用 GetParameter API 访问。

    /** * Initialize AWS System Manager Client with default credentials */ AWSSimpleSystemsManagement ssm = AWSSimpleSystemsManagementClientBuilder.defaultClient(); ... /** * Example method to launch DynamoDB client with credentials different from default * @return DynamoDB client */ AmazonDynamoDB getDynamoDbClient() { //Getting AWS credentials from Secrets manager using GetParameter BasicAWSCredentials differentAWSCreds = new BasicAWSCredentials( getParameter("/aws/reference/secretsmanager/access-key"), getParameter("/aws/reference/secretsmanager/secret-key")); //Initialize the DDB Client with different credentials final AmazonDynamoDB client = AmazonDynamoDBClient.builder() .withCredentials(new AWSStaticCredentialsProvider(differentAWSCreds)) .withRegion(getParameter("region")) //Getting config from Parameter Store .build(); return client; } /** * Helper method to retrieve SSM Parameter's value * @param parameterName identifier of the SSM Parameter * @return decrypted parameter value */ public GetParameterResult getParameter(String parameterName) { GetParameterRequest request = new GetParameterRequest(); request.setName(parameterName); request.setWithDecryption(true); return ssm.newGetParameterCall().call(request).getParameter().getValue(); }

    下面是一些 AWS CLI 示例。

    AWS CLI 示例 1:使用密钥名称引用

    aws ssm get-parameter --name /aws/reference/secretsmanager/s1-secret --with-decryption

    此命令会返回如下信息。

    { "Parameter": { "Name": "/aws/reference/secretsmanager/s1-secret", "Value": "Fl*MEishm!al875", "Type": "SecureString", "LastModifiedDate": 2018-05-14T21:47:14.743Z, "ARN": "arn:aws:secretsmanager:us-west-1:123456789:secret:s1-secret- E18LRP", "SourceResult": "{ \"CreatedDate\": 1526334434.743, \"Name\": \"s1-secret\", \"VersionId\": \"aaabbbccc-1111-222-333-123456789\", \"SecretString\": \"Fl*MEishm!al875\", \"VersionStages\": [\"AWSCURRENT\"], \"ARN\": \"arn:aws:secretsmanager:us-west- 1:123456789:secret:s1-secret-E18LRP\" }" } }

    AWS CLI 示例 2:包括版本 ID 的引用

    aws ssm get-parameter --name /aws/reference/secretsmanager/s1-secret:11111-aaa-bbb-ccc-123456789 --with-decryption

    此命令会返回如下信息。

    { "Parameter": { "Name": "/aws/reference/secretsmanager/s1-secret", "Value": "Fl*MEishm!al875", "Type": "SecureString", "LastModifiedDate": 2018-05-14T21:47:14.743Z, "ARN": "arn:aws:secretsmanager:us-west-1:123456789:secret:s1-secret- E18LRP", "SourceResult": "{ \"CreatedDate\": 1526334434.743, \"Name\": \"s1-secret\", \"VersionId\": \"11111-aaa-bbb-ccc-123456789\", \"SecretString\": \"Fl*MEishm!al875\", \"VersionStages\": [\"AWSCURRENT\"], \"ARN\": \"arn:aws:secretsmanager:us-west- 1:123456789:secret:s1-secret-E18LRP\" }" "Selector": ":11111-aaa-bbb-ccc-123456789" } }

    AWS CLI 示例 3:包括版本阶段的引用

    aws ssm get-parameter --name /aws/reference/secretsmanager/s1-secret:AWSCURRENT --with-decryption

    此命令会返回如下信息。

    { "Parameter": { "Name": "/aws/reference/secretsmanager/s1-secret", "Value": "Fl*MEishm!al875", "Type": "SecureString", "LastModifiedDate": 2018-05-14T21:47:14.743Z, "ARN": "arn:aws:secretsmanager:us-west-1:123456789:secret:s1-secret- E18LRP", "SourceResult": "{ \"CreatedDate\": 1526334434.743, \"Name\": \"s1-secret\", \"VersionId\": \"11111-aaa-bbb-ccc-123456789\", \"SecretString\": \"Fl*MEishm!al875\", \"VersionStages\": [\"AWSCURRENT\"], \"ARN\": \"arn:aws:secretsmanager:us-west- 1:123456789:secret:s1-secret-E18LRP\" }" "Selector": ":AWSCURRENT" } }