Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Tugas peran IAM
Tugas Amazon ECS Anda dapat memiliki peran IAM yang terkait dengannya. Izin yang diberikan dalam peran IAM diasumsikan oleh kontainer yang berjalan dalam tugas. Untuk izin IAM yang dibutuhkan Amazon ECS untuk menarik gambar kontainer dan menjalankan tugas, lihat. Peran IAM eksekusi tugas Amazon ECS
Jika aplikasi kontainer Anda perlu memanggil AWS API, mereka harus menandatangani permintaan AWS API mereka dengan AWS kredensialnya, dan peran IAM tugas menyediakan strategi untuk mengelola kredensyal untuk digunakan aplikasi Anda, mirip dengan cara profil instans Amazon EC2 memberikan kredensyal ke instans Amazon EC2. Alih-alih membuat dan mendistribusikan AWS
kredensyal Anda ke container atau menggunakan peran instans Amazon EC2, Anda dapat mengaitkan peran IAM dengan definisi tugas Amazon ECS atau operasi API. RunTask
Container Anda kemudian dapat menggunakan AWS SDK atau AWS CLI membuat permintaan API ke AWS
layanan resmi.
Berikut ini menjelaskan manfaat menggunakan peran IAM dengan tugas Anda.
-
Isolasi Kredensial: Kontainer hanya dapat mengambil kredensial untuk IAM role yang ditetapkan di dalam ketentuan tugas miliknya; kontainer yang tidak pernah memiliki akses ke kredensial yang dimaksudkan untuk kontainer lain milik tugas lain.
-
Otorisasi: Kontainer tidak sah tidak dapat mengakses kredensial IAM role yang ditetapkan untuk tugas lainnya.
-
Auditabilitas: Akses dan pencatatan peristiwa tersedia CloudTrail untuk memastikan audit retrospektif. Kredensyal tugas memiliki konteks
taskArn
yang dilampirkan ke sesi, sehingga CloudTrail log menunjukkan tugas mana yang menggunakan peran mana.
catatan
Saat Anda menentukan peran IAM untuk tugas, SDK AWS CLI atau lainnya dalam wadah untuk tugas tersebut menggunakan AWS kredensyal yang disediakan oleh peran tugas secara eksklusif dan mereka tidak lagi mewarisi izin IAM apa pun dari Amazon EC2 atau instans eksternal yang dijalankan.
Anda dapat menentukan peran IAM tugas dalam definisi tugas, atau Anda dapat menggunakan taskRoleArn
penggantian saat menjalankan tugas secara manual dengan operasi RunTask
API. Agen Amazon ECS menerima pesan payload untuk memulai tugas dengan bidang tambahan yang berisi kredensyal peran. Agen Amazon ECS menetapkan ID kredensyal tugas unik sebagai token identifikasi dan memperbarui cache kredensyal internalnya sehingga token identifikasi untuk tugas menunjuk ke kredensyal peran yang diterima dalam muatan. Agen Amazon ECS mengisi variabel AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
lingkungan dalam Env
objek (tersedia dengan docker inspect
container_id
perintah) untuk semua kontainer yang termasuk dalam tugas ini dengan URI relatif berikut:. /
credential_provider_version
/credentials?id=task_credential_id
Dari dalam kontainer, Anda dapat melakukan kueri terhadap titik akhir kredensial dengan perintah berikut:
curl 169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
Output:
{
"AccessKeyId": "ACCESS_KEY_ID
",
"Expiration": "EXPIRATION_DATE
",
"RoleArn": "TASK_ROLE_ARN
",
"SecretAccessKey": "SECRET_ACCESS_KEY
",
"Token": "SECURITY_TOKEN_STRING
"
}
Jika instans Amazon EC2 Anda menggunakan setidaknya versi agen 1.11.0
penampung dan versi AWS CLI atau SDK yang didukung, klien SDK akan melihat bahwa AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
variabel tersebut tersedia, dan akan menggunakan kredensyal yang disediakan untuk melakukan panggilan ke API. AWS Untuk informasi selengkapnya, lihat Menggunakan peran IAM tugas di Amazon EC2 atau instans eksternal.
Setiap kali penyedia kredensial digunakan, permintaan dicatat secara lokal pada instans kontainer host di /var/log/ecs/audit.log.
. Untuk informasi selengkapnya, lihat Peran IAM untuk Log Audit Kredensyal Tugas.YYYY
-MM
-DD
-HH
Pertimbangan untuk tugas yang dihosting di instans Amazon EC2
Saat menggunakan peran IAM dengan tugas Anda yang berjalan di instans Amazon EC2, container tidak dicegah untuk mengakses kredensyal yang diberikan ke profil instans Amazon EC2 (melalui server metadata instans Amazon EC2). Sebaiknya Anda membatasi izin dalam peran instance container Anda ke daftar izin minimal yang digunakan dalam kebijakan IAM AmazonEC2ContainerServiceforEC2Role
terkelola. Untuk informasi selengkapnya, lihat Peran IAM instans wadah Amazon ECS.
Berikut ini juga harus dipertimbangkan saat menggunakan peran IAM tugas untuk tugas yang dihosting di instans Amazon EC2.
-
Untuk mencegah kontainer yang dijalankan oleh tugas yang menggunakan mode
awsvpc
jaringan mengakses informasi kredensyal yang diberikan ke profil instans Amazon EC2, sambil tetap mengizinkan izin yang disediakan oleh peran tugas, setelECS_AWSVPC_BLOCK_IMDS
variabel konfigurasi agentrue
ke dalam file konfigurasi agen dan mulai ulang agen. Untuk informasi selengkapnya, lihat Konfigurasi agen kontainer Amazon ECS. -
Untuk mencegah container yang dijalankan oleh tugas yang menggunakan mode
bridge
jaringan mengakses informasi kredensyal yang diberikan ke profil instans Amazon EC2, sambil tetap mengizinkan izin yang disediakan oleh peran tugas, dengan menjalankan perintah iptables berikut di instans Amazon EC2 Anda. Perintah ini tidak memengaruhi kontainer dalam tugas yang menggunakan modehost
atauawsvpc
jaringan. Untuk informasi selengkapnya, lihat Mode jaringan.sudo yum install -y iptables-services; sudo iptables --insert DOCKER-USER 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP
Anda harus menyimpan iptables aturan ini di instans Amazon EC2 Anda agar dapat bertahan dari reboot. Saat menggunakan AMI Amazon ECS yang dioptimalkan, Anda dapat menggunakan perintah berikut. Untuk sistem operasi lain, lihat dokumentasi untuk sistem operasi tersebut.
sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
Menggunakan peran IAM tugas di Amazon EC2 atau instans eksternal
Amazon EC2 atau instans eksternal Anda memerlukan setidaknya versi agen 1.11.0
penampung untuk menggunakan peran IAM tugas; namun, sebaiknya gunakan versi agen penampung terbaru. Untuk informasi tentang memeriksa versi agen Anda dan memperbarui ke versi terbaru, lihat Memperbarui agen kontainer Amazon ECS. Jika Anda menggunakan AMI Amazon ECS yang dioptimalkan, instans Anda memerlukan setidaknya 1.11.0-1
paket. ecs-init
Jika instans Anda menggunakan AMI terbaru yang dioptimalkan Amazon ECS, maka instans tersebut berisi versi yang diperlukan dari agen penampung dan. ecs-init
Untuk informasi selengkapnya, lihat AMI Amazon ECS yang dioptimalkan.
Jika Anda tidak menggunakan AMI Amazon ECS yang dioptimalkan untuk instance container Anda, pastikan untuk menambahkan --net=host
opsi ke docker run perintah Anda yang memulai agen dan variabel konfigurasi agen berikut untuk konfigurasi yang Anda inginkan (untuk informasi selengkapnya, lihat): Konfigurasi agen kontainer Amazon ECS
ECS_ENABLE_TASK_IAM_ROLE=true
-
Menggunakan peran IAM untuk tugas untuk kontainer dengan mode
bridge
dandefault
jaringan. ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
-
Menggunakan peran IAM untuk tugas untuk kontainer dengan mode
host
jaringan. Variabel ini hanya didukung pada agen versi 1.12.0 dan yang lebih baru.
Untuk contoh run command, lihat Memperbarui agen kontainer Amazon ECS secara manual (untuk AMI yang dioptimalkan ECS non-Amazon). Anda juga perlu mengatur perintah jaringan berikut pada instance container Anda sehingga container dalam tugas Anda dapat mengambil AWS kredensialnya:
sudo sysctl -w net.ipv4.conf.all.route_localnet=1
sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679
sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
Anda harus menyimpan aturan iptables ini pada instans kontainer Anda agar dapat bertahan saat booting ulang. Anda dapat menggunakan perintah iptables-save dan iptables-restore untuk menyimpan aturan iptables dan memulihkannya saat booting. Untuk informasi selengkapnya, konsultasikan dokumentasi sistem operasi tertentu Anda.
Membuat peran dan kebijakan IAM untuk tugas Anda
Saat membuat kebijakan IAM untuk tugas yang akan digunakan, kebijakan tersebut harus menyertakan izin yang Anda inginkan untuk diasumsikan oleh container dalam tugas Anda. Anda dapat menggunakan kebijakan AWS terkelola yang ada, atau Anda dapat membuat kebijakan khusus dari awal yang memenuhi kebutuhan spesifik Anda. Untuk informasi selengkapnya, lihat Membuat kebijakan IAM dalam Panduan Pengguna IAM.
penting
Untuk tugas Amazon ECS (untuk semua jenis peluncuran), sebaiknya gunakan kebijakan dan peran IAM untuk tugas Anda. Kredensyal ini memungkinkan tugas Anda untuk membuat permintaan AWS API tanpa memanggil sts:AssumeRole
untuk mengambil peran yang sama yang sudah dikaitkan dengan tugas. Jika tugas Anda mengharuskan peran mengasumsikan dirinya sendiri, Anda harus membuat kebijakan kepercayaan yang secara eksplisit memungkinkan peran itu untuk mengambil alih dirinya sendiri. Untuk informasi selengkapnya, lihat Memodifikasi kebijakan kepercayaan peran dalam Panduan Pengguna IAM.
Setelah kebijakan IAM dibuat, Anda dapat membuat peran IAM yang menyertakan kebijakan yang Anda referensikan dalam definisi tugas Amazon ECS Anda. Anda dapat membuat peran menggunakan kasus penggunaan Elastic Container Service Task di konsol IAM. Kemudian, Anda dapat melampirkan kebijakan IAM spesifik Anda ke peran yang memberikan kontainer dalam tugas Anda izin yang Anda inginkan. Prosedur di bawah menjelaskan cara melakukannya.
Jika Anda memiliki beberapa definisi tugas atau layanan yang memerlukan izin IAM, Anda harus mempertimbangkan untuk membuat peran untuk setiap definisi tugas atau layanan tertentu dengan izin minimum yang diperlukan untuk tugas yang akan dioperasikan sehingga Anda dapat meminimalkan akses yang Anda berikan untuk setiap tugas.
Untuk informasi tentang titik akhir layanan untuk Wilayah Anda, lihat Titik akhir layanan di Panduan Referensi Umum Amazon Web Referensi.
Peran tugas IAM harus memiliki kebijakan kepercayaan yang menentukan layanan. ecs-tasks.amazonaws.com
sts:AssumeRole
Izin tersebut memungkinkan tugas Anda untuk mengambil peran IAM yang berbeda dari yang digunakan instans Amazon EC2. Dengan cara ini, tugas Anda tidak mewarisi peran yang terkait dengan instans Amazon EC2. Berikut ini adalah contoh kebijakan kepercayaan. Ganti pengenal Wilayah dan tentukan nomor AWS akun yang Anda gunakan saat meluncurkan tugas.
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ecs-tasks.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:
us-west-2
:111122223333
:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333
" } } } ] }
penting
Saat membuat peran IAM tugas Anda, Anda disarankan untuk menggunakan aws:SourceAccount
atau kunci aws:SourceArn
kondisi baik dalam hubungan kepercayaan atau kebijakan IAM yang terkait dengan peran untuk cakupan izin lebih lanjut untuk mencegah masalah keamanan wakil yang membingungkan. Menggunakan tombol aws:SourceArn
kondisi untuk menentukan klaster tertentu saat ini tidak didukung, Anda harus menggunakan wildcard untuk menentukan semua cluster. Untuk mempelajari lebih lanjut tentang masalah deputi yang membingungkan dan cara melindungi AWS akun Anda, lihat Masalah wakil yang bingung di Panduan Pengguna IAM.
Prosedur berikut menjelaskan cara membuat kebijakan untuk mengambil objek dari Amazon S3 dengan kebijakan contoh. Ganti semua input pengguna
dengan nilai Anda sendiri.
Prosedur berikut menjelaskan cara membuat peran IAM tugas dengan melampirkan kebijakan IAM yang Anda buat.
Izin IAM diperlukan untuk ECS Exec
Fitur ECS Exec memerlukan peran IAM tugas untuk memberikan kontainer izin yang diperlukan untuk komunikasi antara agen SSM terkelola (execute-command
agen) dan layanan SSM. Anda harus menambahkan izin berikut ke peran IAM tugas dan menyertakan peran IAM tugas dalam definisi tugas Anda. Untuk informasi lebih lanjut, lihat Menambahkan dan Menghapus Kebijakan IAM dalam Panduan Pengguna IAM.
Gunakan kebijakan berikut untuk peran IAM tugas Anda untuk menambahkan izin SSM yang diperlukan.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }
Menentukan peran IAM untuk tugas Anda
Setelah membuat peran dan melampirkan kebijakan ke peran tersebut, Anda dapat menjalankan tugas yang berperan. Anda mempunyai beberapa opsi untuk melakukan ini:
-
Tentukan peran IAM untuk tugas Anda dalam definisi tugas. Anda dapat membuat ketentuan tugas baru atau revisi baru ketentuan tugas yang ada dan tentukan peran yang Anda buat sebelumnya. Jika Anda menggunakan konsol untuk membuat definisi tugas, pilih peran IAM Anda di bidang Peran Tugas. Untuk informasi selengkapnya, lihat Membuat definisi tugas menggunakan konsol.
Jika Anda menggunakan AWS CLI atau SDK, tentukan Nama Sumber Daya Amazon (ARN) peran tugas Anda menggunakan
taskRoleArn
parameter. Untuk informasi selengkapnya, lihat TaskDefinitiondi Referensi API Amazon ECS danParameter ketentuan tugas.catatan
Opsi ini diperlukan jika Anda ingin menggunakan peran tugas IAM dalam layanan Amazon ECS.
-
Tentukan penggantian peran tugas IAM saat menjalankan tugas. Anda dapat menentukan penggantian peran tugas IAM saat menjalankan tugas. Jika Anda menggunakan SDK AWS CLI atau, tentukan ARN peran tugas Anda menggunakan parameter
taskRoleArn
dioverrides
objek JSON. Untuk informasi selengkapnya, tentangoverrides
parameter, lihat RunTaskdan TaskOverridedi Referensi API Amazon ECS. Untuk informasi selengkapnya tentang penggantian menggunakan konsol, lihatJalankan aplikasi sebagai tugas Amazon ECS.
catatan
Selain izin Amazon ECS standar yang diperlukan untuk menjalankan tugas dan layanan, pengguna juga memerlukan iam:PassRole
izin untuk menggunakan peran IAM untuk tugas.