イメージリポジトリを使用した認証 - AWS Elastic Beanstalk

イメージリポジトリを使用した認証

このトピックでは、Elastic Beanstalk を使用してオンラインイメージリポジトリを認証する方法について説明します。プライベートリポジトリの場合、Elastic Beanstalk は、イメージをプルしてデプロイする前に認証する必要があります。Amazon ECR Public の場合、認証はオプションですが、認証によってレート制限が高くなり、信頼性が向上します。

Amazon ECR リポジトリからのイメージを使用する

Amazon Elastic Container Registry (Amazon ECR) を使用して、AWS にカスタム Docker イメージを保存できます。

Docker イメージを Amazon ECR に保存すると、Elastic Beanstalk は環境のインスタンスプロファイルを使用して Amazon ECR レジストリに対して自動的に認証します。したがって、Amazon ECR リポジトリ内のイメージにアクセスするためのアクセス許可をインスタンスに提供する必要があります。これを行うには、AmazonEC2ContainerRegistryReadOnly 管理ポリシーをインスタンスプロファイルにアタッチして、環境のインスタンスプロファイルにアクセス許可を追加します。これにより、アカウント内のすべての Amazon ECR リポジトリへの読み取り専用アクセスが可能になります。また、次のテンプレートを使用してカスタムポリシーを作成することで、単一のリポジトリにのみアクセスすることもできます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowEbAuth", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": [ "*" ] }, { "Sid": "AllowPull", "Effect": "Allow", "Resource": [ "arn:aws:ecr:us-east-2:111122223333:repository/repository-name" ], "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:BatchGetImage" ] } ] }

上記のポリシーの 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 デプロイプロセスのビルド前フェーズを使用します。

フックスクリプトは、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 アクセス許可を設定したことを確認してください。詳細については、「シークレットを環境変数として設定するための前提条件」を参照してください。

  1. 次のディレクトリ構造をプロジェクト用に作成します。

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── Dockerfile
  2. 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"
  3. 次の env.config ファイルを作成し、前述のディレクトリ構造に示すように、.ebextensions ディレクトリに配置します。この設定では、aws:elasticbeanstalk:application:environmentsecrets 名前空間を使用して、USER および PASSWD Elastic Beanstalk 環境変数を Systems Manager Parameter Store に保存されている値に初期化します。

    注記

    変数名 USERPASSWDput-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
  4. 次の 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 に提供するには
  1. docker login コマンドを使用して認証ファイルを生成します。Docker Hub のリポジトリでは、docker login を実行します。

    $ docker login

    他のレジストリでは、レジストリサーバーの URL を入力します。

    $ docker login registry-server-url
    注記

    Elastic Beanstalk 環境で (Amazon Linux 2 より前の) Amazon Linux AMI Docker プラットフォームバージョンを使用している場合は、「(Amazon Linux 2 より前の) Amazon Linux AMI での Docker 設定」の関連情報をお読みください。

    認証ファイルの詳細については、Docker ウェブサイトのDocker ハブにイメージを保存するおよびdocker ログインを参照してください。

  2. .dockercfg という名前の認証ファイルのコピーを安全な Amazon S3 バケットにアップロードします。

    • Amazon S3 バケットは、バケットを使用している環境と同じ AWS リージョン でホストする必要があります。Elastic Beanstalk は、他のリージョンでホストされている Amazon S3 バケットからファイルをダウンロードすることはできません。

    • インスタンスプロファイル内の IAM ロールに s3:GetObject オペレーションを許可します。詳細については、「」を参照してくださいElastic Beanstalk インスタンスプロファイルの管理

  3. 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 上で実行される ECSAL2023 上で実行される ECSDockerrun.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 のレジストリ認証」を参照してください。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr-public:GetAuthorizationToken", "sts:GetServiceBearerToken" ], "Resource": "*" } ] }

これらのアクセス許可がインスタンスプロファイルにアタッチされると、Elastic Beanstalk は Amazon ECR Public レジストリを使用して自動的に認証されます。Amazon ECR Public イメージは、Dockerrun.aws.json ファイルまたは Dockerfile の標準 public.ecr.aws/registry-alias/repository-name:tag 形式を使用して参照できます。