IAMPeran ECS tugas Amazon - Amazon Elastic Container Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

IAMPeran ECS tugas Amazon

ECSTugas Amazon Anda dapat memiliki IAM peran yang terkait dengannya. Izin yang diberikan dalam IAM peran 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 IAM izin yang ECS dibutuhkan Amazon untuk menarik gambar kontainer dan menjalankan tugas, lihatIAMPeran eksekusi ECS tugas Amazon.

Berikut ini adalah manfaat menggunakan peran tugas:

  • Credential Isolation: Container hanya dapat mengambil kredensi untuk IAM peran yang didefinisikan dalam definisi tugas yang dimilikinya; sebuah wadah tidak pernah memiliki akses ke kredensil yang ditujukan untuk wadah lain yang menjadi milik tugas lain.

  • Otorisasi: Kontainer yang tidak sah tidak dapat mengakses kredensi IAM peran yang ditentukan untuk tugas lain.

  • Audit: Akses dan pencatatan peristiwa tersedia CloudTrail untuk memastikan audit retrospektif. Kredensi tugas memiliki konteks taskArn yang dilampirkan ke sesi, jadi CloudTrail log menunjukkan tugas mana yang menggunakan peran mana.

catatan

Saat Anda menentukan IAM peran untuk tugas, peran AWS CLI atau lainnya SDKs dalam wadah untuk tugas tersebut menggunakan AWS kredensil yang disediakan oleh peran tugas secara eksklusif dan peran tersebut tidak lagi mewarisi IAM izin apa pun dari Amazon EC2 atau instans eksternal tempat mereka berjalan.

Membuat IAM peran tugas

Saat membuat IAM kebijakan 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 IAM kebijakan di Panduan IAM Pengguna.

penting

Untuk ECS tugas Amazon (untuk semua jenis peluncuran), sebaiknya gunakan IAM kebijakan dan peran untuk tugas Anda. Kredensi ini memungkinkan tugas Anda untuk membuat AWS API permintaan tanpa menelepon 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 di Panduan IAM Pengguna.

Setelah IAM kebijakan dibuat, Anda dapat membuat IAM peran yang menyertakan kebijakan yang Anda referensikan dalam definisi ECS tugas Amazon. Anda dapat membuat peran menggunakan kasus penggunaan Elastic Container Service Task di IAM konsol. Kemudian, Anda dapat melampirkan IAM kebijakan 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 IAM izin, 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 IAM tugas harus memiliki kebijakan kepercayaan yang menentukan ecs-tasks.amazonaws.com layanan. sts:AssumeRoleIzin tersebut memungkinkan tugas Anda untuk mengambil IAM peran yang berbeda dari yang digunakan EC2 instans Amazon. Dengan cara ini, tugas Anda tidak mewarisi peran yang terkait dengan EC2 instans Amazon. 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 IAM peran tugas, Anda disarankan untuk menggunakan aws:SourceAccount atau kunci aws:SourceArn kondisi baik dalam hubungan kepercayaan atau IAM kebijakan yang terkait dengan peran untuk cakupan izin lebih lanjut untuk mencegah masalah keamanan deputi 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 wakil yang membingungkan dan cara melindungi AWS akun Anda, lihat Masalah wakil yang bingung di Panduan IAM Pengguna.

Prosedur berikut menjelaskan cara membuat kebijakan untuk mengambil objek dari Amazon S3 dengan kebijakan contoh. Ganti semua user input dengan nilai-nilai Anda sendiri.

AWS Management Console
Untuk menggunakan editor JSON kebijakan untuk membuat kebijakan
  1. Masuk ke AWS Management Console dan buka IAM konsol 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 JSONopsi.

  5. Masukkan dokumen JSON kebijakan 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 Berikutnya.

    catatan

    Anda dapat beralih antara opsi Visual dan JSONeditor kapan saja. Namun, jika Anda membuat perubahan atau memilih Berikutnya di editor Visual, IAM mungkin merestrukturisasi kebijakan Anda untuk mengoptimalkannya untuk editor visual. Untuk informasi selengkapnya, lihat Restrukturisasi kebijakan di IAMPanduan Pengguna.

  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 user input dengan nilai-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 IAM kebijakan menggunakan file dokumen JSON kebijakan.

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

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

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

  2. Di panel navigasi IAM konsol, pilih Peran, 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 Berikutnya.

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

  7. Pilih Berikutnya.

  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 user input dengan nilai-nilai Anda sendiri.

  1. Buat file bernama ecs-tasks-trust-policy.json yang berisi kebijakan kepercayaan yang akan digunakan untuk IAM peran 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 IAM peran 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 IAM kebijakan ARN yang Anda buat menggunakan perintah berikut. Ganti taskRolePolicy dengan nama kebijakan yang Anda buat.

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

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

Setelah Anda membuat peran, tambahkan izin tambahan ke peran untuk fitur berikut.

Fitur Izin tambahan

Gunakan ECS Exec

ECSIzin Exec

Gunakan EC2 instance (Windows dan Linux)

Amazon membuat EC2 instans konfigurasi tambahan

Gunakan instance eksternal

Konfigurasi tambahan contoh eksternal

Gunakan EC2 instance Windows

Konfigurasi tambahan instans Amazon EC2 Windows

ECSIzin Exec

Fitur ECSExec memerlukan IAM peran tugas untuk memberikan kontainer izin yang diperlukan untuk komunikasi antara SSM agen terkelola (execute-commandagen) dan layanan. SSM Anda harus menambahkan izin berikut ke peran tugas dan menyertakan IAM IAM peran tugas dalam definisi tugas Anda. Untuk informasi selengkapnya, lihat Menambahkan dan Menghapus IAM Kebijakan di Panduan IAM Pengguna.

Gunakan kebijakan berikut untuk IAM peran tugas Anda untuk menambahkan SSM izin yang diperlukan.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }

Amazon membuat EC2 instans konfigurasi tambahan

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

EC2Instans Amazon 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 ECS penampung Amazon. Jika Anda menggunakan Amazon ECS -optimizedAMI, instans Anda memerlukan setidaknya 1.11.0-1 ecs-init paket. Jika instans Anda menggunakan Amazon terbaru yang ECS dioptimalkanAMI, maka instans tersebut berisi versi yang diperlukan dari agen penampung dan. ecs-init Untuk informasi selengkapnya, lihat Linux yang ECS dioptimalkan Amazon AMIs.

Jika Anda tidak menggunakan Amazon ECS -optimized AMI untuk instance container Anda, tambahkan --net=host opsi ke docker run perintah Anda yang memulai agen dan variabel konfigurasi agen berikut untuk konfigurasi yang Anda inginkan (untuk informasi selengkapnya, lihatKonfigurasi agen ECS kontainer Amazon):

ECS_ENABLE_TASK_IAM_ROLE=true

Menggunakan IAM peran untuk tugas untuk wadah dengan mode bridge dan default jaringan.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

Menggunakan IAM peran untuk tugas untuk wadah 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 ECS penampung Amazon secara manual (untuk non-Amazon ECS AMIs -Optimized). 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 kontainer yang dijalankan oleh tugas yang menggunakan mode awsvpc jaringan mengakses informasi kredensi yang diberikan ke profil EC2 instans Amazon, sambil tetap mengizinkan izin yang disediakan oleh peran tugas, setel variabel konfigurasi ECS_AWSVPC_BLOCK_IMDS agen ke true dalam file konfigurasi agen dan mulai ulang agen. Untuk informasi selengkapnya, lihat Konfigurasi agen ECS kontainer Amazon.

Untuk mencegah container yang dijalankan oleh tugas yang menggunakan mode bridge jaringan mengakses informasi kredensi yang diberikan ke profil EC2 instans Amazon, sambil tetap mengizinkan izin yang disediakan oleh peran tugas, dengan menjalankan iptables perintah berikut di instans Amazon Anda. EC2 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 EC2 instance Amazon Anda agar dapat bertahan dari reboot. Saat menggunakan Amazon ECS -optimizedAMI, 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 contoh eksternal

Instance eksternal Anda memerlukan setidaknya versi 1.11.0 agen kontainer untuk menggunakan IAM peran tugas; namun, sebaiknya gunakan versi agen kontainer terbaru. Untuk informasi tentang memeriksa versi agen Anda dan memperbarui ke versi terbaru, lihat Memperbarui agen ECS penampung Amazon. Jika Anda menggunakan Amazon yang ECS dioptimalkanAMI, instans Anda membutuhkan setidaknya 1.11.0-1 ecs-init paket. Jika instans Anda menggunakan Amazon terbaru yang ECS dioptimalkanAMI, maka instans tersebut berisi versi yang diperlukan dari agen penampung dan. ecs-init Untuk informasi selengkapnya, lihat Linux yang ECS dioptimalkan Amazon AMIs.

Jika Anda tidak menggunakan Amazon ECS -optimized AMI untuk instance container Anda, tambahkan --net=host opsi ke docker run perintah Anda yang memulai agen dan variabel konfigurasi agen berikut untuk konfigurasi yang Anda inginkan (untuk informasi selengkapnya, lihatKonfigurasi agen ECS kontainer Amazon):

ECS_ENABLE_TASK_IAM_ROLE=true

Menggunakan IAM peran untuk tugas untuk wadah dengan mode bridge dan default jaringan.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

Menggunakan IAM peran untuk tugas untuk wadah 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 ECS penampung Amazon secara manual (untuk non-Amazon ECS AMIs -Optimized). 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.

Konfigurasi tambahan instans Amazon EC2 Windows

penting

Ini hanya berlaku untuk wadah Windows EC2 yang menggunakan peran tugas.

Peran tugas dengan fitur Windows memerlukan konfigurasi tambahan aktifEC2.

  • Ketika Anda meluncurkan instans kontainer, Anda harus mengatur opsi -EnableTaskIAMRole skrip data pengguna instans kontainer. EnableTaskIAMRoleMenghidupkan fitur IAM Peran tugas untuk tugas. Sebagai contoh:

    <powershell> Import-Module ECSTools Initialize-ECSAgent -Cluster 'windows' -EnableTaskIAMRole </powershell>
  • Anda harus bootstrap kontainer Anda dengan perintah jaringan yang disediakan di Skrip bootstrap ECS wadah Amazon.

  • Anda harus membuat IAM peran dan kebijakan untuk tugas Anda. Untuk informasi selengkapnya, lihat Membuat IAM peran tugas.

  • IAMPeran untuk penyedia kredensi tugas menggunakan port 80 pada instance container. Oleh karena itu, jika Anda mengonfigurasi IAM peran untuk tugas pada instance penampung Anda, kontainer Anda tidak dapat menggunakan port 80 untuk port host di pemetaan port apa pun. Untuk mengekspos kontainer Anda pada port 80, kami sarankan mengonfigurasi layanan untuk kontainer yang menggunakan penyeimbangan beban. Anda dapat menggunakan port 80 pada penyeimbang beban. Dengan demikian, lalu lintas dapat diarahkan ke port host lain pada instans kontainer Anda. Untuk informasi selengkapnya, lihat Gunakan load balancing untuk mendistribusikan lalu lintas ECS layanan Amazon.

  • Jika instance Windows Anda dimulai ulang, Anda harus menghapus antarmuka proxy dan menginisialisasi agen ECS penampung Amazon lagi untuk mengembalikan proxy kredensi.

Skrip bootstrap ECS wadah Amazon

Sebelum kontainer dapat mengakses proxy kredensial pada instans kontainer untuk mendapatkan kredensial, kontainer harus di-bootstrap dengan perintah jaringan yang diperlukan. Skrip contoh kode berikut harus dijalankan pada kontainer Anda ketika dimulai.

catatan

Anda tidak perlu menjalankan skrip ini saat Anda menggunakan mode jaringan awsvpc pada Windows.

Jika Anda menjalankan wadah Windows yang menyertakan Powershell, maka gunakan skrip berikut:

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. $gateway = (Get-NetRoute | Where { $_.DestinationPrefix -eq '0.0.0.0/0' } | Sort-Object RouteMetric | Select NextHop).NextHop $ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # credentials API New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # metadata API

Jika Anda menjalankan wadah Windows yang hanya memiliki shell Command, maka gunakan skrip berikut:

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. for /f "tokens=1" %i in ('netsh interface ipv4 show interfaces ^| findstr /x /r ".*vEthernet.*"') do set interface=%i for /f "tokens=3" %i in ('netsh interface ipv4 show addresses %interface% ^| findstr /x /r ".*Default.Gateway.*"') do set gateway=%i netsh interface ipv4 add route prefix=169.254.170.2/32 interface="%interface%" nexthop="%gateway%" store=active # credentials API netsh interface ipv4 add route prefix=169.254.169.254/32 interface="%interface%" nexthop="%gateway%" store=active # metadata API