イメージリポジトリを使用した認証 - 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 Secrets Manager

デプロイ前にプライベートリポジトリを使用して認証するように Elastic Beanstalk を設定し、コンテナイメージへのアクセスを有効にします。

このアプローチでは、2 つのコンポーネントを含む Elastic Beanstalk デプロイプロセスのビルド前フェーズを使用します。

フックスクリプトは、JSON 形式の単一の AWS Secrets Manager シークレットから入力された環境変数からユーザー名とパスワードを取得します。この機能には、2026 年 1 月 13 日以降にリリースされた Elastic Beanstalk Docker および ECS マネージド Docker プラットフォームが必要です。詳細については、「 環境シークレット」を参照してください。

を使用してプライベートリポジトリを認証するように Elastic Beanstalk を設定するには AWS Secrets Manager
注記

先に進む前に、 で AWS Secrets Manager 認証情報を設定し、必要な IAM アクセス許可を設定してください。詳細については、「シークレットを環境変数として設定するための前提条件」を参照してください。

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

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── Dockerfile
  2. AWS Secrets Manager を使用して、プライベートリポジトリの認証情報を JSON 形式のシークレットとして保存します。

    aws secretsmanager create-secret --name repo-credentials \ --secret-string '{"username":"myuser","password":"mypassword"}'
  3. 次の env.config ファイルを作成し、前述のディレクトリ構造に示すように、.ebextensions ディレクトリに配置します。この設定では、JSON キー抽出aws:elasticbeanstalk:application:environmentsecrets名前空間を使用して、シークレット内の個々のフィールドから USERおよび PASSWDElastic Beanstalk 環境変数を初期化します。

    option_settings: aws:elasticbeanstalk:application:environmentsecrets: USER: arn:aws:secretsmanager:us-east-1:111122223333:secret:repo-credentials-AbCd12:username PASSWD: arn:aws:secretsmanager:us-east-1:111122223333:secret:repo-credentials-AbCd12:password
  4. 次の01login.shスクリプトファイルを作成し、次の場所 (前述のディレクトリ構造にも表示) に配置します。

    • .platform/confighooks/prebuild/01login.sh

    • .platform/hooks/prebuild/01login.sh

    #!/bin/bash echo $PASSWD | docker login -u $USER --password-stdin

    01login.sh スクリプトは、ステップ 3 で設定された環境変数を使用し、 docker loginを介してパスワードを に渡しますstdin。Docker 認証の詳細については、Docker ドキュメントの「docker ログイン」を参照してください。

    注意事項

認証が設定されると、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 形式を使用して参照できます。