View a markdown version of this page

Praktik terbaik untuk peran IAM di Amazon ECS - Amazon Elastic Container Service

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

Praktik terbaik untuk peran IAM di Amazon ECS

Peran yang dibutuhkan Amazon ECS bergantung pada jenis peluncuran definisi tugas dan fitur yang Anda gunakan. Sebaiknya buat peran terpisah dalam tabel alih-alih berbagi peran.

Peran Definisi Bila diperlukan Informasi selengkapnya
Peran pelaksanaan tugas Peran ini memungkinkan Amazon ECS menggunakan AWS layanan lain atas nama Anda.

Tugas Anda dihosting pada AWS Fargate atau pada instance eksternal dan:

  • menarik gambar kontainer dari repositori pribadi Amazon ECR.

  • menarik gambar kontainer dari repositori pribadi Amazon ECR di akun yang berbeda dari akun yang menjalankan tugas.

  • mengirimkan log kontainer ke CloudWatch Log menggunakan driver awslogs log.

Tugas Anda dihosting di salah satu AWS Fargate instans Amazon EC2 dan:

  • menggunakan otentikasi registri pribadi.

  • menggunakan Runtime Monitoring.

  • definisi tugas mereferensikan data sensitif menggunakan rahasia Manajer Rahasia atau parameter AWS Penyimpanan Parameter Manajer Sistem.

Peran IAM pelaksanaan tugas Amazon ECS
Peran tugas Peran ini memungkinkan kode aplikasi Anda (pada wadah) untuk menggunakan AWS layanan lain. Aplikasi Anda mengakses AWS layanan lain, seperti Amazon S3. Peran IAM tugas Amazon ECS
role instans kontainer Peran ini memungkinkan instans EC2 atau instans eksternal mendaftar ke cluster. Tugas Anda dihosting di instans Amazon EC2 atau instans eksternal. Peran IAM instans kontainer Amazon ECS
Peran Amazon ECS Anywhere Peran ini memungkinkan instans eksternal Anda mengakses AWS API. Tugas Anda dihosting di instance eksternal. Peran IAM Amazon ECS Anywhere
Peran Amazon ECS CodeDeploy Peran ini memungkinkan CodeDeploy untuk membuat pembaruan pada layanan Anda. Anda menggunakan jenis CodeDeploy blue/green penerapan untuk menyebarkan layanan. Peran Amazon ECS CodeDeploy IAM
Peran Amazon ECS EventBridge Peran ini memungkinkan EventBridge untuk membuat pembaruan pada layanan Anda. Anda menggunakan EventBridge aturan dan target untuk menjadwalkan tugas Anda. Peran Amazon ECS EventBridge IAM
Peran infrastruktur Amazon ECS Peran ini memungkinkan Amazon ECS mengelola sumber daya infrastruktur di cluster Anda.
  • Anda ingin melampirkan volume Amazon EBS ke tugas Amazon ECS tipe peluncuran Fargate atau EC2 Anda. Peran infrastruktur memungkinkan Amazon ECS mengelola volume Amazon EBS untuk tugas Anda.

  • Anda ingin menggunakan Transport Layer Security (TLS) untuk mengenkripsi lalu lintas antara layanan Amazon ECS Service Connect Anda.

  • Anda ingin membuat grup target VPC Lattice.

Peran IAM Infrastruktur Amazon ECS

Peran tugas

Kami menyarankan Anda menetapkan peran tugas. Perannya dapat dibedakan dari peran instance Amazon EC2 yang dijalankannya. Menetapkan setiap tugas peran sejalan dengan prinsip akses yang paling tidak istimewa dan memungkinkan kontrol terperinci yang lebih besar atas tindakan dan sumber daya.

Saat Anda menambahkan peran tugas ke definisi tugas, agen kontainer Amazon ECS secara otomatis membuat token dengan ID kredensi unik (misalnya,12345678-90ab-cdef-1234-567890abcdef) untuk tugas tersebut. Token ini dan kredenSIAL peran kemudian ditambahkan ke cache internal agen. Agen mengisi variabel lingkungan AWS_CONTAINER_CREDENTIALS_RELATIVE_URI dalam wadah dengan URI ID kredensi (misalnya,/v2/credentials/12345678-90ab-cdef-1234-567890abcdef).

Anda dapat mengambil kredentif peran sementara secara manual dari dalam wadah dengan menambahkan variabel lingkungan ke alamat IP agen kontainer Amazon ECS dan menjalankan curl perintah pada string yang dihasilkan.

curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

Output yang diharapkan adalah sebagai berikut:

{ "RoleArn": "arn:aws:iam::123456789012:role/SSMTaskRole-SSMFargateTaskIAMRole-DASWWSF2WGD6", "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "Token": "IQoJb3JpZ2luX2VjEEM/Example==", "Expiration": "2021-01-16T00:51:53Z" }

Versi SDK yang lebih baru secara otomatis mengambil kredenSIAL ini dari variabel AWS_CONTAINER_CREDENTIALS_RELATIVE_URI lingkungan saat melakukan panggilan AWS API. AWS Untuk informasi tentang cara memperbarui kredenSIAL, lihat Memperbarui AWS kreden SIAL di RePost.

Outputnya mencakup pasangan kunci akses yang terdiri dari ID kunci akses rahasia dan kunci rahasia yang digunakan aplikasi Anda untuk mengakses AWS sumber daya. Ini juga termasuk token yang digunakan AWS untuk memverifikasi bahwa kredensialnya valid. Secara default, kredenSIAL yang ditetapkan untuk tugas menggunakan peran tugas berlaku selama enam jam. Setelah itu, mereka secara otomatis diputar oleh agen kontainer Amazon ECS.

Peran pelaksanaan tugas

Peran eksekusi tugas digunakan untuk memberikan izin agen kontainer Amazon ECS untuk memanggil tindakan AWS API tertentu atas nama Anda. Misalnya, saat Anda menggunakan AWS Fargate, Fargate memerlukan peran IAM yang memungkinkannya untuk menarik gambar dari Amazon ECR dan menulis log ke CloudWatch Log. Peran IAM juga diperlukan ketika tugas mereferensikan rahasia yang disimpan AWS Secrets Manager, seperti rahasia tarik gambar.

catatan

Jika Anda menarik gambar sebagai pengguna yang diautentikasi, Anda cenderung tidak terpengaruh oleh perubahan yang terjadi pada batas kecepatan tarik Docker Hub. Untuk informasi selengkapnya lihat, O tentikasi registri pribadi untuk instance kontainer.

Dengan menggunakan Amazon ECR dan Amazon ECR Public, Anda dapat menghindari batasan yang diberlakukan oleh Docker. Jika Anda menarik gambar dari Amazon ECR, ini juga membantu mempersingkat waktu tarik jaringan dan mengurangi perubahan transfer data saat lalu lintas meninggalkan VPC Anda.

penting

Saat Anda menggunakan Fargate, Anda harus mengotentikasi ke registri gambar pribadi menggunakan. repositoryCredentials Tidak mungkin menyetel variabel lingkungan agen kontainer Amazon ECS ECS_ENGINE_AUTH_TYPE atau ECS_ENGINE_AUTH_DATA atau memodifikasi ecs.config file untuk tugas yang dihosting di Fargate. Untuk informasi selengkapnya, lihat O tentikasi registri pribadi untuk tugas.

role instans kontainer

Kebijakan AmazonEC2ContainerServiceforEC2Role IAM terkelola mencakup izin berikut. Dengan mengikuti saran keamanan standar untuk memberikan hak istimewa paling rendah, kebijakan terkelola AmazonEC2ContainerServiceforEC2Role dapat digunakan sebagai panduan. Jika salah satu izin yang diberikan dalam kebijakan terkelola tidak diperlukan untuk kasus penggunaan Anda, buat kebijakan kustom dan hanya tambahkan izin yang Anda perlukan.

  • ec2:DescribeTags— (Opsional) Memungkinkan prinsipal untuk menjelaskan tag yang terkait dengan instans Amazon EC2. Izin ini digunakan oleh agen kontainer Amazon ECS untuk mendukung propagasi tag sumber daya. Untuk informasi selengkapnya, lihat Bagaimana sumber daya ditandai.

  • ecs:CreateCluster— (Opsional) Memungkinkan kepala sekolah untuk membuat cluster Amazon ECS. Izin ini digunakan oleh agen kontainer Amazon ECS untuk membuat default cluster, jika belum ada.

  • ecs:DeregisterContainerInstance— (Opsional) Memungkinkan kepala sekolah untuk membatalkan pendaftaran instance container Amazon ECS dari cluster. Agen kontainer Amazon ECS tidak memanggil operasi API ini, tetapi izin ini tetap untuk membantu memastikan kompatibilitas mundur.

  • ecs:DiscoverPollEndpoint— (Wajib) Tindakan ini mengembalikan titik akhir yang digunakan agen kontainer Amazon ECS untuk melakukan polling untuk pembaruan.

  • ecs:Poll— (Diperlukan) Memungkinkan agen kontainer Amazon ECS berkomunikasi dengan bidang kontrol Amazon ECS untuk melaporkan perubahan status tugas.

  • ecs:RegisterContainerInstance— (Diperlukan) Memungkinkan prinsipal untuk mendaftarkan instance kontainer dengan cluster. Izin ini digunakan oleh agen kontainer Amazon ECS untuk mendaftarkan instans Amazon EC2 dengan cluster dan untuk mendukung propagasi tag sumber daya.

  • ecs:StartTelemetrySession— (Opsional) Memungkinkan agen kontainer Amazon ECS berkomunikasi dengan bidang kontrol Amazon ECS untuk melaporkan informasi kesehatan dan metrik untuk setiap wadah dan tugas.

    Meskipun izin ini tidak diperlukan, kami sarankan Anda menambahkannya agar metrik instance kontainer dapat memulai tindakan skala dan juga menerima laporan terkait perintah pemeriksaan kesehatan.

  • ecs:TagResource— (Opsional) Memungkinkan agen kontainer Amazon ECS untuk menandai cluster saat pembuatan dan menandai instans kontainer saat terdaftar ke cluster.

  • ecs:UpdateContainerInstancesState- Mengizinkan kepala sekolah untuk mengubah status instance kontainer Amazon ECS. Izin ini digunakan oleh agen kontainer Amazon ECS untuk pengeringan Instance Spot.

  • ecs:Submit*— (Diperlukan) Ini termasuk tindakan SubmitAttachmentStateChangesSubmitContainerStateChange,, dan SubmitTaskStateChange API. Mereka digunakan oleh agen kontainer Amazon ECS untuk melaporkan perubahan status untuk setiap sumber daya ke bidang kontrol Amazon ECS. Iz SubmitContainerStateChange in tidak lagi digunakan oleh agen kontainer Amazon ECS tetapi tetap untuk membantu memastikan kompatibilitas mundur.

  • ecr:GetAuthorizationToken— (Opsional) Memungkinkan kepala sekolah untuk mengambil token otorisasi. Token otorisasi mewakili kredentif otentikasi IAM Anda dan dapat digunakan untuk mengakses registri Amazon ECR apa pun yang dapat diakses oleh kepala sekolah IAM. Token otorisasi yang diterima berlaku selama 12 jam.

  • ecr:BatchCheckLayerAvailability— (Opsional) Saat gambar kontainer didorong ke repositori pribadi Amazon ECR, setiap lapisan gambar diperiksa untuk memverifikasi apakah sudah didorong. Jika sudah didorong, maka lapisan citra dilewati.

  • ecr:GetDownloadUrlForLayer— (Opsional) Saat gambar kontainer ditarik dari repositori pribadi Amazon ECR, API ini dipanggil sekali untuk setiap lapisan gambar yang belum di-cache.

  • ecr:BatchGetImage— (Opsional) Ketika gambar kontainer ditarik dari repositori pribadi Amazon ECR, API ini dipanggil sekali untuk mengambil manifes gambar.

  • logs:CreateLogStream— (Opsional) Memungkinkan kepala sekolah untuk membuat aliran CloudWatch log log untuk grup log tertentu.

  • logs:PutLogEvents— (Opsional) Memungkinkan kepala sekolah untuk mengunggah kumpulan peristiwa log ke aliran log tertentu.

Service-linked peran

Anda dapat menggunakan peran terkait layanan untuk Amazon ECS untuk memberikan izin layanan Amazon ECS untuk memanggil API layanan lain atas nama Anda. Amazon ECS memerlukan izin untuk membuat dan menghapus antarmuka jaringan, mendaftarkan, dan membatalkan pendaftaran target dengan kelompok target. Ini juga membutuhkan izin yang diperlukan untuk membuat dan menghapus kebijakan penskalaan. Izin ini diberikan melalui peran terkait layanan. Peran ini dibuat atas nama Anda saat pertama kali Anda menggunakan layanan.

catatan

Jika Anda secara tidak sengaja menghapus peran terkait layanan, Anda dapat membuatnya kembali. Untuk petunjuk, lihat Membuat peran terkait layanan.

Rekomendasi peran

Kami menyarankan Anda melakukan hal berikut saat menyiapkan peran dan kebijakan IAM tugas Anda.

Blokir akses ke metadata Amazon EC2

Saat menjalankan tugas di instans Amazon EC2, kami sangat menyarankan Anda memblokir akses kontainer ke Amazon EC2 Instance Metadata Service (IMDS) untuk mencegah kontainer mengakses data tingkat instans sensitif, termasuk kredentif profil instans instans. Jika aplikasi Anda harus memanggil tindakan AWS API, gunakan peran IAM untuk tugas sebagai gantinya.

Untuk mencegah tugas yang berjalan dalam mode jembatan mengakses metadata Amazon EC2, jalankan perintah berikut atau perbarui data pengguna instans. Untuk instruksi selengkapnya tentang memperbarui data pengguna suatu instance, lihat Artikel AWS Dukungan ini. Untuk informasi selengkapnya tentang mode jembatan definisi tugas, lihat mode jaringan definisi tugas.

sudo yum install -y iptables-services; sudo iptables --insert FORWARD 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP

Agar perubahan ini bertahan setelah reboot, jalankan perintah berikut yang khusus untuk Amazon Machine Image (AMI) Anda:

  • Amazon Linux 2

    sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
  • Amazon Linux

    sudo service iptables save

Untuk tugas yang menggunakan mode awsvpc jaringan, atur variabel lingkungan ECS_AWSVPC_BLOCK_IMDS ke true dalam /etc/ecs/ecs.config file.

Anda harus mengatur ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST variabel ke false dalam ecs-agent config file untuk mencegah wadah yang berjalan di dalam host jaringan mengakses metadata Amazon EC2.

Gunakan mode jaringan awsvpc

Gunakan mode jaringan awsvpc jaringan untuk membatasi aliran lalu lintas antara tugas yang berbeda atau antara tugas Anda dan layanan lain yang berjalan dalam Amazon VPC Anda. Ini menambahkan lapisan keamanan tambahan. Mode awsvpc jaringan menyediakan isolasi jaringan tingkat tugas untuk tugas yang berjalan di Amazon EC2. Ini adalah mode default aktif AWS Fargate. ini adalah satu-satunya mode jaringan yang dapat Anda gunakan untuk menetapkan grup keamanan ke tugas.

Gunakan informasi yang terakhir diakses untuk menyempurnakan peran

Sebaiknya hapus tindakan apa pun yang tidak pernah digunakan atau belum digunakan selama beberapa waktu. Ini mencegah akses yang tidak diinginkan terjadi. Untuk melakukan ini, tinjau informasi yang terakhir diakses yang disediakan oleh IAM, lalu hapus tindakan yang tidak pernah digunakan atau belum digunakan baru-baru ini. Anda dapat melakukan ini dengan mengikuti langkah-langkah berikut.

Jalankan perintah berikut untuk menghasilkan laporan yang menunjukkan informasi akses terakhir untuk kebijakan yang direferensikan:

aws iam generate-service-last-accessed-details --arn arn:aws:iam::123456789012:policy/ExamplePolicy1

gunakan JobId yang ada di output untuk menjalankan perintah berikut. Setelah Anda melakukan ini, Anda dapat melihat hasil laporan.

aws iam get-service-last-accessed-details --job-id 98a765b4-3cde-2101-2345-example678f9

Untuk informasi selengkapnya, lihat Memperbaiki izin dalam AWS menggunakan informasi yang terakhir diakses.

Memantau AWS CloudTrail untuk aktivitas yang mencurigakan

Anda dapat memantau aktivitas AWS CloudTrail yang mencurigakan. Sebagian besar panggilan AWS API dicatat AWS CloudTrail sebagai peristiwa. Mereka dianalisis oleh AWS CloudTrail Insights, dan Anda akan diberitahu tentang perilaku mencurigakan apa pun yang terkait dengan panggilan write API. Ini mungkin termasuk lonjakan volume panggilan. Peringatan ini mencakup informasi seperti waktu aktivitas yang tidak biasa terjadi dan ARN identitas teratas yang berkontribusi pada API.

Anda dapat mengidentifikasi tindakan yang dilakukan oleh tugas dengan peran IAM AWS CloudTrail dengan melihat userIdentity properti acara. Dalam contoh berikut, arn termasuk nama peran yang diasumsikans3-write-go-bucket-role,, diikuti dengan nama tugas,7e9894e088ad416eb5cab92afExample.

"userIdentity": { "type": "AssumedRole", "principalId": "AROA36C6WWEJ2YEXAMPLE:7e9894e088ad416eb5cab92afExample", "arn": "arn:aws:sts::123456789012:assumed-role/s3-write-go-bucket-role/7e9894e088ad416eb5cab92afExample", ... }
catatan

Saat tugas yang mengambil peran dijalankan pada instans container Amazon EC2, permintaan dicatat oleh agen kontainer Amazon ECS ke log audit agen yang terletak di alamat dalam format tersebut/var/log/ecs/audit.log.YYYY-MM-DD-HH. Untuk informasi selengkapnya, lihat Log Peran IAM Tugas dan Peristiwa Log ging Wawasan untuk Trail.