イメージリポジトリを使用した認証
このトピックでは、Elastic Beanstalk を使用してオンラインイメージリポジトリを認証する方法について説明します。プライベートリポジトリの場合、Elastic Beanstalk は、イメージをプルしてデプロイする前に認証する必要があります。Amazon ECR Public の場合、認証はオプションですが、認証によってレート制限が高くなり、信頼性が向上します。
Amazon ECR リポジトリからのイメージを使用する
Amazon Elastic Container Registry
Docker イメージを Amazon ECR に保存すると、Elastic Beanstalk は環境のインスタンスプロファイルを使用して Amazon ECR レジストリに対して自動的に認証します。したがって、Amazon ECR リポジトリ内のイメージにアクセスするためのアクセス許可をインスタンスに提供する必要があります。これを行うには、AmazonEC2ContainerRegistryReadOnly 管理ポリシーをインスタンスプロファイルにアタッチして、環境のインスタンスプロファイルにアクセス許可を追加します。これにより、アカウント内のすべての Amazon ECR リポジトリへの読み取り専用アクセスが可能になります。また、次のテンプレートを使用してカスタムポリシーを作成することで、単一のリポジトリにのみアクセスすることもできます。
上記のポリシーの Amazon リソースネーム(ARN)をリポジトリの ARN に置き換えます。
Dockerrun.aws.json ファイル内のイメージ情報を指定する必要があります。設定は、使用するプラットフォームによって異なります。
ECS マネージド Docker プラットフォームでは、次のようにコンテナ定義オブジェクト で image キーを使用します。
"containerDefinitions": [
{
"name": "my-image",
"image": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest",
Docker プラットフォームについては、URL でイメージを参照してください。次のように、URL は Dockerrun.aws.json ファイルの Image 定義に含まれます。
"Image": {
"Name": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest",
"Update": "true"
},
AWS Systems Manager (SSM) パラメータストアまたは AWS Secrets Manager の使用
デプロイ前にプライベートリポジトリを使用して認証するように Elastic Beanstalk を設定し、コンテナイメージへのアクセスを有効にします。
このアプローチでは、2 つのコンポーネントを含む Elastic Beanstalk デプロイプロセスのビルド前フェーズを使用します。
-
リポジトリ認証情報を保存する環境変数を定義する ebextensions
-
イメージをプルする前に docker login を実行するプラットフォームフックスクリプト
フックスクリプトは、AWS Systems Manager Parameter Store または AWS Secrets Manager から入力された環境変数から認証情報を安全に取得します。この機能には、2025 年 3 月 26 日以降にリリースされた Elastic Beanstalk Docker および ECS マネージド Docker プラットフォームが必要です。詳細については、「環境変数の設定」を参照してください。
AWS Systems Manager Parameter Store または AWS Secrets Manager を使用してプライベートリポジトリに対して認証するよう Elastic Beanstalk を設定するには
注記
先に進む前に、AWS Systems Manager Parameter Store または AWS Secrets Manager で認証情報をセットアップし、必要な IAM アクセス許可を設定したことを確認してください。詳細については、「シークレットを環境変数として設定するための前提条件」を参照してください。
-
次のディレクトリ構造をプロジェクト用に作成します。
├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── Dockerfile -
AWS Systems Manager Parameter Store または AWS Secrets Manager を使用して、プライベートリポジトリの認証情報を保存します。この例では、AWS Systems Manager Parameter Store と AWS Secrets Manager の両方を示していますが、これらのサービスの 1 つだけを使用することを選択できます。
aws ssm put-parameter --name USER --type SecureString --value "username" aws secretsmanager create-secret --name PASSWD --secret-string "passwd" -
次の
env.configファイルを作成し、前述のディレクトリ構造に示すように、.ebextensionsディレクトリに配置します。この設定では、aws:elasticbeanstalk:application:environmentsecrets 名前空間を使用して、USERおよびPASSWDElastic Beanstalk 環境変数を Systems Manager Parameter Store に保存されている値に初期化します。注記
変数名
USERとPASSWDが put-parameter コマンドと create-secret コマンドで使用されているパラメータ名と一致することを確認します。option_settings: aws:elasticbeanstalk:application:environmentsecrets: USER: arn:aws:ssm:us-east-1:111122223333:parameter/user PASSWD: arn:aws:secretsmanager:us-east-1:111122223333:passwd -
次の
01login.shスクリプトファイルを作成し、次のディレクトリに配置します (前述のディレクトリ構造にも示されています)。-
.platform/confighooks/prebuild -
.platform/hooks/prebuild
### example 01login.sh #!/bin/bash echo $PASSWD | docker login -u $USER --password-stdinこの
01login.shスクリプトは、ステップ 3 で設定された環境変数を使用し、stdinを介してパスワードを docker login に安全に渡します。Docker 認証の詳細については、Docker ドキュメントの「docker ログイン」を参照してください。 メモ
-
フックファイルは、バイナリファイル、またはインタプリタパスを含む #! 行で始まるスクリプトファイル (#!/bin/bash など) です。
-
詳細については、「Elastic Beanstalk Linux プラットフォームの拡張」の「プラットフォームフック」を参照してください。
-
認証が設定されると、Elastic Beanstalk はプライベートリポジトリからイメージをプルしてデプロイできます。
Dockerrun.aws.json ファイルの使用
このセクションでは、プライベートリポジトリに対して Elastic Beanstalk を認証する別の方法について説明します。この方法では、Docker コマンドを使用して認証ファイルを生成し、認証ファイルを Amazon S3 バケットにアップロードします。また、Dockerrun.aws.json ファイルにバケット情報を含める必要もあります。
認証ファイルを生成して Elastic Beanstalk に提供するには
-
docker login コマンドを使用して認証ファイルを生成します。Docker Hub のリポジトリでは、docker login を実行します。
$docker login他のレジストリでは、レジストリサーバーの URL を入力します。
$docker loginregistry-server-url注記
Elastic Beanstalk 環境で (Amazon Linux 2 より前の) Amazon Linux AMI Docker プラットフォームバージョンを使用している場合は、「(Amazon Linux 2 より前の) Amazon Linux AMI での Docker 設定」の関連情報をお読みください。
認証ファイルの詳細については、Docker ウェブサイトのDocker ハブにイメージを保存する
およびdocker ログイン を参照してください。 -
.dockercfgという名前の認証ファイルのコピーを安全な Amazon S3 バケットにアップロードします。-
Amazon S3 バケットは、バケットを使用している環境と同じ AWS リージョン でホストする必要があります。Elastic Beanstalk は、他のリージョンでホストされている Amazon S3 バケットからファイルをダウンロードすることはできません。
-
インスタンスプロファイル内の IAM ロールに
s3:GetObjectオペレーションを許可します。詳細については、「」を参照してくださいElastic Beanstalk インスタンスプロファイルの管理
-
-
Amazon S3 バケット情報を、
AuthenticationファイルのDockerrun.aws.jsonパラメータに含めます。次の例は、サードパーティーレジストリでプライベートイメージを使用するように、
mydockercfgというバケットにamzn-s3-demo-bucketという認証ファイルを使用する方法を示しています。AWSEBDockerrunVersionの正しいバージョン番号については、例の後の注を参照してください。{ "AWSEBDockerrunVersion": "version-no", "Authentication": { "Bucket": "amzn-s3-demo-bucket", "Key": "mydockercfg" }, "Image": { "Name": "quay.io/johndoe/private-image", "Update": "true" }, "Ports": [ { "ContainerPort": "1234" } ], "Volumes": [ { "HostDirectory": "/var/app/mydb", "ContainerDirectory": "/etc/mysql" } ], "Logging": "/var/log/nginx" }Dockerrun.aws.json バージョン
AWSEBDockerrunVersionパラメータは、Dockerrun.aws.jsonファイルのバージョンを示します。-
Docker AL2 および AL2023 プラットフォームでは、次のバージョンのファイルを使用します。
Dockerrun.aws.json v3– Docker Compose を使用する環境。
Dockerrun.aws.json v1– Docker Compose を使用しない環境。
-
Amazon Linux 2 上で実行される ECS と AL2023 上で実行される ECS は
Dockerrun.aws.json v2ファイルを使用します。廃止されたプラットフォームである ECS - マルチコンテナ Docker Amazon Linux AMI (AL1) も同じバージョンを使用していました。
-
Elastic Beanstalk がプライベートリポジトリをホストするオンラインレジストリで認証した後、イメージをデプロイしてプルできます。
Amazon ECR Public のイメージを使用する
Amazon ECR Public は、Docker イメージをホストするパブリックコンテナレジストリです。Amazon ECR Public リポジトリはパブリックにアクセス可能ですが、認証するとデプロイに対してより高いレート制限とより良い信頼性を提供します。
注記
Amazon ECR パブリック認証は、中国リージョン (cn-*) および AWS GovCloud リージョン (us-gov-*) ではサポートされていません。これらのリージョンでは、Elastic Beanstalk は認証されていないプルを使用します。
Amazon ECR Public 認証を有効にするには、環境のインスタンスプロファイルに次のアクセス許可を追加します。Amazon ECR Public 認証の詳細については、「Amazon Elastic Container Registry Public ユーザーガイド」の「Amazon ECR Public のレジストリ認証」を参照してください。
これらのアクセス許可がインスタンスプロファイルにアタッチされると、Elastic Beanstalk は Amazon ECR Public レジストリを使用して自動的に認証されます。Amazon ECR Public イメージは、Dockerrun.aws.json ファイルまたは Dockerfile の標準 public.ecr.aws/ 形式を使用して参照できます。registry-alias/repository-name:tag