Peran tugas 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.

Peran tugas Amazon ECS

Tugas Amazon ECS Anda dapat memiliki peran IAM yang terkait dengannya. Izin yang diberikan dalam peran IAM diasumsikan oleh kontainer yang berjalan dalam tugas. Peran ini memungkinkan kode aplikasi Anda (pada wadah) untuk menggunakan AWS layanan lain. Peran tugas diperlukan saat aplikasi Anda mengakses AWS layanan lain, seperti Amazon S3. Untuk izin IAM yang dibutuhkan Amazon ECS untuk menarik gambar kontainer dan menjalankan tugas, lihat. Peran IAM eksekusi tugas Amazon ECS

Berikut ini adalah manfaat menggunakan peran tugas:

  • 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.

  • Audit: 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.

Buat peran dan kebijakan IAM

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

Peran tugas IAM harus memiliki kebijakan kepercayaan yang menentukan layanan. ecs-tasks.amazonaws.com sts:AssumeRoleIzin 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.

AWS Management Console
Cara menggunakan editor kebijakan JSON untuk membuat kebijakan
  1. Masuk ke AWS Management Console dan buka konsol IAM di https://console.aws.amazon.com/iam/.

  2. Pada panel navigasi di sebelah kiri, pilih Kebijakan.

    Jika ini pertama kalinya Anda memilih Kebijakan, akan muncul halaman Selamat Datang di Kebijakan Terkelola. Pilih Memulai.

  3. Di bagian atas halaman, pilih Buat kebijakan.

  4. Di bagian Editor kebijakan, pilih opsi JSON.

  5. Masukkan dokumen kebijakan JSON berikut:

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:region:123456789012:*" }, "StringEquals":{ "aws:SourceAccount":"123456789012" } } } ] }
  6. Pilih Selanjutnya.

    catatan

    Anda dapat beralih antara opsi editor Visual dan JSON kapan saja. Namun, jika Anda melakukan perubahan atau memilih Berikutnya di editor Visual, IAM dapat merestrukturisasi kebijakan Anda untuk mengoptimalkannya bagi editor visual. Untuk informasi selengkapnya, lihat Restrukturisasi kebijakan dalam Panduan Pengguna IAM.

  7. Pada halaman Tinjau dan buat, masukkan Nama kebijakan dan Deskripsi (opsional) untuk kebijakan yang Anda buat. Tinjau Izin yang ditentukan dalam kebijakan ini untuk melihat izin yang diberikan oleh kebijakan Anda.

  8. Pilih Buat kebijakan untuk menyimpan kebijakan baru Anda.

AWS CLI

Ganti semua input pengguna dengan nilai Anda sendiri.

  1. Buat file bernama s3-policy.json dengan konten berikut.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:region:123456789012:*" }, "StringEquals":{ "aws:SourceAccount":"123456789012" } } } ] }
  2. Gunakan perintah berikut untuk membuat kebijakan IAM menggunakan file dokumen kebijakan JSON.

    aws iam create-policy \ --policy-name taskRolePolicy \ --policy-document file://s3-policy.json

Prosedur berikut menjelaskan cara membuat peran IAM tugas dengan melampirkan kebijakan IAM yang Anda buat.

AWS Management Console
Untuk membuat peran layanan untuk Elastic Container Service (konsol IAM)
  1. Masuk ke AWS Management Console dan buka konsol IAM di https://console.aws.amazon.com/iam/.

  2. Di panel navigasi konsol IAM, pilih Peran, dan lalu pilih Buat peran.

  3. Untuk jenis entitas Tepercaya, pilih Layanan AWS.

  4. Untuk Service atau use case, pilih Elastic Container Service, lalu pilih kasus penggunaan Elastic Container Service Task.

  5. Pilih Selanjutnya.

  6. Untuk Menambahkan izin, cari dan pilih kebijakan yang Anda buat.

  7. Pilih Selanjutnya.

  8. Untuk Nama peran, masukkan nama peran Anda. Untuk contoh ini, ketik AmazonECSTaskS3BucketRole untuk memberi nama peran.

  9. Tinjau peran lalu pilih Buat peran.

AWS CLI

Ganti semua input pengguna dengan nilai Anda sendiri.

  1. Buat file bernama ecs-tasks-trust-policy.json yang berisi kebijakan kepercayaan yang akan digunakan untuk peran IAM tugas. File harus berisi yang berikut ini. 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" } } } ] }
  2. Buat peran IAM bernama ecsTaskRole menggunakan kebijakan kepercayaan yang dibuat pada langkah sebelumnya.

    aws iam create-role \ --role-name ecsTaskRole \ --assume-role-policy-document file://ecs-tasks-trust-policy.json
  3. Ambil ARN dari kebijakan IAM yang Anda buat menggunakan perintah berikut. Ganti taskRolePolicydengan nama kebijakan yang Anda buat.

    aws iam list-policies --scope Local --query 'Policies[?PolicyName==`taskRolePolicy`].Arn'
  4. Lampirkan kebijakan IAM yang Anda buat ke ecsTaskRole peran tersebut. Ganti policy-arn dengan ARN dari kebijakan yang Anda buat.

    aws iam attach-role-policy \ --role-name ecsTaskRole \ --policy-arn arn:aws:iam:111122223333:aws:policy/taskRolePolicy

Izin diperlukan untuk ECS Exec

Fitur ECS Exec memerlukan peran IAM tugas untuk memberikan kontainer izin yang diperlukan untuk komunikasi antara agen SSM terkelola (execute-commandagen) 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": "*" } ] }

Amazon ECS Amazon EC2 memasang konfigurasi tambahan

Sebaiknya Anda membatasi izin dalam peran instance container Anda ke daftar izin minimal yang digunakan dalam kebijakan IAM AmazonEC2ContainerServiceforEC2Role terkelola.

Instans Amazon EC2 Anda memerlukan setidaknya versi agen 1.11.0 penampung untuk menggunakan peran 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 Linux Amazon ECS yang dioptimalkan.

Jika Anda tidak menggunakan AMI Amazon ECS yang dioptimalkan untuk instance container Anda, tambahkan --net=host opsi ke docker run perintah 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 dan default 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 penampung 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.

Untuk mencegah container yang dijalankan oleh tugas yang menggunakan mode awsvpc jaringan mengakses informasi kredensi yang diberikan ke profil instans Amazon EC2, sambil tetap mengizinkan izin yang disediakan oleh peran tugas, setel ECS_AWSVPC_BLOCK_IMDS variabel konfigurasi agen true ke dalam file konfigurasi agen dan restart 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 pada instans Amazon EC2 Anda. Perintah ini tidak memengaruhi kontainer dalam tugas yang menggunakan mode host atau awsvpc 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

Konfigurasi tambahan instans eksternal Amazon ECS

Instance eksternal Anda memerlukan setidaknya versi 1.11.0 agen kontainer untuk menggunakan peran IAM tugas; namun, sebaiknya gunakan versi agen kontainer 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 Linux Amazon ECS yang dioptimalkan.

Jika Anda tidak menggunakan AMI Amazon ECS yang dioptimalkan untuk instance container Anda, tambahkan --net=host opsi ke docker run perintah 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 dan default 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 penampung 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.