

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

# イメージリポジトリを使用した認証
<a name="docker-configuration.remote-repo"></a>

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

## Amazon ECR リポジトリからのイメージを使用する
<a name="docker-images-ecr"></a>

Amazon [Elastic Container Registry (Amazon](https://aws.amazon.com/ecr) ECR) AWS を使用して、カスタム Docker イメージを に保存できます。

Docker イメージを Amazon ECR に保存すると、Elastic Beanstalk は環境の[インスタンスプロファイル](concepts-roles-instance.md)を使用して Amazon ECR レジストリに対して自動的に認証します。したがって、Amazon ECR リポジトリ内のイメージにアクセスするためのアクセス許可をインスタンスに提供する必要があります。これを行うには、[AmazonEC2ContainerRegistryReadOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryReadOnly.html) 管理ポリシーをインスタンスプロファイルにアタッチして、環境のインスタンスプロファイルにアクセス許可を追加します。これにより、アカウント内のすべての 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 プラットフォーム](create_deploy_docker_v2config.md)では、次のようにコンテナ定義オブジェクト **** で `image` キーを使用します。

```
"containerDefinitions": [
        {
        "name": "my-image",
        "image": "{{account-id}}.dkr.ecr.us-east-2.amazonaws.com/{{repository-name:latest}}",
```

[Docker プラットフォーム](single-container-docker-configuration.md)については、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
<a name="docker-configuration.remote-repo.secrets"></a>

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

このアプローチでは、2 つのコンポーネントを含む Elastic Beanstalk デプロイプロセスの*ビルド前*フェーズを使用します。
+ リポジトリ認証情報を保存する環境変数を定義する [ebextensions](ebextensions.md)
+ イメージをプルする前に **docker login** を実行する[プラットフォームフックスクリプト](platforms-linux-extend.hooks.md)

フックスクリプトは、JSON 形式の単一の AWS Secrets Manager シークレットから入力された環境変数からユーザー名とパスワードを取得します。この機能には[、2026 年 1 月 13 ](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2026-01-13-al2023.html)日以降にリリースされた Elastic Beanstalk Docker および ECS マネージド Docker プラットフォームが必要です。詳細については、[「 環境シークレット](AWSHowTo.secrets.env-vars.md)」を参照してください。

**を使用してプライベートリポジトリを認証するように Elastic Beanstalk を設定するには AWS Secrets Manager**
**注記**  
先に進む前に、 で AWS Secrets Manager 認証情報を設定し、必要な IAM アクセス許可を設定してください。詳細については、「[シークレットを環境変数として設定するための前提条件](AWSHowTo.secrets.env-vars.md#AWSHowTo.secrets.configure-env-vars.prerequisites)」を参照してください。

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

   ```
   ├── .ebextensions
   │   └── env.config
   ├── .platform
   │   ├── confighooks
   │   │   └── prebuild
   │   │       └── 01login.sh
   │   └── hooks
   │       └── prebuild
   │           └── 01login.sh
   ├── Dockerfile
   ```

1. [AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) を使用して、プライベートリポジトリの認証情報を JSON 形式のシークレットとして保存します。

   ```
   aws secretsmanager create-secret --name repo-credentials \
       --secret-string '{"username":"myuser","password":"mypassword"}'
   ```

1. 次の `env.config` ファイルを作成し、前述のディレクトリ構造に示すように、`.ebextensions` ディレクトリに配置します。この設定では、[JSON キー抽出](AWSHowTo.secrets.env-vars.md#AWSHowTo.secrets.json)で [aws:elasticbeanstalk:application:environmentsecrets](command-options-general.md#command-options-general-elasticbeanstalk-application-environmentsecrets)名前空間を使用して、シークレット内の個々のフィールドから `USER`および `PASSWD`Elastic 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
   ```

1. 次の`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 ログイン](https://docs.docker.com/engine/reference/commandline/login/)」を参照してください。
**注意事項**  
ECS マネージド Docker プラットフォームは、ネイティブ ECS 構文を使用してシークレットを参照します。詳細については、[「Amazon Elastic Container Service デベロッパーガイド」の「Amazon ECS 環境変数を介して Secrets Manager シークレットを渡す](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/secrets-envvar-secrets-manager.html)」を参照してください。 **
プラットフォームフックの詳細については、[プラットフォームフック](platforms-linux-extend.hooks.md)*「Elastic Beanstalk Linux プラットフォームの拡張*」の「」を参照してください。

認証が設定されると、Elastic Beanstalk はプライベートリポジトリからイメージをプルしてデプロイできます。

## `Dockerrun.aws.json` ファイルの使用
<a name="docker-configuration.remote-repo.dockerrun-aws"></a>

このセクションでは、プライベートリポジトリに対して 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 設定](create_deploy_docker.container.console.md#docker-alami)」の関連情報をお読みください。

   認証ファイルの詳細については、Docker ウェブサイトの[Docker ハブにイメージを保存する](https://docs.docker.com/docker-hub/repos/)および[docker ログイン](https://docs.docker.com/engine/reference/commandline/login/)を参照してください。

1. `.dockercfg` という名前の認証ファイルのコピーを安全な Amazon S3 バケットにアップロードします。
   + Amazon S3 バケットは、使用している環境 AWS リージョン と同じ でホストされている必要があります。Elastic Beanstalk は、他のリージョンでホストされている Amazon S3 バケットからファイルをダウンロードすることはできません。
   + インスタンスプロファイル内の IAM ロールに `s3:GetObject` オペレーションを許可します。詳細については、「」を参照してください[Elastic Beanstalk インスタンスプロファイルの管理](iam-instanceprofile.md)

1. 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 のイメージを使用する
<a name="docker-images-ecr-public"></a>

Amazon ECR Public は、Docker イメージをホストするパブリックコンテナレジストリです。Amazon ECR Public リポジトリはパブリックにアクセス可能ですが、認証するとデプロイに対してより高いレート制限とより良い信頼性を提供します。

**注記**  
Amazon ECR パブリック認証は、中国リージョン (`cn-*`) および AWS GovCloud リージョン () ではサポートされていません`us-gov-*`。これらのリージョンでは、Elastic Beanstalk は認証されていないプルを使用します。

Amazon ECR Public 認証を有効にするには、環境の[インスタンスプロファイル](concepts-roles-instance.md)に次のアクセス許可を追加します。Amazon ECR Public 認証の詳細については、「*Amazon Elastic Container Registry Public ユーザーガイド*」の「[Amazon ECR Public のレジストリ認証](https://docs.aws.amazon.com/AmazonECR/latest/public/public-registries.html)」を参照してください。

------
#### [ 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}}` 形式を使用して参照できます。