

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用映像儲存庫進行驗證
<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](https://aws.amazon.com/ecr) (Amazon ECR) 將自訂 Docker 映像存放在 AWS 中。

當您將 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 Resource Name (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 與您的私有儲存庫進行身分驗證，以啟用對容器映像的存取。

此方法使用 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)。 **
如需平台掛鉤的詳細資訊，請參閱*擴展 Elastic Beanstalk Linux 平台*[平台勾點](platforms-linux-extend.hooks.md)中的 。

設定身分驗證後，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 AMI 平台版本 (Amazon Linux 2 之前的版本)，請閱讀 [Amazon Linux AMI (Amazon Linux 2 之前的版本) 上的 Docker 組態](create_deploy_docker.container.console.md#docker-alami) 中的相關資訊。

   如需身分驗證檔案的詳細資訊，請至 Docker 網站參閱 [Store images on Docker Hub](https://docs.docker.com/docker-hub/repos/) 和 [docker login](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 儲存庫可公開存取，但驗證可為部署提供更高的速率限制和更佳的可靠性。

**注意**  
中國區域 (`cn-*`) 和 AWS GovCloud 區域 () 不支援 Amazon ECR 公開身分驗證`us-gov-*`。在這些區域中，Elastic Beanstalk 將使用未經驗證的提取。

若要啟用 Amazon ECR 公開身分驗證，請將下列許可新增至您環境的[執行個體描述檔](concepts-roles-instance.md)。如需 Amazon ECR 公有身分驗證的詳細資訊，請參閱[《Amazon Elastic Container Registry 公有使用者指南》中的 Amazon ECR 公](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 登錄檔進行身分驗證。您可以使用 `Dockerrun.aws.json` 檔案或 Dockerfile 中的標準`public.ecr.aws/{{registry-alias}}/{{repository-name:tag}}`格式來參考 Amazon ECR Public 映像。