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:AssumeRole
Izin 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.
Prosedur berikut menjelaskan cara membuat IAM peran tugas dengan melampirkan IAM kebijakan yang Anda buat.
Setelah Anda membuat peran, tambahkan izin tambahan ke peran untuk fitur berikut.
Fitur | Izin tambahan |
---|---|
Gunakan ECS Exec |
|
Gunakan EC2 instance (Windows dan Linux) | |
Gunakan instance eksternal | |
Gunakan EC2 instance Windows |
ECSIzin Exec
Fitur ECSExec memerlukan IAM peran tugas untuk memberikan kontainer izin yang diperlukan untuk komunikasi antara SSM agen terkelola (execute-command
agen) 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
dandefault
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
dandefault
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.EnableTaskIAMRole
Menghidupkan 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