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:
Tugas Anda di-host di salah satu AWS Fargate atau EC2 instans Amazon dan:
|
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. |
|
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
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 membuatdefault
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 tindakanSubmitAttachmentStateChanges
SubmitContainerStateChange
,, danSubmitTaskStateChange
API. Mereka digunakan oleh agen penampung Amazon ECS untuk melaporkan perubahan status untuk setiap sumber daya ke bidang kontrol Amazon ECS.SubmitContainerStateChange
Izin 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
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.