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 シークレットを参照する場合には以下の制約があります。

  • GetParameter および GetParameters API アクションを使用して実行できるのは Secrets Manager の取得のみです。DescribeParametersGetParametersByPath などの変更オペレーションや高度なクエリの API アクションは、Secrets Manager に対してはサポートされていません。

  • パラメータストア を使用してシークレットを取得するには、AWS CLI、AWS Tools for Windows PowerShell、および SDK を使用できます。

  • パラメータストア から 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、または SDK を使用してシークレットを参照するSecrets Manager シークレットを参照する場合、そのパラメーター名は予約パス /aws/reference/secretsmanager/で始まっている必要があります。このパスを指定することによって、パラメータストア ではなく Secrets Manager からシークレットを取得することを Systems Manager が認識します。次のパラメーターの例は Secrets Manager シークレットを正しく参照しています。

    • /aws/reference/secretsmanager/CFCreds1

    • /aws/reference/secretsmanager/DBPass

    次の Java コード例では、Secrets Manager に保存されている access-key と secret-key を参照しています。このコード例では、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"
          }
    }