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

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

Elastic Beanstalk 環境変数へのシークレットとパラメータの取得

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

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

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

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

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

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

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

注記

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

料金

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

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

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

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

前提条件

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

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

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

コンソールを使用する

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

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

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

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

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

  5. Runtime 環境変数まで下にスクロールします。

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

  7. Source には、Secrets Manager または SSM パラメータストアを選択します。

    注記

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

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

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

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

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

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

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

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

例 環境シークレットの .ebextensions/options.config (短縮構文)
option_settings: aws:elasticbeanstalk:application:environmentsecrets: MY_SECRET: arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret 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 - 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 パラメータストアのそれぞれの ARNs から取得されます。

次の 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 \ --solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 20" \ --option-settings \ Namespace=aws:elasticbeanstalk:application:environmentsecrets,OptionName=MY_SECRET,Value=arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret \ 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 \ --solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 20" \ --option-settings file://options.json
### example options.json ### [ { "Namespace": "aws:elasticbeanstalk:application:environmentsecrets", "OptionName": "MY_SECRET", "Value": "arn:aws:secretsmanager:us-east-1:111122223333:secret:mysecret" }, { "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 \ --solution-stack-name "64bit Amazon Linux 2023 v6.5.0 running Node.js 20" \ --option-settings file://options.json

AWS SDK を使用した設定

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

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

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

環境変数の更新

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

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

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

重要

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

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

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