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 diperlukan Amazon ECS bergantung pada jenis peluncuran definisi tugas dan fitur yang Anda gunakan. Kami menyarankan Anda membuat peran terpisah dalam tabel alih-alih berbagi peran.

Peran Definisi Saat dibutuhkan Informasi selengkapnya
Peran pelaksanaan tugas Peran ini memungkinkan Amazon ECS untuk menggunakan AWS layanan lain atas nama Anda.

Tugas Anda di-host pada AWS Fargateatau pada instans 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.

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

Tugas Anda di-host di salah satu AWS Fargate atau EC2 instans Amazon dan:

  • menggunakan otentikasi registri pribadi.

  • menggunakan Runtime Monitoring.

  • definisi tugas mereferensikan data sensitif menggunakan rahasia Secrets Manager atau parameter AWS Systems Manager Parameter Store.

Peran IAM eksekusi tugas Amazon ECS
role 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 EC2 instance atau instans eksternal Anda untuk mendaftar dengan cluster. Tugas Anda di-host di EC2 instans Amazon atau instans eksternal. Peran IAM instance wadah Amazon ECS
Peran Amazon ECS Anywhere Peran ini memungkinkan instans eksternal Anda untuk mengakses AWS APIs. Tugas Anda di-host pada instance eksternal. Peran IAM Amazon ECS Anywhere
Peran Amazon ECS CodeDeploy Peran ini memungkinkan CodeDeploy untuk membuat pembaruan pada layanan Anda. Anda menggunakan jenis penyebaran CodeDeploy biru/hijau 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 Fargate Anda EC2 atau meluncurkan tugas Amazon ECS jenis. 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

role tugas

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

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

Anda dapat mengambil kredenal peran sementara secara manual dari dalam wadah dengan menambahkan variabel lingkungan ke alamat IP agen penampung 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 yang lebih baru secara AWS SDKs otomatis mengambil kredensyal ini dari variabel AWS_CONTAINER_CREDENTIALS_RELATIVE_URI lingkungan saat melakukan panggilan API. AWS Untuk informasi tentang cara memperbarui kredensil, lihat Memperbarui kredensil di RePost AWS.

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 AWS digunakan untuk memverifikasi bahwa kredensialnya valid. Secara default, kredenal yang ditetapkan ke tugas menggunakan peran tugas valid 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 penampung Amazon ECS untuk memanggil tindakan AWS API tertentu atas nama Anda. Misalnya, saat Anda menggunakan AWS Fargate, Fargate memerlukan peran IAM yang memungkinkannya menarik gambar dari Amazon ECR dan menulis log ke Log. CloudWatch Peran IAM juga diperlukan saat 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, Autentikasi 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 mengautentikasi ke registri gambar pribadi menggunakan. repositoryCredentials Tidak mungkin menyetel variabel lingkungan agen penampung Amazon ECS ECS_ENGINE_AUTH_TYPE ECS_ENGINE_AUTH_DATA atau memodifikasi ecs.config file untuk tugas yang dihosting di Fargate. Untuk informasi selengkapnya, lihat Autentikasi registri pribadi untuk tugas.

role instans kontainer

Kebijakan IAM AmazonEC2ContainerServiceforEC2Role 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 menggambarkan tag yang terkait dengan EC2 instance Amazon. Izin ini digunakan oleh agen penampung Amazon ECS untuk mendukung propagasi tag sumber daya. Untuk informasi selengkapnya, lihat Bagaimana sumber daya ditandai.

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

  • ecs:DeregisterContainerInstance— (Opsional) Memungkinkan prinsipal untuk membatalkan pendaftaran instans penampung Amazon ECS dari cluster. Agen penampung Amazon ECS tidak memanggil operasi API ini, tetapi izin ini tetap untuk membantu memastikan kompatibilitas mundur.

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

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

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

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

    Meskipun izin ini tidak diperlukan, kami menyarankan Anda menambahkannya untuk mengizinkan metrik instance container untuk memulai tindakan skala dan juga menerima laporan yang terkait dengan perintah pemeriksaan kesehatan.

  • ecs:TagResource— (Opsional) Memungkinkan agen penampung Amazon ECS menandai klaster saat pembuatan dan menandai instance kontainer saat terdaftar ke klaster.

  • ecs:UpdateContainerInstancesState— Memungkinkan kepala sekolah untuk memodifikasi status instans penampung Amazon ECS. Izin ini digunakan oleh agen kontainer Amazon ECS untuk pengeringan Instans Spot.

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

  • ecr:GetAuthorizationToken— (Opsional) Memungkinkan kepala sekolah untuk mengambil token otorisasi. Token otorisasi mewakili kredensi otentikasi IAM Anda dan dapat digunakan untuk mengakses registri ECR Amazon apa pun yang dapat diakses oleh prinsipal 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) Ketika gambar kontainer ditarik dari repositori pribadi Amazon ECR, API ini dipanggil sekali untuk setiap lapisan gambar yang belum di-cache.

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

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

  • logs:PutLogEvents— (Opsional) Memungkinkan prinsipal untuk mengunggah sekumpulan peristiwa log ke aliran log tertentu.

Peran terkait layanan

Anda dapat menggunakan peran terkait layanan untuk Amazon ECS untuk memberikan izin layanan Amazon ECS untuk memanggil layanan APIs lain atas nama Anda. Amazon ECS memerlukan izin untuk membuat dan menghapus antarmuka jaringan, mendaftar, dan membatalkan pendaftaran target dengan grup 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 petunjuknya, lihat Membuat peran terkait layanan.

Rekomendasi peran

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

Blokir akses ke EC2 metadata Amazon

Saat menjalankan tugas di EC2 instans Amazon, kami sangat menyarankan Anda memblokir akses ke EC2 metadata Amazon untuk mencegah container mewarisi peran yang ditetapkan ke instance tersebut. Jika aplikasi Anda harus memanggil tindakan AWS API, gunakan peran IAM untuk tugas sebagai gantinya.

Untuk mencegah tugas yang berjalan dalam mode bridge mengakses EC2 metadata Amazon, jalankan perintah berikut atau perbarui data pengguna instans. Untuk instruksi selengkapnya tentang memperbarui data pengguna sebuah instans, lihat Artikel AWS Support 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 tetap ada 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 kontainer yang berjalan di dalam host jaringan mengakses EC2 metadata Amazon.

Gunakan mode awsvpc jaringan

Gunakan mode jaringan awsvpc jaringan untuk membatasi arus lalu lintas antara tugas yang berbeda atau antara tugas Anda dan layanan lain yang berjalan dalam VPC Amazon 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 AWS Fargate aktif. itu satu-satunya mode jaringan yang dapat Anda gunakan untuk menetapkan grup keamanan untuk tugas.

Gunakan informasi yang terakhir diakses untuk menyempurnakan peran

Kami menyarankan Anda menghapus 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 terakhir yang 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 menampilkan 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 AWS menggunakan informasi yang terakhir diakses.

Pantau AWS CloudTrail aktivitas mencurigakan

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

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 diasumsikan,s3-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 di instans EC2 penampung Amazon, permintaan dicatat oleh agen penampung Amazon ECS ke log audit agen yang terletak di alamat dalam format. /var/log/ecs/audit.log.YYYY-MM-DD-HH Untuk informasi selengkapnya, lihat Log Peran IAM Tugas dan Logging Insights Events for Trails.