Masuk klien Docker lokal ke satu atau lebih registri Amazon ECR Private atau registri Publik Amazon ECR.
Daftar isi
Dalam versi utama baru untuk tindakan ini, nilai default input mask-password
telah berubah dari false
menjadi true
.
Jika Anda tidak menggunakan kredensial Docker sebagai output dalam pekerjaan berikutnya, Anda cukup memperbarui versi tindakan Anda ke aws-actions/amazon-ecr-login@v2
.
Untuk setiap pelanggan yang menggunakan kredensial Docker sebagai output dalam pekerjaan berikutnya:
mask-password
, yang saat ini false
di v1, alur kerja Anda akan terhenti saat meningkatkan ke v2. Untuk memperbaikinya, atur input mask-password ke false
: - name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
with:
mask-password: 'false'
mask-password
ke false
, Anda cukup memperbarui versi tindakan Anda ke aws-actions/amazon-ecr-login@v2
.Untuk informasi selengkapnya tentang alasan perubahan ini dilakukan, lihat Menyembunyikan Kredensial Docker dalam Tindakan Login Amazon ECR.
- 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 menggunakan penyimpanan kredensial yang sama dengan Docker, sehingga Helm dapat mengautentikasi dengan kredensial yang sama dengan yang Anda gunakan untuk 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 "
Repositori pada akun 998877665544
perlu secara eksplisit memberikan akses ke peran: arn:aws:iam::123456789012:role/my-github-actions-role
agar akses lintas akun berfungsi
Silakan merujuk ke dokumen AWS untuk detail tentang cara mengonfigurasi kebijakan ECR
Gunakan tindakan tersebut untuk mengeluarkan kredensial Docker Anda untuk masuk ke ECR Private, lalu gunakan kredensial tersebut untuk menjalankan citra pribadi Anda sebagai layanan di pekerjaan lain.
Peringatan
Menyetel mask-password
ke 'false'
akan mencatat keluaran kata sandi Docker Anda jika pencatatan debug diaktifkan. Untuk informasi lebih lanjut, lihat bagian Kredensial Docker di bawah.
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"
Lihat action.yml untuk dokumentasi lengkap input dan output tindakan ini.
Tindakan ini bergantung pada perilaku default AWS SDK for Javascript untuk menentukan kredensial dan wilayah AWS. Gunakan tindakan aws-actions/configure-aws-credentials
untuk mengonfigurasi lingkungan Tindakan GitHub dengan peran menggunakan penyedia OIDC GitHub dan wilayah yang Anda inginkan.
- 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
Kami merekomendasikan untuk mengikuti praktik terbaik Amazon IAM saat menggunakan layanan AWS di alur kerja GitHub Actions, termasuk:
aws-actions/configure-aws-credentials
untuk mendapatkan contoh.URI registri untuk ECR Private dan ECR Public adalah sebagai berikut:
123456789012.dkr.ecr.aws-region-1.amazonaws.com
public.ecr.aws
Setelah masuk, Anda dapat mengakses nama pengguna dan kata sandi buruh pelabuhan melalui keluaran tindakan menggunakan format berikut:
Jika menggunakan ECR Pribadi:
docker_username_123456789012_dkr_ecr_aws_region_1_amazonaws_com
docker_password_123456789012_dkr_ecr_aws_region_1_amazonaws_com
Jika menggunakan ECR Publik:
docker_username_public_ecr_aws
docker_password_public_ecr_aws
Penting
Jika Anda tidak menggunakan keluaran kredensial Docker, pastikan masukan mask-password
tidak disetel atau disetel ke 'true'
. Ini menutupi kata sandi Docker Anda dan mencegahnya dicetak ke log tindakan jika Anda mengaktifkan pencatatan debug.
Jika Anda menggunakan keluaran kredensial Docker, pastikan masukan mask-password
diatur ke 'false'
. Nilai yang disamarkan tidak dapat diteruskan ke pekerjaan terpisah (lihat masalah ini).
Jika Anda menjalankannya di lingkungan yang dihosting sendiri dan/atau di lingkungan aman di mana Anda perlu menggunakan proksi tertentu, Anda dapat mengaturnya dalam tindakan secara manual.
Selain itu, tindakan ini akan selalu mempertimbangkan proksi yang sudah dikonfigurasi di lingkungan.
Proksi dikonfigurasi melalui masukan tindakan:
uses : aws-actions/amazon-ecr-login@v2
with :
http-proxy : " http://companydomain.com:3128 "
Proksi dikonfigurasi melalui variabel lingkungan:
# Your environment configuration
HTTP_PROXY= " http://companydomain.com:3128 "
Tindakan ini akan membaca konfigurasi proksi yang mendasarinya dari lingkungan, dan Anda tidak perlu mengonfigurasinya dalam tindakan tersebut.
Untuk melihat bagaimana dan di mana menerapkan izin di bawah, lihat bagian IAM di Panduan Pengguna Amazon ECR.
Tindakan ini memerlukan serangkaian izin minimum berikut untuk masuk ke ECR Private:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:GetAuthorizationToken "
],
"Resource" : " * "
}
]
}
Perintah Docker di alur kerja GitHub Actions Anda, seperti docker pull
dan docker push
, mungkin memerlukan izin tambahan yang dilampirkan ke kredensial yang digunakan oleh tindakan ini.
Izin minimum berikut diperlukan untuk mengambil gambar dari repositori 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 "
}
]
}
Izin minimum berikut diperlukan untuk mendorong dan menarik gambar dalam repositori ECR Private:
{
"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 "
}
]
}
Untuk melihat bagaimana dan di mana menerapkan izin di bawah, lihat bagian IAM di Panduan Pengguna Publik Amazon ECR.
Tindakan ini memerlukan serangkaian izin minimum berikut untuk masuk ke ECR Public:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr-public:GetAuthorizationToken " ,
" sts:GetServiceBearerToken "
],
"Resource" : " * "
}
]
}
Perintah Docker di alur kerja GitHub Actions Anda, seperti docker push
, mungkin memerlukan izin tambahan yang dilampirkan ke kredensial yang digunakan oleh tindakan ini. Tidak diperlukan izin untuk mengambil gambar dari ECR Public.
Izin minimum berikut diperlukan untuk memasukkan gambar ke repositori Publik 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
dikonfigurasi sebagai wilayah di mana ECR Public tidak tersedia.us-east-1
. Dalam tindakan aws-actions/configure-aws-credentials
, input aws-region
harus berupa us-east-1
. GetAuthorizationToken command is only supported in us-east-1.
AWS_DEFAULT_REGION
dikonfigurasi sebagai us-west-2
.us-east-1
. Dalam tindakan aws-actions/configure-aws-credentials
, input aws-region
harus berupa 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
bukanlah urutan 12 digitregistries
, jika ID dimulai dengan angka 0, pastikan untuk mengapitnya dalam tanda kutip. Tindakan GitHub akan membaca masukan sebagai angka jika semua karakter dalam masukan berupa angka. Jadi jika ID registri Anda dimulai dengan angka 0, angka 0 tersebut akan terpotong. Lihat edisi #225. Kode ini tersedia di bawah lisensi MIT.
Jika Anda ingin melaporkan potensi masalah keamanan dalam proyek ini, mohon jangan membuat masalah GitHub. Sebagai gantinya, silakan ikuti petunjuk di sini atau kirim email langsung ke keamanan AWS.