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:
-
Isolasi Kredenial: Kontainer hanya dapat mengambil kredenial untuk IAM peran yang ditentukan dalam definisi tugas miliknya; kontainer tidak pernah memiliki akses ke kredenial yang ditujukan untuk kontainer lain milik tugas lain.
-
Otorisasi: Kontainer tidak sah tidak dapat mengakses kredensi IAM peran yang ditentukan untuk tugas lainnya.
-
Audit: Akses dan pencatatan kejadian tersedia melalui CloudTrail untuk memastikan audit retrospektif. Kredenal tugas memiliki konteks
taskArn
yang dilampirkan ke sesi, sehingga CloudTrail catatan menunjukkan tugas yang menggunakan peran yang dimaksud.
catatan
Saat Anda menentukan IAM peran untuk tugas, AWS CLI atau yang lain SDKs dalam kontainer untuk tugas tersebut menggunakan AWS kredenial yang disediakan oleh peran tugas secara eksklusif dan mereka tidak lagi mewarisi IAM izin apa pun dari Amazon EC2 atau instans eksternal yang sedang dijalankan.
Membuat IAM peran tugas
Saat membuat IAM kebijakan untuk tugas Anda untuk menggunakan, kebijakan tersebut harus menyertakan izin yang ingin Anda tanggung oleh kontainer 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. Kredensil 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 Memperbarui 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 Tugas Kontainer Elastis di IAM konsol. Kemudian, Anda dapat melampirkan IAM kebijakan spesifik Anda ke dalam peran tersebut, yang akan memberikan izin sesuai keinginan Anda kepada kontainer dalam tugas Anda. Prosedur di bawah menjelaskan cara melakukannya.
Jika Anda memiliki beberapa ketentuan tugas atau layanan yang memerlukan IAM izin, Anda harus mempertimbangkan untuk membuat peran untuk setiap ketentuan tugas tertentu atau layanan dengan izin minimum yang diperlukan untuk tugas untuk beroperasi 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. 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 milik 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 instans 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 ketentuan tugas Anda. Untuk informasi selengkapnya, lihat Menambahkan dan Menghapus IAM Kebijakan di Panduan IAM Pengguna.
Gunakan kebijakan berikut untuk IAM peran tugas Anda guna 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
Kami merekomendasikan Anda untuk membatasi izin dalam peran instans kontainer Anda hingga daftar izin minimal yang digunakan dalam kebijakan AmazonEC2ContainerServiceforEC2Role
terkelolaIAM.
EC2Instans Amazon Anda memerlukan setidaknya agen kontainer versi 1.11.0
agen kontainer untuk menggunakan tugas role; 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 ECS -optimizedAMI, instans Anda memerlukan setidaknya 1.11.0-1
ecs-init
paket. Jika instans Anda menggunakan Amazon ECS -optimalkan terbaruAMI, maka instans kontainer berisi versi agen kontainer yang diperlukan. 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 kontainer dengan mode
bridge
dandefault
jaringan. ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
-
Menggunakan IAM peran 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 ECS penampung Amazon secara manual (untuk non-Amazon ECS AMIs -Optimized). Anda juga akan perlu mengatur perintah jaringan berikut pada instans kontainer Anda sehingga kontainer 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 dari mengakses informasi kredensi yang diberikan ke profil EC2 instans Amazon, ketika masih mengizinkan izin yang disediakan oleh peran tugas, atur 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 kontainer yang dijalankan oleh tugas yang menggunakan mode bridge
jaringan dari mengakses informasi kredensi yang diberikan ke profil EC2 instans Amazon, ketika masih mengizinkan izin yang disediakan oleh peran tugas, dengan menjalankan iptables perintah berikut di instans Amazon Anda. EC2 Perintah ini tidak memengaruhi kontainer dalam tugas-tugas yang menggunakan mode awsvpc
jaringan host
atau. 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 instans Amazon Anda untuk itu untuk bertahan saat booting ulang. Saat menggunakan Amazon ECS -optimizedAMI, Anda dapat menggunakan perintah berikut. Untuk sistem operasi lain, konsultasikan dokumentasi untuk sistem operasi tersebut.
sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
Konfigurasi tambahan instans eksternal
Instans eksternal Anda memerlukan setidaknya agen kontainer versi 1.11.0
agen kontainer untuk menggunakan tugas IAM role; 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 ECS -optimalkan terbaruAMI, maka instans kontainer berisi versi agen kontainer yang diperlukan. 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 kontainer dengan mode
bridge
dandefault
jaringan. ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true
-
Menggunakan IAM peran 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 ECS penampung Amazon secara manual (untuk non-Amazon ECS AMIs -Optimized). Anda juga akan perlu mengatur perintah jaringan berikut pada instans kontainer Anda sehingga kontainer 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 Task IAM role 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 kredenal tugas menggunakan port 80 pada instans kontainer. Oleh karena itu, jika Anda mengonfigurasi IAM peran untuk tugas pada instans kontainer, kontainer Anda tidak dapat menggunakan port 80 untuk port host di setiap pemetaan port. 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 instans Windows dimulai ulang, Anda harus menghapus antarmuka proxy dan menginisialisasi lagi agen ECS kontainer Amazon untuk mengembalikan proxy kredensialnya.
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