บันทึกในไคลเอ็นต์ Docker ภายในเครื่องไปยังการลงทะเบียนส่วนตัวของ Amazon ECR อย่างน้อยหนึ่งรายการหรือการลงทะเบียนสาธารณะของ Amazon ECR
สารบัญ
ในเวอร์ชันหลักใหม่สำหรับการดำเนินการนี้ ค่าเริ่มต้นของการป้อน mask-password
ได้เปลี่ยนจาก false
เป็น true
หากคุณ ไม่ได้ ใช้ข้อมูลรับรอง Docker เป็นเอาต์พุตในงานต่อๆ ไป คุณสามารถอัปเดตเวอร์ชันการดำเนินการของคุณเป็น aws-actions/amazon-ecr-login@v2
ได้
สำหรับลูกค้าที่ใช้ข้อมูลรับรอง Docker เป็นเอาท์พุตในงานต่อๆ ไป:
mask-password
ซึ่งปัจจุบันเป็น false
ใน v1 เวิร์กโฟลว์ของคุณจะหยุดทำงานเมื่ออัปเกรดเป็น 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
ได้หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุที่ทำให้เกิดการเปลี่ยนแปลงนี้ โปรดดูที่ Masking Docker Credentials ใน Amazon ECR Login Action
- 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
เพื่อให้สามารถเข้าถึงการทำงานข้ามบัญชีได้
โปรดดูเอกสาร AWS สำหรับรายละเอียดเกี่ยวกับวิธีกำหนดค่านโยบาย ECR
ใช้การดำเนินการเพื่อส่งออกข้อมูลรับรอง Docker ของคุณสำหรับการเข้าสู่ระบบ ECR Private จากนั้นใช้ข้อมูลรับรองเพื่อเรียกใช้อิมเมจส่วนตัวของคุณเป็นบริการในงานอื่น
คำเตือน
การตั้ง mask-password
เป็น 'false'
จะบันทึกเอาต์พุตรหัสผ่าน 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 สำหรับ Javascript เพื่อกำหนดข้อมูลรับรอง AWS และภูมิภาค ใช้การดำเนินการ aws-actions/configure-aws-credentials
เพื่อกำหนดค่าสภาพแวดล้อม GitHub Actions ด้วยบทบาทโดยใช้ผู้ให้บริการ OIDC ของ GitHub และภูมิภาคที่คุณต้องการ
- 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
เราขอแนะนำให้ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดของ Amazon IAM เมื่อใช้บริการของ AWS ในเวิร์กโฟลว์ GitHub Actions ซึ่งรวมถึง:
aws-actions/configure-aws-credentials
เพื่อรับตัวอย่างURI รีจิสทรีสำหรับ ECR Private และ ECR Public มีดังนี้:
123456789012.dkr.ecr.aws-region-1.amazonaws.com
public.ecr.aws
หลังจากเข้าสู่ระบบ คุณจะสามารถเข้าถึงชื่อผู้ใช้และรหัสผ่านนักเทียบท่าผ่านเอาต์พุตการดำเนินการโดยใช้รูปแบบต่อไปนี้:
หากใช้ ECR ส่วนตัว:
docker_username_123456789012_dkr_ecr_aws_region_1_amazonaws_com
docker_password_123456789012_dkr_ecr_aws_region_1_amazonaws_com
หากใช้ ECR Public:
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 "
การดำเนินการจะอ่านการกำหนดค่าพร็อกซีพื้นฐานจากสภาพแวดล้อม และคุณไม่จำเป็นต้องกำหนดค่าในการดำเนินการ
หากต้องการดูวิธีและตำแหน่งที่จะใช้สิทธิ์ด้านล่าง โปรดดูส่วน IAM ในคู่มือผู้ใช้ Amazon ECR
การดำเนินการนี้ต้องการชุดสิทธิ์ขั้นต่ำต่อไปนี้เพื่อเข้าสู่ระบบ ECR Private:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:GetAuthorizationToken "
],
"Resource" : " * "
}
]
}
คำสั่ง Docker ในเวิร์กโฟลว์ GitHub Actions ของคุณ เช่น docker pull
และ docker push
อาจต้องมีสิทธิ์เพิ่มเติมแนบมากับข้อมูลประจำตัวที่ใช้โดยการดำเนินการนี้
สิทธิ์ขั้นต่ำต่อไปนี้จำเป็นสำหรับการดึงรูปภาพจากที่เก็บ ECR Private:
{
"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 "
}
]
}
หากต้องการดูวิธีและตำแหน่งที่จะใช้สิทธิ์ด้านล่าง โปรดดูส่วน IAM ในคู่มือผู้ใช้ Amazon ECR Public
การดำเนินการนี้ต้องการชุดสิทธิ์ขั้นต่ำต่อไปนี้เพื่อเข้าสู่ระบบ ECR Public:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr-public:GetAuthorizationToken " ,
" sts:GetServiceBearerToken "
],
"Resource" : " * "
}
]
}
คำสั่ง Docker ในเวิร์กโฟลว์ GitHub Actions ของคุณ เช่น 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 Publicus-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
หากรหัสขึ้นต้นด้วย 0 ตรวจสอบให้แน่ใจว่าได้ใส่ไว้ในเครื่องหมายคำพูด GitHub Actions จะอ่านอินพุตเป็นตัวเลขหากอักขระทั้งหมดในอินพุตเป็นตัวเลข ดังนั้น หาก ID รีจิสทรีของคุณขึ้นต้นด้วย 0 เลข 0 จะถูกตัดทอน ดูฉบับที่ #225 รหัสนี้จัดทำขึ้นภายใต้ใบอนุญาต MIT
หากคุณต้องการรายงานปัญหาด้านความปลอดภัยที่อาจเกิดขึ้นในโปรเจ็กต์นี้ โปรดอย่าสร้างปัญหา GitHub โปรดปฏิบัติตามคำแนะนำที่นี่หรือส่งอีเมลถึงการรักษาความปลอดภัยของ AWS โดยตรงแทน