ローカル Docker クライアントを 1 つ以上の Amazon ECR プライベートレジストリまたは Amazon ECR パブリックレジストリにログインします。
目次
このアクションの新しいメジャー バージョンでは、 mask-password
入力のデフォルト値がfalse
からtrue
に変更されました。
Docker 認証情報を後続のジョブの出力として使用しない場合は、アクションのバージョンをaws-actions/amazon-ecr-login@v2
に更新するだけで済みます。
Docker 資格情報を後続のジョブの出力として使用する顧客の場合:
mask-password
入力のデフォルト値 (v1 では現在false
に依存している場合、v2 にアップグレードするときにワークフローが中断します。これを修正するには、マスクパスワード入力をfalse
に設定してください。 - name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
with:
mask-password: 'false'
mask-password
入力をfalse
に設定している場合は、アクションのバージョンをaws-actions/amazon-ecr-login@v2
に更新するだけで済みます。この変更が行われる理由の詳細については、「Amazon ECR ログインアクションでの Docker 認証情報のマスキング」を参照してください。
- name : Checkout repo
uses : actions/checkout@v3
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4 # More information on this action can be found below in the 'AWS Credentials' section
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : aws-region-1
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
- name : Build, tag, and push docker image to Amazon ECR
env :
REGISTRY : ${{ steps.login-ecr.outputs.registry }}
REPOSITORY : my-ecr-repo
IMAGE_TAG : ${{ github.sha }}
run : |
docker build -t $REGISTRY/$REPOSITORY:$IMAGE_TAG .
docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG
- name : Login to Amazon ECR Public
id : login-ecr-public
uses : aws-actions/amazon-ecr-login@v2
with :
registry-type : public
- name : Build, tag, and push docker image to Amazon ECR Public
env :
REGISTRY : ${{ steps.login-ecr-public.outputs.registry }}
REGISTRY_ALIAS : my-ecr-public-registry-alias
REPOSITORY : my-ecr-public-repo
IMAGE_TAG : ${{ github.sha }}
run : |
docker build -t $REGISTRY/$REGISTRY_ALIAS/$REPOSITORY:$IMAGE_TAG .
docker push $REGISTRY/$REGISTRY_ALIAS/$REPOSITORY:$IMAGE_TAG
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
- name : Package and push helm chart to Amazon ECR
env :
REGISTRY : ${{ steps.login-ecr.outputs.registry }}
REPOSITORY : my-ecr-repo
run : |
helm package $REPOSITORY
helm push $REPOSITORY-0.1.0.tgz oci://$REGISTRY
- name : Login to Amazon ECR Public
id : login-ecr-public
uses : aws-actions/amazon-ecr-login@v2
with :
registry-type : public
- name : Package and push helm chart to Amazon ECR Public
env :
REGISTRY : ${{ steps.login-ecr-public.outputs.registry }}
REGISTRY_ALIAS : my-ecr-public-registry-alias
REPOSITORY : my-ecr-public-repo
run : |
helm package $REPOSITORY
helm push $REPOSITORY-0.1.0.tgz oci://$REGISTRY/$REGISTRY_ALIAS
Helm は Docker と同じ資格情報ストアを使用するため、Helm は Docker に使用するのと同じ資格情報で認証できます。
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : aws-region-1
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
with :
registries : " 123456789012,998877665544 "
アカウント998877665544
のリポジトリは、クロスアカウント アクセスを機能させるために、ロールarn:aws:iam::123456789012:role/my-github-actions-role
へのアクセスを明示的に付与する必要があります。
ECR ポリシーの設定方法の詳細については、AWS ドキュメントを参照してください。
このアクションを使用して ECR Private にログインするための Docker 認証情報を出力し、その認証情報を使用してプライベート イメージを別のジョブのサービスとして実行します。
警告
デバッグログが有効になっている場合、 mask-password
'false'
に設定すると、Docker パスワード出力がログに記録されます。詳細については、以下の「Docker 認証情報」セクションを参照してください。
jobs :
login-to-amazon-ecr :
runs-on : ubuntu-latest
steps :
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : us-east-1
mask-aws-account-id : ' false '
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
with :
mask-password : ' false '
outputs :
registry : ${{ steps.login-ecr.outputs.registry }}
docker_username : ${{ steps.login-ecr.outputs.docker_username_123456789012_dkr_ecr_us_east_1_amazonaws_com }} # More information on these outputs can be found below in the 'Docker Credentials' section
docker_password : ${{ steps.login-ecr.outputs.docker_password_123456789012_dkr_ecr_us_east_1_amazonaws_com }}
run-with-internal-service :
name : Run something with an internal image as a service
needs : login-to-amazon-ecr
runs-on : ubuntu-latest
services :
internal-service :
image : ${{ needs.login-to-amazon-ecr.outputs.registry }}/my-ecr-repo:latest
credentials :
username : ${{ needs.login-to-amazon-ecr.outputs.docker_username }}
password : ${{ needs.login-to-amazon-ecr.outputs.docker_password }}
ports :
- ' 80:80 '
steps :
- name : Run steps in container
run : echo "run steps in container"
このアクションの入力と出力に関する完全なドキュメントについては、action.yml を参照してください。
このアクションは、AWS SDK for JavaScript のデフォルトの動作に依存して、AWS 認証情報とリージョンを決定します。 aws-actions/configure-aws-credentials
アクションを使用して、GitHub の OIDC プロバイダーと目的のリージョンを使用するロールで GitHub Actions 環境を構成します。
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : us-east-1
- name : Login to Amazon ECR Private
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
GitHub Actions ワークフローで AWS のサービスを使用する場合は、次のような Amazon IAM のベストプラクティスに従うことをお勧めします。
aws-actions/configure-aws-credentials
アクションのサンプル IAM ロール CloudFormation テンプレートを参照してください。ECR Private と ECR Public のレジストリ URI は次のとおりです。
123456789012.dkr.ecr.aws-region-1.amazonaws.com
public.ecr.aws
ログイン後、次の形式を使用したアクション出力を通じて Docker のユーザー名とパスワードにアクセスできます。
ECR プライベートを使用する場合:
docker_username_123456789012_dkr_ecr_aws_region_1_amazonaws_com
docker_password_123456789012_dkr_ecr_aws_region_1_amazonaws_com
ECR パブリックを使用する場合:
docker_username_public_ecr_aws
docker_password_public_ecr_aws
重要
Docker 認証情報の出力を使用していない場合は、 mask-password
入力が設定されていないこと、または'true'
に設定されていることを確認してください。これにより、Docker パスワードがマスクされ、デバッグ ログを有効にしている場合にアクション ログに出力されなくなります。
Docker 認証情報の出力を使用している場合は、 mask-password
入力が'false'
に設定されていることを確認してください。マスクされた値を別のジョブに渡すことはできません (この問題を参照)。
セルフホスト環境や、特定のプロキシを使用する必要がある安全な環境で実行する場合は、アクションで手動でプロキシを設定できます。
さらに、このアクションでは、環境内にすでに構成されているプロキシが常に考慮されます。
アクション入力を介して設定されたプロキシ:
uses : aws-actions/amazon-ecr-login@v2
with :
http-proxy : " http://companydomain.com:3128 "
環境変数を介して設定されたプロキシ:
# Your environment configuration
HTTP_PROXY= " http://companydomain.com:3128 "
アクションは環境から基礎となるプロキシ構成を読み取るため、アクション内で構成する必要はありません。
以下のアクセス許可を実装する方法と場所については、Amazon ECR ユーザーガイドの「IAM」セクションを参照してください。
このアクションには、ECR Private にログインするための次の最小限の権限セットが必要です。
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:GetAuthorizationToken "
],
"Resource" : " * "
}
]
}
GitHub Actions ワークフローの Docker コマンド ( docker pull
やdocker push
など) では、このアクションで使用される認証情報に関連付けられた追加のアクセス許可が必要になる場合があります。
ECR プライベート リポジトリからイメージをプルするには、次の最小限の権限が必要です。
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " AllowPull " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:BatchGetImage " ,
" ecr:GetDownloadUrlForLayer "
],
"Resource" : " arn:aws:ecr:us-east-1:123456789012:repository/my-ecr-repo "
}
]
}
ECR プライベート リポジトリでイメージをプッシュおよびプルするには、次の最小限の権限が必要です。
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " AllowPushPull " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:BatchGetImage " ,
" ecr:BatchCheckLayerAvailability " ,
" ecr:CompleteLayerUpload " ,
" ecr:GetDownloadUrlForLayer " ,
" ecr:InitiateLayerUpload " ,
" ecr:PutImage " ,
" ecr:UploadLayerPart "
],
"Resource" : " arn:aws:ecr:us-east-1:123456789012:repository/my-ecr-repo "
}
]
}
以下のアクセス許可を実装する方法と場所については、『Amazon ECR パブリック ユーザー ガイド』の「IAM」セクションを参照してください。
このアクションには、ECR Public にログインするための次の最小限の権限セットが必要です。
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr-public:GetAuthorizationToken " ,
" sts:GetServiceBearerToken "
],
"Resource" : " * "
}
]
}
GitHub Actions ワークフローの Docker コマンドdocker push
など) では、このアクションで使用される認証情報に関連付けられた追加のアクセス許可が必要になる場合があります。 ECR Public からイメージを取得するために必要な権限はありません。
イメージを ECR パブリック リポジトリにプッシュするには、次の最小限の権限が必要です。
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " AllowPush " ,
"Effect" : " Allow " ,
"Action" : [
" ecr-public:BatchCheckLayerAvailability " ,
" ecr-public:CompleteLayerUpload " ,
" ecr-public:InitiateLayerUpload " ,
" ecr-public:PutImage " ,
" ecr-public:UploadLayerPart "
],
"Resource" : " arn:aws:ecr-public::123456789012:repository/my-ecr-public-repo "
}
]
}
Inaccessible host: 'api.ecr-public.aws-region-1.amazonaws.com' at port 'undefined'. This service may not be available in the 'aws-region-1' region.
AWS_DEFAULT_REGION
環境変数は、ECR Public が利用できないリージョンとして設定されています。us-east-1
リージョンからのみログインできます。 aws-actions/configure-aws-credentials
アクションでは、 aws-region
入力はus-east-1
である必要があります。 GetAuthorizationToken command is only supported in us-east-1.
AWS_DEFAULT_REGION
環境変数はus-west-2
として設定されます。us-east-1
リージョンからのみログインできます。 aws-actions/configure-aws-credentials
アクションでは、 aws-region
入力はus-east-1
である必要があります。Invalid parameter at 'registryIds' failed to satisfy constraint: 'Member must satisfy constraint: [Member must satisfy regular expression pattern: [0-9]{12}]'
registries
入力で指定したレジストリの 1 つが 12 桁のシーケンスではありませんregistries
入力に 1 つのレジストリ ID のみを指定する場合、ID が 0 で始まる場合は、必ず引用符で囲んでください。 GitHub Actions は、入力内のすべての文字が数字の場合、入力を数値として読み取ります。したがって、レジストリ ID が 0 で始まる場合、0 は切り捨てられます。問題 #225 を参照してください。 このコードは、MIT ライセンスに基づいて利用可能です。
このプロジェクトの潜在的なセキュリティ問題を報告したい場合は、GitHub 問題を作成しないでください。代わりに、ここの手順に従うか、AWS セキュリティに直接電子メールを送信してください。