قم بتسجيل الدخول إلى عميل Docker المحلي إلى واحد أو أكثر من سجلات Amazon ECR الخاصة أو سجل Amazon ECR العام.
جدول المحتويات
في الإصدار الرئيسي الجديد لهذا الإجراء، تغيرت القيمة الافتراضية لإدخال mask-password
من false
إلى true
.
إذا كنت لا تستخدم بيانات اعتماد Docker كمخرجات في المهام اللاحقة، فيمكنك ببساطة تحديث إصدار الإجراء الخاص بك إلى aws-actions/amazon-ecr-login@v2
.
بالنسبة لأي عميل يستخدم بيانات اعتماد Docker كمخرجات في المهام اللاحقة:
mask-password
، والتي هي false
حاليًا في الإصدار 1، فسوف ينقطع سير عملك عند الترقية إلى الإصدار 2. لإصلاح ذلك، يرجى ضبط إدخال كلمة مرور القناع على 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
.لمزيد من المعلومات حول سبب إجراء هذا التغيير، راجع إخفاء بيانات اعتماد Docker في إجراء تسجيل الدخول إلى 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 نفس مخزن بيانات الاعتماد الذي يستخدمه 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 الخاصة بك في حالة تمكين تسجيل التصحيح. لمزيد من المعلومات، راجع قسم بيانات اعتماد 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 الخاص:
{
"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.
يتطلب هذا الإجراء الحد الأدنى التالي من مجموعة الأذونات لتسجيل الدخول إلى 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 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
ليس تسلسلاً مكونًا من 12 رقمًاregistries
، إذا كان المعرف يبدأ بالرقم 0، فتأكد من وضعه بين علامتي اقتباس. ستقرأ إجراءات GitHub الإدخال كرقم إذا كانت جميع الأحرف الموجودة في الإدخال عبارة عن أرقام. لذا، إذا كان معرف التسجيل الخاص بك يبدأ بالرقم 0، فسيتم اقتطاع الرقم 0. راجع العدد رقم 225. هذا الرمز متاح بموجب ترخيص MIT.
إذا كنت ترغب في الإبلاغ عن مشكلة أمنية محتملة في هذا المشروع، فيرجى عدم إنشاء مشكلة في GitHub. وبدلاً من ذلك، يرجى اتباع التعليمات الواردة هنا أو مراسلة أمان AWS عبر البريد الإلكتروني مباشرةً.