Parameter Store パラメータからの AWS Secrets Manager シークレットの参照
AWS Secrets Manager は、認証情報、パスワード、ライセンスキーなどの重要な設定データの整理や管理に役立ちます。AWS Systems Manager の機能である Parameter Store は 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 とは」を参照してください。
制限事項
Parameter Store を使用して Secrets Manager のシークレットを参照する場合は、次の制限に注意してください。
-
GetParameter および GetParameters API オペレーションを使用して取得できるのは、Secrets Manager のシークレットのみです。DescribeParameters や GetParametersByPath などの変更オペレーションや高度なクエリの API オペレーションは、Secrets Manager に対してはサポートされていません。
-
Parameter Store を使用してシークレットを取得するには、AWS Command Line Interface (AWS CLI)、AWS Tools for Windows PowerShell、および SDK を使用できます。
-
Parameter Store から Secrets Manager のシークレットを取得する場合、その名前は次の予約パス /aws/reference/secretsmanager/
secret-_ID
で始まっている必要があります。次に例を示します。
/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 のシークレットを参照するには
-
Secrets Manager でシークレットを作成します。詳細については、「AWS Secrets Manager を使用したシークレットの作成および管理」を参照してください。
-
AWS CLI、AWS Tools for Windows PowerShell、または SDK を使用してシークレットを参照する Secrets Manager シークレットを参照する場合、名前は、「
/aws/reference/secretsmanager/
」の予約済みパスで始まる必要があります。このパスを指定することで、Systems Manager は Parameter Store ではなく Secrets Manager からシークレットを取得することを認識します。Parameter Store を使用してCFCreds1
とDBPass
の Secrets Manager シークレットを正しく参照する名前の例を次に示します。-
/aws/reference/secretsmanager/CFCreds1
-
/aws/reference/secretsmanager/DBPass
次の Java コード例では、Secrets Manager に保存されているアクセスキーとシークレットキーを参照しています。このコード例では、Amazon DynamoDB クライアントを設定します。このコードでは、Parameter Store から設定データと認証情報を取得しています。設定データは、Parameter Store に文字列パラメータとして格納され、認証情報は Secrets Manager に格納されます。設定データと認証情報が異なるサービスに保存されている場合でも、
GetParameter
API を使用して Parameter Store から両方データにアクセスできます。/** * Initialize Systems 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 DynamoDB client with different credentials final AmazonDynamoDB client = AmazonDynamoDBClient.builder() .withCredentials(new AWSStaticCredentialsProvider(differentAWSCreds)) .withRegion(getParameter("region")) //Getting configuration from Parameter Store .build(); return client; } /** * Helper method to retrieve parameter value * @param parameterName identifier of the 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: シークレットの名前を使用した参照
このコマンドによって以下のような情報が返されます。
{ "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 が含まれている参照
このコマンドによって以下のような情報が返されます。
{ "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: バージョンステージが含まれている参照
このコマンドによって以下のような情報が返されます。
{ "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", }
-