本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用映像儲存庫進行驗證
本主題說明如何使用 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 Resource Name (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 與您的私有儲存庫進行身分驗證,以啟用對容器映像的存取。
此方法使用 Elastic Beanstalk 部署程序的預先建置階段搭配兩個元件:
-
定義儲存庫登入資料的環境變數的 ebextensions
-
提取映像docker login之前要執行的平台掛鉤指令碼
掛接指令碼會從從 AWS Systems Manager 參數存放區或填入的環境變數安全地擷取登入資料 AWS Secrets Manager。此功能需要 2025 年 3 月 26 日當天或之後發行的 Elastic Beanstalk Docker 和 ECS 受管 Docker 平台。如需詳細資訊,請參閱環境變數組態。
若要設定 Elastic Beanstalk 使用 AWS Systems Manager 參數存放區或 對您的私有儲存庫進行身分驗證 AWS Secrets Manager
注意
在繼續之前,請確定您已在 AWS Systems Manager 參數存放區或 AWS Secrets Manager 中設定登入資料,並設定必要的 IAM 許可。如需詳細資訊,請參閱將秘密設定為環境變數的先決條件。
-
為您的專案建立下列目錄結構:
├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── Dockerfile
-
使用AWS Systems Manager參數存放區 或 AWS Secrets Manager 來儲存私有儲存庫的登入資料。此範例同時顯示 AWS Systems Manager 參數存放區和 AWS Secrets Manager ,但您可以選擇只使用其中一個服務。
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
和PASSWD
Elastic Beanstalk 環境變數初始化為 Systems Manager 參數存放區中存放的值。注意
確保變數名稱
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 中設定的環境變數,並透過 安全地將密碼傳遞給 docker loginstdin
。如需 Docker 身分驗證的詳細資訊,請參閱 Docker 文件中的 Docker 登入。 備註
-
可執行檔也可以是二進位檔案,或開頭為 #! 行且包含其解譯器路徑 (例如 #!/bin/bash) 的指令碼檔案。
-
如需詳細資訊,請參閱 Extending 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 login
registry-server-url
注意
如果您的 Elastic Beanstalk 環境使用 Amazon Linux AMI 平台版本 (Amazon Linux 2 之前的版本),請閱讀 Amazon Linux AMI (Amazon Linux 2 之前的版本) 上的 Docker 組態 中的相關資訊。
如需身分驗證檔案的詳細資訊,請至 Docker 網站參閱 Store images on Docker Hub
和 docker login 。 -
將名為
.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 儲存庫可公開存取,但驗證可為部署提供更高的速率限制和更佳的可靠性。
注意
中國區域 (cn-*
) 和 AWS GovCloud 區域 () 不支援 Amazon ECR 公開身分驗證us-gov-*
。在這些區域中,Elastic Beanstalk 將使用未經驗證的提取。
若要啟用 Amazon ECR 公開身分驗證,請將下列許可新增至您環境的執行個體描述檔。如需 Amazon ECR 公有身分驗證的詳細資訊,請參閱《Amazon Elastic Container Registry 公有使用者指南》中的 Amazon ECR 公有的登錄身分驗證:
將這些許可連接到執行個體描述檔後,Elastic Beanstalk 會自動向 Amazon ECR Public 登錄檔進行身分驗證。您可以使用 Dockerrun.aws.json
檔案或 Dockerfile 中的標準public.ecr.aws/
格式來參考 Amazon ECR Public 映像。registry-alias
/repository-name:tag