Secrets Manager を使用した機密データの指定 - AWS Batch

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Secrets Manager を使用した機密データの指定

を使用すると AWS Batch、機密データをシー AWS Secrets Manager クレットに保存し、ジョブ定義で参照することで、ジョブに機密データを挿入できます。Secrets Manager シークレットに保存された機密データは、環境変数として、またはログ設定の一部としてジョブに公開できます。

シークレットを環境変数として挿入する場合は、挿入するシークレットの JSON キーまたはバージョンを指定できます。このプロセスは、ジョブに公開される機密データの制御に役立ちます。シークレットのバージョニングの詳細については、AWS Secrets Manager ユーザーガイドの「AWS Secrets Managerの主な用語と概念」を参照してください。

Secrets Manager を使用した機密データの指定に関する考慮事項

Secrets Manager を使用してジョブの機密データを指定する場合は、以下を考慮する必要があります。

  • シークレットの特定の JSON キーやバージョンを使用してシークレットを挿入するには、コンピューティング環境内のコンテナインスタンスに、 Amazon ECS コンテナエージェントのバージョン 1.37.0 以降が必要です。ただし、最新のコンテナエージェントのバージョンを使用することをお勧めします。エージェントのバージョンの確認と最新バージョンへの更新の詳細については、Amazon Elastic Container Service デベロッパーガイドAmazon ECS コンテナエージェントの更新を参照してください。

    シークレットの内容全体を環境変数として挿入したり、シークレットをログ設定に挿入したりするには、コンテナインスタンスにコンテナエージェントのバージョン 1.23.0 以降が必要です。

  • CreateSecret API の SecretStringパラメータで作成されたシークレットであるテキストデータを格納するシークレットのみがサポートされます。CreateSecret API の SecretBinaryパラメータで作成されたシークレットであるバイナリデータを格納するシークレットはサポートされていません。

  • Secrets Manager シークレットを参照するジョブ定義を使用してジョブの機密データを取得する場合、インターフェイス VPC エンドポイントも使用している場合は、Secrets Manager のインターフェイス VPC エンドポイントを作成する必要があります 。詳細については、AWS Secrets Manager ユーザーガイドの「VPC EndpointでSecrets Managerを使用する」を参照してください。

  • 重要なデータは、ジョブが最初に開始されたときにジョブに挿入されます。シークレットを後で更新またはローテーションすると、ジョブには更新された値が自動的に送信されなくなります。更新されたシークレット値で新しいジョブを起動するようサービスに強制するには、新しいジョブの起動が必要です。

AWS Batch シークレットに必要な IAM アクセス許可

この機能を使用するには、実行ロールを持っていて、ジョブ定義でそのロールを参照する必要があります。これにより、コンテナエージェントは必要な Secrets Manager リソースをプルすることを許可されます。詳細については、「AWS Batch IAM ロールの実行」を参照してください。

作成した Secrets Manager シークレットへのアクセスを許可するには、以下のアクセス許可をインラインポリシーとして実行ロールに手動で追加します。詳細については、IAM ユーザーガイドの「IAM ポリシーの追加と削除 」を参照してください。

  • secretsmanager:GetSecretValue – Secrets Manager シークレットを参照する場合に必須です。

  • kms:Decrypt – シークレットでカスタムの KMS キーを使用し、デフォルトのキーを使用しない場合にのみ必須です。そのカスタムキーの ARN はリソースとして追加されている必要があります。

次の例のインラインポリシーでは必須の アクセス許可を追加しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "kms:Decrypt" ], "Resource": [ "arn:aws:secretsmanager:<region>:<aws_account_id>:secret:<secret_name>", "arn:aws:kms:<region>:<aws_account_id>:key/<key_id>" ] } ] }

環境変数としての機密データの挿入

ジョブの定義内では、以下の項目を指定できます。

  • ジョブに設定する環境変数の名前が含まれている secrets オブジェクト

  • Secrets Manager シークレットの Amazon リソースネーム (ARN)。

  • ジョブに渡す機密データが含まれている追加のパラメータ

次の例は、Secrets Manager シークレットに指定する必要がある完全な構文を示しています。

arn:aws:secretsmanager:region:aws_account_id:secret:secret-name:json-key:version-stage:version-id

次のセクションでは、追加のパラメータについて説明します。これらのパラメータは省略可能です。ただし、それらを使用しない場合は、デフォルト値を使用するためにコロン : が含まれている必要があります。以下の例でより詳細なコンテキストを示します。

json-key

キーと値のペアのキーの名前を指定します。値は設定する環境変数の値です。JSON 形式の値のみがサポートされます。JSON キーを指定しないと、シークレットの内容全体が使用されます。

version-stage

使用するシークレットのバージョンのステージングラベルを指定します。バージョンのステージングラベルを指定した場合、バージョン ID は指定できません。バージョンのステージを指定しないと、デフォルトの動作として、AWSCURRENT ステージングラベルのシークレットが取得されます。

ステージングラベルは、シークレットが更新またはローテーションされたときに、シークレットのさまざまなバージョンを追跡するために使用します。シークレットの各バージョンには、1 つ以上のステージングラベルと 1 つの ID があります。詳細については、「 ユーザーガイド」の AWS 「 Secrets Manager の主要な用語と概念」を参照してください。 AWS Secrets Manager

version-id

使用するシークレットのバージョンの固有 ID を指定します。バージョン ID を指定した場合、バージョンのステージングラベルは指定できません。バージョン ID を指定しないと、デフォルトの動作として、AWSCURRENT ステージングラベルのシークレットが取得されます。

バージョン ID は、シークレットが更新またはローテーションされたときに、シークレットのさまざまなバージョンを追跡するために使用します。シークレットの各バージョンには ID があります。詳細については、「 ユーザーガイド」の AWS 「 Secrets Manager の主要な用語と概念」を参照してください。 AWS Secrets Manager

コンテナの定義の例

以下の例では、コンテナの定義で Secrets Manager シークレットを参照する方法を示します。

例 シークレット全体を参照する

次に示すのは、Secrets Manager シークレットのテキスト全体を参照するときの形式を示すタスク定義のスニペットです。

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }
例 シークレット内の特定のキーを参照する

以下は、シークレットの内容と、シークレットに関連付けられているバージョンのステージングラベルとバージョン ID を表示するget-secret-valueコマンドからの出力例です。

{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "VersionId": "871d9eca-18aa-46a9-8785-981dd39ab30c",
    "SecretString": "{\"username1\":\"password1\",\"username2\":\"password2\",\"username3\":\"password3\"}",
    "VersionStages": [
        "AWSCURRENT"
    ],
    "CreatedDate": 1581968848.921
}

前のコンテナの定義の出力で特定のキーを参照するには、ARN の最後にキー名を指定します。

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::" }] }] }
例 特定のシークレットバージョンを参照する

次に示すのは、シークレットの暗号化されていない内容と、シークレットのすべてのバージョンのメタデータを表示する describe-secret コマンドの出力例です。

{
    "ARN": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf",
    "Name": "appauthexample",
    "Description": "Example of a secret containing application authorization data.",
    "RotationEnabled": false,
    "LastChangedDate": 1581968848.926,
    "LastAccessedDate": 1581897600.0,
    "Tags": [],
    "VersionIdsToStages": {
        "871d9eca-18aa-46a9-8785-981dd39ab30c": [
            "AWSCURRENT"
        ],
        "9d4cb84b-ad69-40c0-a0ab-cead36b967e8": [
            "AWSPREVIOUS"
        ]
    }
}

前のコンテナの定義の出力で特定のバージョンのステージングラベルを参照するには、ARN の最後にキー名を指定します。

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::AWSPREVIOUS:" }] }] }

前のコンテナの定義の出力で特定のバージョン ID を参照するには、ARN の最後にキー名を指定します。

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf::9d4cb84b-ad69-40c0-a0ab-cead36b967e8" }] }] }
例 シークレットの特定のキーおよびバージョンのステージングラベルを参照する

シークレット内の特定のキーと特定のバージョンのステージングラベルの両方を参照する方法は次のとおりです。

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1:AWSPREVIOUS:" }] }] }

特定のキーとバージョン ID を指定するには、次の構文を使用します。

{ "containerProperties": [{ "secrets": [{ "name": "environment_variable_name", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:appauthexample-AbCdEf:username1::9d4cb84b-ad69-40c0-a0ab-cead36b967e8" }] }] }

ログ設定への機密データの挿入

ジョブの定義内で logConfiguration を指定するときに、コンテナに設定するログドライバーオプションの名前と、コンテナに提示する機密データが含まれている Secrets Manager シークレットの 完全なARNを使用して secretOptions を指定できます。

以下に示すのは、Secrets Manager シークレットを参照するときの形式を示すジョブ定義のスニペットです。

{ "containerProperties": [{ "logConfiguration": [{ "logDriver": "splunk", "options": { "splunk-url": "https://cloud.splunk.com:8080" }, "secretOptions": [{ "name": "splunk-token", "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:secret_name-AbCdEf" }] }] }] }

AWS Secrets Manager シークレットの作成

Secrets Manager コンソールを使用して、機密データ用のシークレットを作成できます。詳細については、AWS Secrets Manager ユーザーガイドの 「ベーシックシークレットの作成 を参照してください。

基本的なシークレットを作成するには

機密データのシークレットを作成するには、Secrets Manager を使用します。

  1. https://console.aws.amazon.com/secretsmanager/ から Secrets Manager コンソール を開きます。

  2. [Store a new secret] (新しいシークレットの保存) を選択します。

  3. [Select secret type] (シークレットタイプの選択) で、[Other type of secrets] (他の種類のシークレット) を選択します。

  4. カスタムシークレットの詳細を [Key] (キー) と [Value] (値) のペアの形式で指定します。たとえば、UserName のキーを指定し、その値として適切なユーザー名を指定できます。Password の名前とパスワードのテキストを値として持つ 2 番目のキーを追加します。データベース名、サーバーアドレス、TCP ポートなどのエントリを追加することもできます。必要な情報を格納するのに必要な数だけペアを追加できます。

    または、[Plaintext] (プレーンテキスト) タブを選択して、任意の方法でシークレット値を入力することもできます。

  5. シークレット内の保護されたテキストの AWS KMS 暗号化に使用する暗号化キーを選択します。選択しない場合、Secrets Manager は、アカウントのデフォルトキーが存在するかどうかを調べ、存在する場合はそれを使用します。デフォルトのキーが存在しない場合は、Secrets Manager が自動的に作成します。また、[Add new key(新しいキーの追加)] を選択して、このシークレット専用のカスタム KMS キーを作成します。独自の KMS キーを作成するには、アカウントに KMS キーを作成するアクセス権限が必要です。

  6. [Next] (次へ) を選択します。

  7. [Secret name] (シークレット名) に、オプションのパスと名前 (例: production/MyAwesomeAppSecret または development/TestSecret) を入力し、[Next] (次) を選択します。オプションで説明を追加することもできます。後でこのシークレットを思い出すのに役立ちます。

    シークレット名に使用できるのは、ASCII 文字、数字、または次の記号のみです: /_+=.@-

  8. (オプション) この時点で、シークレットのローテーションを設定することができます。この手順では、[Disable automatic rotation] (自動ローテーションを無効化) は無効のままにし、[] を選択します。

    新規または既存のシークレットでローテーションを設定する方法については、「シーAWS Secrets Manager クレットのローテーション」を参照してください。

  9. 設定を確認し、次に [Store secret] (シークレットの保存) を選択して入力した内容すべてを Secrets Manager の新しいシークレットとして保存します。