參考參數存放區參數中的 AWS Secrets Manager 秘密 - AWS Systems Manager

參考參數存放區參數中的 AWS Secrets Manager 秘密

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

如需 Secrets Manager 的詳細資訊,請參閱 AWS Secrets Manager User Guide 中的什麼是 AWS Secrets Manager?

重要

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

限制

使用 參數存放區 參考 Secrets Manager 秘密時,請注意以下限制:

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

  • 您可以使用 AWS CLI、AWS Tools for Windows PowerShell 和軟體開發套件,藉此透過 參數存放區 擷取秘密。

  • 當您從 參數存放區 中擷取 Secrets Manager 秘密時,參數名稱的開頭必須採用以下預訂路徑:/aws/reference/secretsmanager/secret_ID_in_Secrets_Manager

    請見此處範例:/aws/reference/secretsmanager/CFCreds1

  • 參數存放區 會遵守 Secrets Manager 秘密所連接的 IAM 政策。例如,如果使用者 1 沒有秘密 A 的存取權限,則表示使用者 1 無法透過 參數存放區 擷取秘密 A。

  • 參考 Secrets Manager 秘密的參數將無法使用 參數存放區 的版本控制或歷程記錄功能。

  • 參數存放區 會以 Secrets Manager 版本階段為準。您所參考的版本階段僅能使用字母、數字、句號 (.)、連字號 (-) 或底線 (_)。若您在版本階段中指定其他符號,都會導致參考失敗。

如何使用參數存放區參考 Secrets Manager 秘密

下列程序會說明如何使用 參數存放區 API 參考 Secrets Manager 秘密。另外,此程序還會參考 AWS Secrets Manager User Guide 中的其他程序。

注意

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

使用 參數存放區 參考 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 擷取秘密,而非 參數存放區。以下是一些正確參考 Secrets Manager 秘密的參數範例:

    • /aws/reference/secretsmanager/CFCreds1

    • /aws/reference/secretsmanager/DBPass

    下方的 Java 程式碼範例會參考 Secrets Manager 中存放的存取金鑰和秘密金鑰。此程式碼範例將設定 Amazon DynamoDB 用戶端。除此之外,該程式碼會從 參數存放區 擷取組態資料和登入資料。組態資料是以字串參數的形式存放在 參數存放區 中,而登入資料則是存放在 Secrets Manager 中。儘管組態資料和登入資料存放於不同的服務,您仍可使用 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"
          }
    }