參考AWS Secrets Manager參數中的 Parameter Store 秘密 - AWS Systems Manager

參考AWS Secrets Manager參數中的 Parameter Store 秘密

AWS Secrets Manager 可協助您組織和管理重要的組態資料 (例如憑證、密碼及授權金鑰)。Parameter Store (AWS Systems Manager 的功能) 已與 Secrets Manager 整合,因此當您在使用其他支援參考 Parameter Store 參數的 AWS 服務時,便能擷取 Secrets Manager 秘密。這些服務包括 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Elastic Container Service (Amazon ECS)、AWS Lambda、AWS CloudFormation、AWS CodeBuild、AWS CodeDeploy 及其他 Systems Manager 功能。透過使用 Parameter Store 來參考 Secrets Manager 秘密,您就能夠建立安全、一致的流程,來呼叫和使用程式碼與組態指令碼中的秘密和參考資料。

如需有關 Secrets Manager 的詳細資訊,請參閱《AWS Secrets Manager 使用者指南》中的什麼是 AWS Secrets Manager?

Restrictions

使用 Parameter Store 參考 Secrets Manager 秘密時,請注意以下限制:

  • 您只能透過使用 GetParameterGetParameters API 操作來擷取 Secrets Manager 秘密。修改作業和進階查詢 API 操作,例如 DescribeParametersGetParametersByPath,不支援 Secrets Manager。

  • 您可以使用 AWS Command Line Interface (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 秘密所連接的 AWS Identity and Access Management (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 使用者指南》中的其他程序。

注意

開始操作之前,請確認您具備參考 Parameter Store 參數中 Secrets Manager 秘密的許可。如果您在 Secrets Manager 和 Systems Manager 中擁有管理員許可,則可使用 Parameter Store API 來參考或擷取秘密。如果您參考了 Parameter Store 參數中的 Secrets Manager 秘密,卻不具備存取該秘密的許可,參考作業將會失敗。如需詳細資訊,請參閱《AWS Secrets Manager 使用者指南》中的 AWS Secrets Manager 的身分驗證與存取控制

重要

Parameter Store 為可傳遞 Secrets Manager 秘密參考的服務。Parameter Store 並不會保留秘密的相關資料或中繼資料。此外,參考資料皆為無狀態。

若要使用 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。以下是一些使用 Parameter Store 正確參考 Secrets Manager、CFCreds1DBPass 的參數範例:

    • /aws/reference/secretsmanager/CFCreds1

    • /aws/reference/secretsmanager/DBPass

    下方的 Java 程式碼範例會參考 Secrets Manager 中存放的存取金鑰和秘密金鑰。此程式碼範例將設定 Amazon DynamoDB 用戶端。除此之外,該程式碼會從 Parameter Store 擷取組態資料和登入資料。組態資料是以字串參數的形式存放在 Parameter Store 中,而憑證則是存放在 Secrets Manager 中。儘管組態資料和憑證存放於不同的服務,您仍可使用 GetParameter API 從 Parameter Store 存取這兩組資料。

    /** * 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 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 secretsmanager list-secrets 命令來尋找您秘密的名稱。

    AWS 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",
          }
    }

    AWS 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",
    }
    

    AWS 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",
    }