Elastic Beanstalk 環境変数へのシークレットとパラメータのフェッチ - AWS Elastic Beanstalk

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

Elastic Beanstalk 環境変数へのシークレットとパラメータのフェッチ

Elastic Beanstalk は、インスタンスのブートストラップ中に AWS Secrets Manager および AWS Systems Manager Parameter Store から値を取得し、アプリケーションが使用する環境変数に割り当てることができます。

以下のポイントは、環境変数をシークレットとして使用するための設定、同期、アクセスを要約したものです。

  • 保存するシークレットとパラメータの Amazon リソースネーム (ARN) を指定して、シークレットを保存するように環境変数を設定します。

  • Secrets Manager または Systems Manager Parameter Store でシークレット値を更新またはローテーションする場合は、環境変数を手動で更新する必要があります。

  • シークレット環境変数は、ebextension コンテナコマンドとプラットフォームフックに利用可能です。

サポートされるプラットフォームのバージョン

2025 年 3 月 26 日以降にリリースされたプラットフォームバージョンは、環境変数として設定された AWS Secrets Manager シークレットと Parameter Store AWS Systems Manager パラメータをサポートしています。

注記

Docker および ECS ベースの Docker プラットフォームを除き、Amazon Linux 2 プラットフォームバージョンは複数行変数値をサポートしていません。複数行変数の詳細については、「複数行の値」を参照してください。

料金

Secrets Manager と Systems Manager Parameter Store の使用には、標準料金が適用されます。料金の詳細については、以下のウェブサイトを参照してください。

Elastic Beanstalk では、アプリケーションが環境変数を介して環境シークレットを参照するための料金は発生しません。ただし、Elastic Beanstalk がユーザーに代わってこれらのサービスに対して行うリクエストには、標準料金が適用されます。

シークレットを Elastic Beanstalk 環境変数として設定する

Elastic Beanstalk コンソール、 の設定ファイル.ebextensions、 CLI、および AWS SDK AWS を使用して、シークレットとパラメータを環境変数として設定できます。

前提条件

シークレットを参照するように環境変数をセットアップする前に、まず次のステップを完了する必要があります。

環境変数設定前の一般的な手順
  1. Secrets Manager シークレットまたは Parameter Store パラメータを作成して、機密データを保存します。詳細については、次のトピックのいずれかまたは両方を参照してください。

  2. シークレットとパラメータをフェッチするために、環境の EC2 インスタンスに必要な IAM アクセス許可をセットアップします。詳細については、「必要な IAM 許可」を参照してください。

コンソールを使用する

Elastic Beanstalk コンソールを使用して、シークレットを環境変数として設定できます。

Elastic Beanstalk コンソールで環境変数としてシークレットを設定するには
  1. Elastic Beanstalk コンソールを開き、リージョンリストで を選択します AWS リージョン。

  2. ナビゲーションペインで、[環境] を選択し、リストから環境の名前を選択します。

  3. ナビゲーションペインで、[設定] を選択します。

  4. [更新、モニタリング、ログ] の設定カテゴリで、[編集] を選択します。

  5. [ランタイム環境変数] まで下にスクロールします。

  6. [環境変数を追加] を選択します。

  7. [ソース] では、[Secrets Manager] または [SSM Parameter Store] を選択します。

    注記

    ドロップダウンの [プレーンテキスト] オプションの詳細については、「環境プロパティ (環境変数) の設定」を参照してください。

  8. [環境変数名] では、シークレットまたはパラメータ値を保持する環境変数の名前を入力します。

  9. [環境変数値] では、Systems Manager Parameter Store パラメータの ARN または Secrets Manager シークレットを入力します。インスタンスのブートストラップ中に、Elastic Beanstalk は、ステップ 8 で入力した変数の値をこの ARN リソースに保存されている値に対して開始します。

    コンソールは、入力した値が、ステップ 7 で選択したストアの有効な ARN 形式であるかどうかを検証します。ただし、ARN で指定されたリソースの存在や、それにアクセスするために必要な IAM アクセス許可があるかどうかは検証されません。

  10. さらに変数を追加する必要がある場合は、ステップ 6 から ステップ 9 までを繰り返します。

  11. ページの最下部で [適用] を選択し変更を保存します。

.ebextensions のファイルを使用した設定

Elastic Beanstalk 設定ファイルを使用して、シークレットを環境変数として設定できます。aws:elasticbeanstalk:application:environmentsecrets 名前空間を使用して、環境プロパティを定義します。

注記

Secrets Manager は、一意性を確保するために、ARN 形式のシークレット名に 6 つのランダムな文字を自動的に追加します。

例環境シークレットの .ebextensions/options.config (短縮構文)
option_settings: aws:elasticbeanstalk:application:environmentsecrets: MY_SECRET: arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret-AbCd12 MY_PARAMETER: arn:aws:ssm:us-east-1:111122223333:parameter/myparam
例環境シークレットの .ebextensions/options.config (標準構文)
option_settings: - namespace: aws:elasticbeanstalk:application:environmentsecrets option_name: MY_SECRET value: arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret-AbCd12 - namespace: aws:elasticbeanstalk:application:environmentsecrets option_name: MY_PARAMETER value: arn:aws:ssm:us-east-1:111122223333:parameter/myparam

を使用した設定 AWS CLI

AWS コマンドラインインターフェイス (AWS CLI) を使用して、シークレットを Elastic Beanstalk 環境変数として設定できます。このセクションでは、aws:elasticbeanstalk:application:environmentsecrets 名前空間がある create-environment および update-environment コマンドの例を提供します。Elastic Beanstalk がこれらのコマンドが参照する環境の EC2 インスタンスをブートストラップすると、フェッチされたシークレットとパラメータ値を使用して環境変数が初期化されます。Secrets Manager および Systems Manager Parameter Store のそれぞれの ARN からこれらの値をフェッチします。

次の 2 つの例では、create-environment コマンドを使用して、MY_SECRET および MY_PARAMETER という名前の環境変数として設定されたシークレットとパラメータを追加します。

例環境変数として設定されたシークレットがある create-environment のもの (インラインの名前空間オプション)
aws elasticbeanstalk create-environment \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --platform-arn "arn:aws:elasticbeanstalk:::platform/Node.js 24 running on 64bit Amazon Linux 2023" \ --option-settings \ Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role \ Namespace=aws:elasticbeanstalk:application:environmentsecrets,OptionName=MY_SECRET,Value=arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret-AbCd12 \ Namespace=aws:elasticbeanstalk:application:environmentsecrets,OptionName=MY_PARAMETER,Value=arn:aws:ssm:us-east-1:111122223333:parameter/myparam

別の方法として、options.jsonファイルを使用して、インラインで名前空間オプションを含めるのではなく、名前空間オプションを指定します。

例環境変数として設定されたシークレットがある create-environment のもの (options.json ファイルの名前空間オプション)
aws elasticbeanstalk create-environment \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --platform-arn "arn:aws:elasticbeanstalk:::platform/Node.js 24 running on 64bit Amazon Linux 2023" \ --option-settings file://options.json
### example options.json ### [ { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "IamInstanceProfile", "Value": "aws-elasticbeanstalk-ec2-role" }, { "Namespace": "aws:elasticbeanstalk:application:environmentsecrets", "OptionName": "MY_SECRET", "Value": "arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret-AbCd12" }, { "Namespace": "aws:elasticbeanstalk:application:environmentsecrets", "OptionName": "MY_PARAMETER", "Value": "arn:aws:ssm:us-east-1:111122223333:parameter/myparam" } ]

次の例では、MY_SECRET および MY_PARAMETER という名前の環境変数を設定して、既存の環境のシークレットとパラメータを保存します。update-environment コマンドは、create-environment コマンドと同じ構文のオプションをインラインまたは options.json ファイルで渡します。次の例は、前の例でも使用したのと同じ options.json ファイルを使用するコマンドを示しています。

例環境変数として設定されたシークレットがある update-environment のもの (options.json ファイルの名前空間オプション)
aws elasticbeanstalk update-environment \ --region us-east-1 \ --application-name my-app \ --environment-name my-env \ --platform-arn "arn:aws:elasticbeanstalk:::platform/Node.js 24 running on 64bit Amazon Linux 2023" \ --option-settings file://options.json

AWS SDK を使用した設定

AWS SDK を使用して、シークレットとパラメータを環境変数として設定できます。前のセクションで説明した update-environmentおよび create-environment AWS CLI コマンドと同様に、CreateEnvironment および UpdateEnvironment API アクションを使用できます。OptionSettings リクエストパラメータを使用して、aws:elasticbeanstalk:application:environmentsecrets 名前空間のオプションを指定します。

Secrets Manager シークレットからの JSON キーの抽出

2026 年 1 月 13 日以降にリリースされたプラットフォームバージョンでは、シークレット ARN にコロンと JSON キー名を追加して、JSON 形式の Secrets Manager シークレットから特定のフィールドを抽出できます。これにより、シークレット全体ではなくシークレット内の個々のキーと値のペアを参照できます。

構文

シークレットから特定の JSON キーを抽出するには、シークレット ARN :json-key-nameに を追加します。

arn:aws:secretsmanager:region:account:secret:secret-name-XXXXXX:json-key-name

JSON キー抽出は、コンソール、、.ebextensions AWS CLI、または AWS SDKs の設定ファイルなど、通常の環境シークレットと同じ方法を使用して設定できます。

制限事項

  • JSON キー抽出は、Systems Manager パラメータストアパラメータではなく、Secrets Manager シークレットでのみサポートされます。

  • 最上位の JSON キーのみがサポートされています。ネストされたキーアクセス ( などconfig.database.host) と配列インデックス作成 ( などservers[0]) はサポートされていません。ネストされた値にアクセスする必要がある場合は、親オブジェクトを抽出し、アプリケーションコードで解析します。最上位キーを使用してアクセスされたネストされたオブジェクトと配列は、JSON 形式にシリアル化されます。

  • JSON キー名にコロン (:) 文字を含めることはできません。コロンは ARN 構文の区切り文字として予約されます。JSON キー名にコロンが含まれている場合、最初のコロンの前の部分のみがキー名として使用され、コロンの後の文字は無視されます。

  • ECS マネージド Docker プラットフォームは、ネイティブ ECS 構文を使用してシークレットを参照します。詳細については、「Amazon Elastic Container Service デベロッパーガイド」の「Amazon ECS 環境変数を介して Secrets Manager シークレットを渡す」を参照してください。

次の例は、JSON シークレットからさまざまな値タイプを抽出する方法を示しています。このシークレットがあるとします。

{ "stringKey": "value1", "numberKey": 42, "objectKey": { "nested": "data" }, "arrayKey": ["item1", "item2"] }

で抽出を設定できます.ebextensions

例 JSON キー抽出を使用した .ebextensions の例
option_settings: aws:elasticbeanstalk:application:environmentsecrets: STRING_VAR: arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret-AbCd12:stringKey NUMBER_VAR: arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret-AbCd12:numberKey OBJECT_VAR: arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret-AbCd12:objectKey ARRAY_VAR: arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret-AbCd12:arrayKey

これにより、次の環境変数が生成されます。

  • STRING_VAR=value1

  • NUMBER_VAR=42

  • OBJECT_VAR={"nested":"data"}

  • ARRAY_VAR=["item1","item2"]

Elastic Beanstalk 環境変数とのシークレット同期のベストプラクティス

このトピックでは、アプリケーションで Secrets Manager または Systems Manager Parameter Store で環境シークレットを使用するためのベストプラクティスを推奨します。シークレットストアデータが更新またはローテーションされた場合、Elastic Beanstalk アプリケーションは更新された値を自動的に受信しません。Elastic Beanstalk は、インスタンスのブートストラップ時にのみシークレットを環境変数にプルします。

環境変数の更新

Elastic Beanstalk 環境をトリガーしてシークレットストアからシークレットの最新の値を再度フェッチするには、UpdateEnvironment または RestartAppServer オペレーションを実行することをお勧めします。これらのオペレーションは、Elastic Beanstalk コンソール、 AWS CLI、または Elastic Beanstalk API を使用して実行できます。詳細については、「Elastic Beanstalk のAWS CLI 例」または「AWS Elastic Beanstalk API リファレンス」を参照してください。

シークレット同期に対する自動スケーリング効果の管理

シークレットストアの更新後にスケールアウトイベントまたはインスタンスの置き換えが発生した場合、新しいインスタンスには Secrets Manager または Systems Manager Parameter Store からの最新のシークレット値が含まれます。このようなイベントは、環境内の他のすべてのインスタンスが新しいシークレットを取得するために更新されているわけでもない場合でも発生する可能性があります。

重要

アプリケーションが同じ環境変数に対して 2 つの異なるシークレット値を使用できるようにする必要があります。これにより、Secrets Manager または Systems Manager Parameter Store でシークレットの更新が発生し、その後に環境でスケールアウトまたはインスタンスの置き換えが行われるイベントに対応できますが、他のインスタンスは環境変数の更新を保留中です。更新の待機期間中、すべての環境インスタンスがシークレットストア環境変数に対して同じ値を持つわけではありません。

このようなユースケースの例の 1 つは、データベース認証情報のローテーションです。スケールアウトイベントが認証情報のローテーションに続く場合、新しくブートストラップされたインスタンスによって参照される環境シークレットには、更新されたデータベース認証情報が含まれます。ただし、既存のインスタンスによって参照される環境シークレットは、UpdateEnvironment または RestartAppServer オペレーションによって更新されるまで古い値を保持します。

Amazon Linux 2 環境変数の複数行の値

複数行の値は 2 つ以上の行で構成され、改行文字が含まれます。Docker および ECS ベースの Docker プラットフォームを除き、Amazon Linux 2 で実行されるプラットフォームは、環境変数の複数行の値をサポートしていません

注記

複数行の値を検出すると、Elastic Beanstalk は影響を受ける環境のデプロイに失敗します。

次のオプションは、複数行の問題の回避策または解決策として機能します。

  • Amazon Linux 2 環境を Amazon Linux 2023 にアップグレードします。詳細については、「Amazon Linux 2 から Amazon Linux 2023 への移行」を参照してください。

  • シークレット値から改行文字を削除します。アプローチの 1 つの例は、値をシークレットストアに保存する前に Base64 エンコードを行うことです。次に、アプリケーションは環境シークレット変数から参照するときに、値を元の形式にデコードする必要があります。

  • Secrets Manager または Systems Manager Parameter Store から直接データを取得するようにアプリケーションコードを設計します。詳細については、「 Secrets Manager を使用する でのシークレットの取得」または「パラメータ Systems Manager パラメータストアの使用 の取得」を参照してください。