로컬 Docker 클라이언트를 하나 이상의 Amazon ECR 프라이빗 레지스트리 또는 Amazon ECR 퍼블릭 레지스트리에 로그인합니다.
목차
이 작업의 새로운 주 버전에서는 mask-password
입력의 기본값이 false
에서 true
로 변경되었습니다.
후속 작업에서 Docker 자격 증명을 출력으로 사용 하지 않는 경우 작업 버전을 aws-actions/amazon-ecr-login@v2
로 업데이트하면 됩니다.
후속 작업에서 Docker 자격 증명을 출력으로 사용하는 고객의 경우:
false
인 mask-password
입력의 기본값을 사용하는 경우 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" : " * "
}
]
}
docker pull
및 docker push
와 같은 GitHub Actions 워크플로의 Docker 명령에는 이 작업에 사용되는 자격 증명에 연결된 추가 권한이 필요할 수 있습니다.
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" : " * "
}
]
}
docker push
와 같은 GitHub Actions 워크플로의 Docker 명령에는 이 작업에 사용되는 자격 증명에 연결된 추가 권한이 필요할 수 있습니다. 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 퍼블릭을 사용할 수 없는 리전으로 구성됩니다.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
입력에 제공한 레지스트리 중 하나가 12자리 시퀀스가 아닙니다.registries
입력에 단일 레지스트리 ID만 제공하는 사용자의 경우 ID가 0으로 시작하면 따옴표로 묶어야 합니다. GitHub Actions는 입력의 모든 문자가 숫자인 경우 입력을 숫자로 읽습니다. 따라서 레지스트리 ID가 0으로 시작하면 0이 잘립니다. 문제 #225를 참조하세요. 이 코드는 MIT 라이센스에 따라 제공됩니다.
이 프로젝트의 잠재적인 보안 문제를 보고하려면 GitHub 문제를 생성하지 마세요. 대신 여기의 지침을 따르거나 AWS 보안 담당자에게 직접 이메일을 보내주십시오.