Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Praktik terbaik untuk IAM peran di Amazon ECS
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 menetapkan IAM peran untuk tugas, Anda harus menggunakan kebijakan kepercayaan berikut sehingga setiap tugas Anda dapat mengambil IAM peran yang berbeda dari yang digunakan EC2 instans Anda. Dengan cara ini, tugas Anda tidak mewarisi peran EC2 instance Anda.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ecs-tasks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
Saat Anda menambahkan peran tugas ke definisi tugas, agen ECS penampung Amazon secara otomatis membuat token dengan ID kredenal 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 ID kredenal (misalnya,/v2/credentials/12345678-90ab-cdef-1234-567890abcdef
). URI
Anda dapat mengambil kredenal peran sementara secara manual dari dalam wadah dengan menambahkan variabel lingkungan ke alamat IP agen ECS penampung Amazon 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 dari secara AWS SDKs otomatis mengambil kredensil ini dari variabel AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
lingkungan saat melakukan panggilan. AWS API Untuk selengkapnya tentang cara memperbarui kredensyal, lihat Memperbarui kredensyal di. 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 ECS kontainer Amazon.
Peran pelaksanaan tugas
Peran eksekusi tugas digunakan untuk memberikan izin agen ECS penampung Amazon untuk memanggil AWS API tindakan tertentu atas nama Anda. Misalnya, saat Anda menggunakan AWS Fargate, Fargate memerlukan IAM peran yang memungkinkannya menarik gambar dari Amazon ECR dan menulis log ke CloudWatch Log. IAMPeran 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 AmazonECR, ini juga membantu mempersingkat waktu tarik jaringan dan mengurangi perubahan transfer data saat lalu lintas meninggalkan AndaVPC.
penting
Saat Anda menggunakan Fargate, Anda harus mengautentikasi ke registri gambar pribadi menggunakan. repositoryCredentials
Tidak mungkin menyetel variabel lingkungan agen ECS penampung Amazon ECS_ENGINE_AUTH_TYPE
atau 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 terkelola AmazonEC2ContainerServiceforEC2Role
mencakup izin-izin berikut ini. 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 ECS penampung Amazon untuk mendukung propagasi tag sumber daya. Untuk informasi selengkapnya, lihat Bagaimana sumber daya ditandai. -
ecs:CreateCluster
— (Opsional) Memungkinkan prinsipal untuk membuat ECS cluster Amazon. Izin ini digunakan oleh agen ECS penampung Amazon untuk membuatdefault
klaster, jika belum ada. -
ecs:DeregisterContainerInstance
— (Opsional) Memungkinkan prinsipal untuk membatalkan pendaftaran instance ECS penampung Amazon dari sebuah cluster. Agen ECS penampung Amazon tidak memanggil API operasi ini, tetapi izin ini tetap untuk membantu memastikan kompatibilitas mundur. -
ecs:DiscoverPollEndpoint
— (Diperlukan) Tindakan ini mengembalikan titik akhir yang digunakan agen ECS penampung Amazon untuk melakukan polling untuk pembaruan. -
ecs:Poll
— (Wajib) Memungkinkan agen ECS penampung Amazon berkomunikasi dengan bidang ECS kontrol Amazon untuk melaporkan perubahan status tugas. -
ecs:RegisterContainerInstance
— (Wajib) Memungkinkan prinsipal untuk mendaftarkan instance kontainer dengan cluster. Izin ini digunakan oleh agen ECS penampung Amazon untuk mendaftarkan EC2 instance Amazon dengan klaster dan untuk mendukung propagasi tag sumber daya. -
ecs:StartTelemetrySession
— (Opsional) Memungkinkan agen ECS kontainer Amazon berkomunikasi dengan pesawat ECS kontrol Amazon 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 ECS penampung Amazon menandai klaster saat pembuatan dan menandai instance kontainer saat terdaftar ke klaster. -
ecs:UpdateContainerInstancesState
— Memungkinkan kepala sekolah untuk memodifikasi status instance ECS penampung Amazon. Izin ini digunakan oleh agen ECS penampung Amazon untuk pengeringan Instans Spot. -
ecs:Submit*
— (Wajib) Ini termasukSubmitAttachmentStateChanges
,SubmitContainerStateChange
, danSubmitTaskStateChange
API tindakan. Mereka digunakan oleh agen ECS penampung Amazon untuk melaporkan perubahan status untuk setiap sumber daya ke bidang ECS kontrol Amazon.SubmitContainerStateChange
Izin tersebut tidak lagi digunakan oleh agen ECS penampung Amazon tetapi tetap untuk membantu memastikan kompatibilitas mundur. -
ecr:GetAuthorizationToken
— (Opsional) Memungkinkan kepala sekolah untuk mengambil token otorisasi. Token otorisasi mewakili kredensi IAM otentikasi Anda dan dapat digunakan untuk mengakses ECR registri Amazon apa pun yang dapat diakses oleh IAM prinsipal. Token otorisasi yang diterima berlaku selama 12 jam. -
ecr:BatchCheckLayerAvailability
— (Opsional) Saat gambar kontainer didorong ke repositori ECR pribadi Amazon, 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 ECR pribadi Amazon, ini API dipanggil sekali untuk setiap lapisan gambar yang belum di-cache. -
ecr:BatchGetImage
— (Opsional) Ketika gambar kontainer ditarik dari repositori ECR pribadi Amazon, ini API 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.
Kebijakan berikut berisi izin yang diperlukan.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:DiscoverPollEndpoint", "ecs:Poll", "ecs:RegisterContainerInstance", "ecs:UpdateContainerInstancesState", "ecs:Submit*" ], "Resource": "*" } ] }
Peran terkait layanan
Anda dapat menggunakan peran terkait layanan ECS untuk Amazon untuk memberikan izin ECS layanan Amazon untuk memanggil layanan lain APIs 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 IAM peran dan kebijakan 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 AWS API tindakan, gunakan IAM peran 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 di 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 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 olehIAM, 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 AWS API panggilan dicatat AWS CloudTrail sebagai acara. Mereka dianalisis oleh AWS CloudTrail Wawasan, dan Anda diberitahu tentang perilaku mencurigakan yang terkait dengan panggilan. write
API Ini mungkin termasuk lonjakan volume panggilan. Peringatan ini mencakup informasi seperti waktu aktivitas yang tidak biasa terjadi dan identitas teratas ARN yang berkontribusi padaAPIs.
Anda dapat mengidentifikasi tindakan yang dilakukan oleh tugas dengan IAM peran 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 instance EC2 penampung Amazon, permintaan dicatat oleh agen ECS penampung Amazon ke log audit agen yang terletak di alamat dalam /var/log/ecs/audit.log.YYYY-MM-DD-HH
format. Untuk informasi selengkapnya, lihat IAMPeran Tugas Log dan Logging Insights Event for Trails.