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 Systems Manager (SSM) Parameter Store atau 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 dengan aman mengambil kredensyal dari variabel lingkungan yang diisi dari Parameter Store atau. AWS Systems Manager AWS Secrets ManagerFitur ini membutuhkan Elastic Beanstalk Docker dan platform Docker yang dikelola ECS yang dirilis pada atau setelah 26 Maret 2025. Untuk detail selengkapnya, lihat konfigurasi variabel lingkungan.

Untuk mengonfigurasi Elastic Beanstalk untuk mengautentikasi ke repositori pribadi Anda dengan Parameter Store atau AWS Systems ManagerAWS Secrets Manager
catatan

Sebelum melanjutkan, pastikan Anda telah menyiapkan kredensyal Anda di AWS Systems Manager Parameter Store atau 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 Systems ManagerParameter Store atau AWS Secrets Manageruntuk menyimpan kredensyal repositori pribadi Anda. Contoh ini menunjukkan AWS Systems Manager Parameter Store dan AWS Secrets Manager tetapi Anda dapat memilih untuk menggunakan hanya salah satu layanan ini.

    aws ssm put-parameter --name USER --type SecureString --value "username" aws secretsmanager create-secret --name PASSWD --secret-string "passwd"
  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 untuk menginisialisasi variabel lingkungan PASSWD Elastic USER Beanstalk dan ke nilai-nilai yang disimpan di Systems Manager Parameter Store.

    catatan

    Pastikan nama variabel USER dan PASSWD cocokkan nama parameter yang digunakan dalam perintah put-parameter dan create-secret.

    option_settings: aws:elasticbeanstalk:application:environmentsecrets: USER: arn:aws:ssm:us-east-1:111122223333:parameter/user PASSWD: arn:aws:secretsmanager:us-east-1:111122223333:passwd
  4. Membuat file script 01login.sh berikut dan menempatkan di direktori berikut (juga ditampilkan dalam struktur direktori sebelumnya):

    • .platform/confighooks/prebuild

    • .platform/hooks/prebuild

    ### example 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 dengan aman ke docker login viastdin. Untuk informasi selengkapnya tentang otentikasi Docker, lihat docker login di dokumentasi Docker.

    Catatan
    • File Hook dapat berupa file biner atau file skrip yang dimulai dengan garis #! yang berisi jalur penerjemah mereka, seperti #!/bin/bash.

    • Untuk informasi lebih lanjut, lihat Hook platform pada Memperluas platform Elastic BeanstalkLinux .

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.

    • Platform Docker AL2 dan AL2 023 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 di AL2 023 menggunakan file tersebut. 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.