View a markdown version of this page

Mengautentikasi dengan repositori gambar - AWS Elastic Beanstalk

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengautentikasi dengan repositori gambar

Topik ini menjelaskan cara mengautentikasi ke repositori gambar online dengan Elastic Beanstalk. Untuk repositori pribadi, Elastic Beanstalk harus mengautentikasi sebelum dapat menarik dan menyebarkan gambar Anda. Untuk Amazon ECR Public, otentikasi bersifat opsional tetapi memberikan batas tarif yang lebih tinggi dan keandalan yang lebih baik.

Menggunakan gambar dari repositori Amazon ECR

Anda dapat menyimpan gambar Docker kustom Anda AWS dengan Amazon Elastic Container Registry (Amazon ECR).

Saat Anda menyimpan gambar Docker di Amazon ECR, Elastic Beanstalk secara otomatis mengautentikasi registri Amazon ECR dengan profil instans lingkungan Anda. Oleh karena itu, Anda harus memberikan izin kepada instans Anda untuk mengakses gambar di repositori Amazon ECR Anda. Untuk melakukannya, tambahkan izin ke profil instans lingkungan Anda dengan melampirkan kebijakan EC2 ContainerRegistryReadOnly terkelola Amazon ke profil instance. Ini menyediakan akses hanya-baca ke semua repositori Amazon ECR di akun Anda. Anda juga memiliki opsi untuk hanya mengakses repositori tunggal dengan menggunakan templat berikut untuk membuat kebijakan khusus:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowEbAuth", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": [ "*" ] }, { "Sid": "AllowPull", "Effect": "Allow", "Resource": [ "arn:aws:ecr:us-east-2:111122223333:repository/repository-name" ], "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:BatchGetImage" ] } ] }

Ganti Amazon Resource Name (ARN) di kebijakan di atas dengan ARN repositori Anda.

Anda harus menentukan informasi gambar dalam Dockerrun.aws.json file Anda. Konfigurasi akan berbeda tergantung pada platform mana yang Anda gunakan.

Untuk platform Docker yang dikelola ECS, gunakan image kunci dalam objek definisi kontainer:

"containerDefinitions": [ { "name": "my-image", "image": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest",

Untuk platform Docker lihat gambar dengan URL. URL masuk dalam Image definisi Dockerrun.aws.json file Anda:

"Image": { "Name": "account-id.dkr.ecr.us-east-2.amazonaws.com/repository-name:latest", "Update": "true" },

Menggunakan AWS Secrets Manager

Konfigurasikan Elastic Beanstalk untuk mengautentikasi dengan repositori pribadi Anda sebelum penerapan untuk mengaktifkan akses ke gambar kontainer Anda.

Pendekatan ini menggunakan fase prebuild dari proses penyebaran Elastic Beanstalk dengan dua komponen:

Skrip hook mengambil nama pengguna dan kata sandi dari variabel lingkungan yang diisi dari satu AWS Secrets Manager rahasia dalam format JSON. Fitur ini membutuhkan Elastic Beanstalk Docker dan platform Docker yang dikelola ECS yang dirilis pada atau setelah 13 Januari 2026. Untuk detail selengkapnya, lihat rahasia lingkungan.

Untuk mengonfigurasi Elastic Beanstalk untuk mengautentikasi ke repositori pribadi Anda dengan AWS Secrets Manager
catatan

Sebelum melanjutkan, pastikan Anda telah menyiapkan kredensyal Anda AWS Secrets Manager dan mengonfigurasi izin IAM yang diperlukan. Lihat Prasyarat untuk mengonfigurasi rahasia sebagai variabel lingkungan untuk detailnya.

  1. Buat struktur direktori berikut untuk proyek Anda:

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── Dockerfile
  2. Gunakan AWS Secrets Manageruntuk menyimpan kredensyal repositori pribadi Anda sebagai rahasia berformat JSON.

    aws secretsmanager create-secret --name repo-credentials \ --secret-string '{"username":"myuser","password":"mypassword"}'
  3. Membuat file env.config berikut dan menempatkannya di direktori .ebextensions seperti yang ditunjukkan dalam struktur direktori sebelumnya. Konfigurasi ini menggunakan aws:elasticbeanstalk:aplikasi:environmentsecrets namespace dengan ekstraksi kunci JSON untuk menginisialisasi dan variabel lingkungan Elastic USER Beanstalk dari PASSWD masing-masing bidang dalam rahasia.

    option_settings: aws:elasticbeanstalk:application:environmentsecrets: USER: arn:aws:secretsmanager:us-east-1:111122223333:secret:repo-credentials-AbCd12:username PASSWD: arn:aws:secretsmanager:us-east-1:111122223333:secret:repo-credentials-AbCd12:password
  4. Buat file 01login.sh skrip berikut dan letakkan di lokasi berikut (juga ditunjukkan dalam struktur direktori sebelumnya):

    • .platform/confighooks/prebuild/01login.sh

    • .platform/hooks/prebuild/01login.sh

    #!/bin/bash echo $PASSWD | docker login -u $USER --password-stdin

    01login.shSkrip menggunakan variabel lingkungan yang dikonfigurasi pada Langkah 3 dan meneruskan kata sandi ke docker login viastdin. Untuk informasi selengkapnya tentang otentikasi Docker, lihat docker login di dokumentasi Docker.

    Catatan

Setelah otentikasi dikonfigurasi, Elastic Beanstalk dapat menarik dan menyebarkan gambar dari repositori pribadi Anda.

Menggunakan file Dockerrun.aws.json

Bagian ini menjelaskan pendekatan lain untuk mengotentikasi Elastic Beanstalk ke repositori pribadi. Dengan pendekatan ini, Anda menghasilkan file otentikasi dengan perintah Docker, dan kemudian mengunggah file otentikasi ke ember Amazon S3. Anda juga harus menyertakan informasi bucket di file Dockerrun.aws.json Anda.

Untuk menghasilkan dan menyediakan file otentikasi ke Elastic Beanstalk
  1. Menghasilkan file autentikasi dengan perintah docker login. Untuk repositori di Docker Hub, jalankandocker login:

    $ docker login

    Untuk pendaftar lainnya, sertakan URL server registri:

    $ docker login registry-server-url
    catatan

    Jika lingkungan Elastic Beanstalk Anda menggunakan versi platform Amazon Linux AMI Docker (sebelum Amazon Linux 2), baca informasi yang sesuai di Konfigurasi docker di Amazon Linux AMI (sebelumnya Amazon Linux 2).

    Untuk informasi selengkapnya tentang file autentikasi, lihat Simpan gambar di Docker Hub dan docker login di situs web Docker.

  2. Unggah salinan file autentikasi yang bernama .dockercfg ke bucket aman Amazon S3 .

    • Bucket Amazon S3 harus di-host Wilayah AWS sama dengan lingkungan yang menggunakannya. Elastic Beanstalk tidak dapat men-download file dari bucket Amazon S3 yang di-host di Kawasan lain.

    • Memberikan izin untuk operasi s3:GetObject untuk IAM role di profil instans. Untuk informasi selengkapnya, lihat Mengelola profil instans Elastic Beanstalk.

  3. Sertakan informasi bucket Amazon S3 di parameter Authentication pada file Dockerrun.aws.json.

    Contoh berikut menunjukkan penggunaan file otentikasi bernama mydockercfg dalam sebuah bucket bernama amzn-s3-demo-bucket untuk menggunakan gambar privat di registri pihak ketiga. Untuk nomor versi yang benarAWSEBDockerrunVersion, lihat catatan yang mengikuti contoh.

    { "AWSEBDockerrunVersion": "version-no", "Authentication": { "Bucket": "amzn-s3-demo-bucket", "Key": "mydockercfg" }, "Image": { "Name": "quay.io/johndoe/private-image", "Update": "true" }, "Ports": [ { "ContainerPort": "1234" } ], "Volumes": [ { "HostDirectory": "/var/app/mydb", "ContainerDirectory": "/etc/mysql" } ], "Logging": "/var/log/nginx" }
    Versi Dockerrun.aws.json

    Parameter AWSEBDockerrunVersion menunjukkan versi file Dockerrun.aws.json.

    • The Docker AL2 dan AL2023 platform menggunakan versi file berikut.

      • Dockerrun.aws.json v3— lingkungan yang menggunakan Docker Compose.

      • Dockerrun.aws.json v1— lingkungan yang tidak menggunakan Docker Compose.

    • ECS yang berjalan di Amazon Linux 2 dan ECS yang berjalan AL2023 menggunakan file. Dockerrun.aws.json v2 Platform pensiunan ECS-Multicontainer Docker Amazon Linux AMI AL1 () juga menggunakan versi yang sama ini.

Setelah Elastic Beanstalk dapat mengotentikasi dengan registri online yang host repositori pribadi, gambar Anda dapat digunakan dan ditarik.

Menggunakan gambar dari Amazon ECR Public

Amazon ECR Public adalah registri kontainer publik yang menghosting gambar Docker. Meskipun repositori Publik Amazon ECR dapat diakses publik, autentikasi memberikan batas tarif yang lebih tinggi dan keandalan yang lebih baik untuk penerapan Anda.

catatan

Otentikasi publik Amazon ECR tidak didukung di wilayah (cn-*) dan AWS GovCloud wilayah () Tiongkok. us-gov-* Di wilayah ini, Elastic Beanstalk akan menggunakan tarikan yang tidak diautentikasi.

Untuk mengaktifkan autentikasi Publik Amazon ECR, tambahkan izin berikut ke profil instans lingkungan Anda. Untuk informasi selengkapnya tentang autentikasi Publik Amazon ECR, lihat Autentikasi registri di Amazon ECR publik di Panduan Pengguna Publik Amazon Elastic Container Registry:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecr-public:GetAuthorizationToken", "sts:GetServiceBearerToken" ], "Resource": "*" } ] }

Setelah izin ini dilampirkan ke profil instans Anda, Elastic Beanstalk akan otomatis melakukan autentikasi dengan pendaftar Publik Amazon ECR. Anda dapat mereferensikan gambar Amazon ECR Public menggunakan public.ecr.aws/registry-alias/repository-name:tag format standar dalam Dockerrun.aws.json file Anda atau Dockerfile.