引用Amazon Secrets Manager来自参数存储参数的密码 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

引用Amazon Secrets Manager来自参数存储参数的密码

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

有关 Secrets Manager 的更多信息,请参阅什么是Amazon Secrets Manager?中的Amazon Secrets Manager用户指南

Restrictions

使用参数存储引用 Secrets Manager 时,请注意以下限制:

  • 您只能通过使用检索密钥管理器密钥GetParameterGetParametersAPI 操作。修改操作和高级查询 API 操作,例如DescribeParametersGetParametersByPath,不支持 Secrets Manager。

  • 您可以将Amazon Command Line Interface(Amazon CLI),Amazon Tools for Windows PowerShell和 SDK 通过使用参数存储检索密钥。

  • 从参数存储检索密钥管理器密钥时,名称必须以以下预留路径开头:/aws/referensManager/密码 _ 内部 _ 秘密 _ 管理器

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

  • Parameter Store 荣誉Amazon Identity and Access Management(IAM) 策略附加到 Secrets Manager 密码。例如,如果用户 1 没有密钥 A 的访问权限,则用户 1 无法使用参数存储检索密钥 A。

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

  • 参数存储荣誉 Secrets Manager 版本阶段。如果您引用某个版本阶段,则它使用字母、数字、句点 (.)、连字符 (-) 或下划线 (_)。在版本阶段中指定的所有其他符号都会导致引用失败。

如何使用参数存储引用密钥管理器密钥

以下过程介绍如何使用参数存储 API 引用密钥管理器密钥。该过程引用Amazon Secrets Manager用户指南

注意

在开始之前,请确认您有权引用参数存储参数中的密钥 Secrets Manager 密钥。如果您在密钥管理器和 Systems Manager 中具有管理员权限,则可使用参数存储 API 引用或检索密钥。如果您引用 Secret Secrets Manager 钥,但不具备访问该密钥的权限,则引用将失败。有关更多信息,请参阅 。的身份验证和访问控制Amazon Secrets Manager中的Amazon Secrets Manager用户指南

重要

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

使用参数存储引用密码管理器密码

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

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

    • /aws/reference/secretsmanager/CFCreds1

    • /aws/reference/secretsmanager/DBPass

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

    /** * Initialize 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 Amazon 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(); }

    下面是一些 Amazon CLI 示例。使用aws secretsmanager list-secrets命令查找密钥名称。

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

    Linux & macOS
    aws ssm get-parameter \ --name /aws/reference/secretsmanager/s1-secret \ --with-decryption
    Windows
    aws ssm get-parameter ^ --name /aws/reference/secretsmanager/s1-secret ^ --with-decryption

    此命令会返回如下信息。

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

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

    Linux & macOS
    aws ssm get-parameter \ --name /aws/reference/secretsmanager/s1-secret:11111-aaa-bbb-ccc-123456789 \ --with-decryption
    Windows
    aws ssm get-parameter ^ --name /aws/reference/secretsmanager/s1-secret:11111-aaa-bbb-ccc-123456789 ^ --with-decryption

    此命令会返回如下信息。

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

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

    Linux & macOS
    aws ssm get-parameter \ --name /aws/reference/secretsmanager/s1-secret:AWSCURRENT \ --with-decryption
    Windows
    aws ssm get-parameter ^ --name /aws/reference/secretsmanager/s1-secret:AWSCURRENT ^ --with-decryption

    此命令会返回如下信息。

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