Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Memantau Kontainer Amazon ECS dengan ECS Exec
Dengan Amazon ECS Exec, Anda dapat berinteraksi langsung dengan kontainer tanpa harus terlebih dahulu berinteraksi dengan sistem operasi kontainer host, membuka port masuk, atau mengelola kunci SSH. Anda dapat menggunakan ECS Exec untuk menjalankan perintah di atau mendapatkan shell ke wadah yang berjalan di instans Amazon EC2 atau di AWS Fargate. Hal tersebut mempermudah pengumpulan informasi diagnostik dan memecahkan masalah kesalahan dengan cepat. Misalnya, dalam konteks pengembangan, Anda dapat menggunakan ECS Exec untuk berinteraksi dengan berbagai proses dalam wadah Anda dengan mudah dan memecahkan masalah aplikasi Anda. Dan dalam skenario produksi, Anda dapat menggunakannya untuk mendapatkan akses pecahan ke wadah Anda untuk men-debug masalah.
Anda dapat menjalankan perintah dalam wadah Linux atau Windows yang sedang berjalan menggunakan ECS Exec dari Amazon ECS API, AWS Command Line Interface (AWS CLI), AWS SDK, atau AWS Kopilot CLI. Untuk detail tentang penggunaan ECS Exec, serta panduan video, menggunakan AWS Kopilot CLI, lihat Kopilot GitHub dokumentasi
Anda juga dapat menggunakan ECS Exec untuk mempertahankan kebijakan kontrol akses yang lebih ketat. Dengan mengaktifkan fitur ini secara selektif, Anda dapat mengendalikan siapa yang dapat menjalankan perintah dan ditugas mana mereka dapat menjalankan perintah tersebut. Dengan log setiap perintah dan outputnya, Anda dapat menggunakan ECS Exec untuk melihat tugas mana yang dijalankan dan Anda dapat menggunakan CloudTrail untuk mengaudit siapa yang mengakses wadah.
Pertimbangan-pertimbangan
Pertimbangkan hal berikut saat menggunakan ECS Exec:
-
ECS Exec mungkin tidak berfungsi seperti yang diharapkan saat berjalan pada sistem operasi yang tidak didukung oleh Manajer Sistem. Untuk informasi tentang sistem operasi yang didukung, lihat Jenis sistem operasi di AWS Systems Manager Panduan Pengguna.
-
ECS Exec didukung untuk tugas-tugas yang berjalan pada infrastruktur berikut:
-
Kontainer Linux di Amazon EC2 di Amazon mana pun ECS-optimized AMI, termasuk Bottlerocket
-
Kontainer Linux dan Windows pada instans eksternal (Amazon ECS Anywhere)
-
Wadah Linux dan Windows pada AWS Fargate
-
Wadah Windows di Amazon EC2 pada Windows Amazon berikut ECS-optimized AMI (dengan versi agen kontainer
1.56atau nanti):-
Amazon ECS-optimized Windows Server 2022 AMI Lengkap
-
Amazon ECS-optimized AMI Inti Windows Server 2022
-
Amazon ECS-optimized Windows Server 2019 AMI Penuh
-
Amazon ECS-optimized AMI Inti Windows Server 2019
-
Amazon ECS-optimized AMI Inti Windows Server 20H2
-
-
-
Jika Anda mengonfigurasi proxy HTTP untuk tugas Anda, setel
NO_PROXYvariabel lingkungan untuk"NO_PROXY=169.254.169.254,169.254.170.2"untuk melewati proxy untuk metadata instans EC2 dan lalu lintas peran IAM. Jika Anda tidak mengkonfigurasiNO_PROXYvariabel lingkungan, mungkin ada kegagalan saat mengambil metadata instance atau kredentif peran IAM dari titik akhir metadata di dalam wadah. MengaturNO_PROXYvariabel lingkungan seperti yang direkomendasikan memfilter metadata dan lalu lintas IAM sehingga meminta169.254.169.254 and 169.254.170.2jangan melaluiHTTPproksi. -
ECS Exec dan Amazon VPC
-
Jika Anda menggunakan antarmuka titik akhir Amazon VPC dengan Amazon ECS, Anda harus membuat antarmuka titik akhir Amazon VPC untuk Manajer Sesi Manajer Sistem (
ssmmessages). Untuk informasi selengkapnya tentang titik akhir VPC Systems Manager, lihat Gunakan AWS PrivateLink untuk mengatur titik akhir VPC untuk Manajer Sesi di AWS Systems Manager Panduan Pengguna. -
Jika Anda menggunakan antarmuka titik akhir Amazon VPC dengan Amazon ECS, dan Anda menggunakan AWS KMS key untuk enkripsi, maka Anda harus membuat antarmuka titik akhir Amazon VPC untuk AWS KMS key. Untuk informasi lebih lanjut, lihat Menghubungkan ke AWS KMS key melalui titik akhir VPC di AWS Key Management Service Panduan Pengembang.
-
Jika Anda memiliki tugas yang berjalan di instans Amazon EC2, gunakan
awsvpcmode jaringan. Jika Anda tidak memiliki akses internet (seperti tidak dikonfigurasi untuk menggunakan gateway NAT), Anda harus membuat antarmuka titik akhir Amazon VPC untuk Manajer Sesi Manajer Sistem (ssmmessages). Untuk informasi lebih lanjut tentangawsvpcpertimbangan mode jaringan, lihat Pertimbangan. Untuk informasi selengkapnya tentang titik akhir VPC Systems Manager, lihat Gunakan AWS PrivateLink untuk mengatur titik akhir VPC untuk Manajer Sesi di AWS Systems Manager Panduan Pengguna.
-
-
Amazon ECS Exec tidak didukung untuk tugas yang berjalan di IPv6-only konfigurasi. Untuk informasi selengkapnya tentang menjalankan tugas di IPv6-only konfigurasi, lihat Opsi jaringan tugas Amazon ECS untuk Fargate dan Opsi Jaringan Tugas Amazon ECS untuk EC2.
-
ECS Exec dan SSM
-
Tugas Anda memerlukan peran IAM tugas dengan izin yang diperlukan untuk Manajer Sesi SSM. Untuk tugas di Amazon EC2, jika tidak ada peran tugas yang dikonfigurasi, peran instans dari instans Amazon EC2 yang mendasarinya digunakan sebagai gantinya. Untuk informasi selengkapnya, lihat Izin ECS Exec.
-
Ketika pengguna menjalankan perintah pada wadah menggunakan ECS Exec, perintah ini dijalankan sebagai
rootpengguna. Agen SSM dan proses turunannya berjalan sebagai root bahkan ketika Anda menentukan ID pengguna untuk wadah. -
Agen SSM mengharuskan sistem file container dapat ditulis untuk membuat direktori dan file yang diperlukan. Oleh karena itu, membuat sistem file root hanya-baca menggunakan parameter ketentuan tugas
readonlyRootFilesystem, atau metode lainnya, tidak didukung. -
Saat memulai sesi SSM di luar
execute-commandtindakan dimungkinkan, ini mengakibatkan sesi tidak dicatat dan dihitung terhadap batas sesi. Kami menyarankan untuk membatasi akses ini dengan menolakssm:start-sessiontindakan menggunakan kebijakan IAM. Untuk informasi selengkapnya, lihat Membatasi akses ke tindakan Memulai Sesi.
-
-
Fitur berikut berjalan sebagai wadah sidecar. Oleh karena itu, Anda harus menentukan nama wadah untuk menjalankan perintah.
-
Pemantauan Runtime
-
Service Connect
-
-
Pengguna dapat menjalankan semua perintah yang tersedia dalam konteks kontainer. Tindakan berikut mungkin mengakibatkan proses tanpa induk dan zombie: mengakhiri proses utama kontainer, mengakhiri agen perintah, dan menghapus dependensi. Untuk membersihkan proses zombie, sebaiknya tambahkan flag
initProcessEnableduntuk ketentuan tugas Anda. -
ECS Exec menggunakan beberapa CPU dan memori. Anda akan ingin mengakomodasinya saat menentukan alokasi sumber daya CPU dan memori dalam ketentuan tugas Anda.
-
Anda harus menggunakan AWS CLI versi
1.22.3atau nanti atau AWS CLI versi2.3.6atau nanti. Untuk informasi tentang cara memperbarui AWS CLI, lihat Menginstal atau memperbarui versi terbaru dari AWS CLI di AWS Command Line Interface Panduan Pengguna Versi 2. -
Anda hanya dapat memiliki satu sesi ECS Exec per namespace ID proses (PID). Jika Anda berbagi namespace PID dalam tugas, Anda hanya dapat memulai sesi ECS Exec ke dalam satu wadah.
-
Sesi ECS Exec memiliki waktu tunggu idle 20 menit. Nilai ini tidak dapat diubah.
-
Anda tidak dapat mengaktifkan ECS Exec untuk tugas yang ada. Itu hanya dapat dihidupkan untuk tugas-tugas baru.
-
Anda tidak dapat menggunakan ECS Exec saat Anda menggunakan
run-taskuntuk meluncurkan tugas pada cluster yang menggunakan penskalaan terkelola dengan penempatan asinkron (meluncurkan tugas tanpa instance). -
Anda tidak dapat menjalankan ECS Exec terhadap wadah Microsoft Nano Server.
Arsitektur
ECS Exec memanfaatkan AWS Systems Manager (SSM) Session Manager untuk membuat koneksi dengan wadah yang sedang berjalan dan menggunakan AWS Identity and Access Management (IAM) kebijakan untuk mengontrol akses ke perintah yang sedang berjalan dalam wadah yang sedang berjalan. Hal ini dimungkinkan dengan mengikat pemasangan biner SSM agent yang diperlukan ke dalam kontainer. Amazon ECS atau AWS Fargate agen bertanggung jawab untuk memulai agen inti SSM di dalam wadah bersama kode aplikasi Anda. Untuk informasi selengkapnya, lihat Systems Manager Session Manager.
Anda dapat mengaudit pengguna mana yang mengakses wadah menggunakan ExecuteCommand acara di AWS CloudTrail dan catat setiap perintah (dan outputnya) ke Amazon S3 atau Amazon CloudWatch Log. Untuk mengenkripsi data antara klien lokal dan wadah dengan kunci enkripsi Anda sendiri, Anda harus memberikan AWS Key Management Service (AWS KMS) kunci.
Mengkonfigurasi ECS Exec
Untuk menggunakan ECS Exec, Anda harus terlebih dahulu mengaktifkan fitur untuk tugas dan layanan Anda, dan kemudian Anda dapat menjalankan perintah di wadah Anda.
Perubahan ketentuan tugas opsional
Jika Anda mengatur parameter definisi tugas initProcessEnabled kepada true, ini memulai proses init di dalam wadah. Ini menghapus proses anak agen SSM zombie yang ditemukan. Contoh disediakan seperti berikut.
{ "taskRoleArn": "ecsTaskRole", "networkMode": "awsvpc", "requiresCompatibilities": [ "EC2", "FARGATE" ], "executionRoleArn": "ecsTaskExecutionRole", "memory": ".5 gb", "cpu": ".25 vcpu", "containerDefinitions": [ { "name": "amazon-linux", "image": "amazonlinux:latest", "essential": true, "command": ["sleep","3600"], "linuxParameters": { "initProcessEnabled":true} } ], "family": "ecs-exec-task" }
Mengaktifkan ECS Exec untuk tugas dan layanan Anda
Anda dapat mengaktifkan fitur ECS Exec untuk layanan dan tugas mandiri Anda dengan menentukan --enable-execute-command bendera saat menggunakan salah satu dari berikut ini AWS CLI perintah: create-service, update-service, start-task, atau run-task.
Misalnya, jika Anda menjalankan perintah berikut, fitur ECS Exec diaktifkan untuk layanan yang baru dibuat yang berjalan di Fargate. Untuk informasi selengkapnya tentang membuat layanan, lihat buat-layanan.
aws ecs create-service \ --clustercluster-name\ --task-definitiontask-definition-name\ --enable-execute-command \ --service-nameservice-name\ --launch-type FARGATE \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}" \ --desired-count 1
Setelah mengaktifkan ECS Exec untuk tugas, Anda dapat menjalankan perintah berikut untuk mengonfirmasi bahwa tugas siap digunakan. Jika properti lastStatus dari ExecuteCommandAgent terdaftar sebagai RUNNING dan properti enableExecuteCommand diatur ke true, maka tugas Anda sudah siap.
aws ecs describe-tasks \ --clustercluster-name\ --taskstask-id
Potongan output berikut adalah contoh apa yang mungkin Anda lihat.
{ "tasks": [ { ... "containers": [ { ... "managedAgents": [ { "lastStartedAt": "2021-03-01T14:49:44.574000-06:00", "name": "ExecuteCommandAgent", "lastStatus": "RUNNING" } ] } ], ... "enableExecuteCommand": true, ... } ] }
Menjalankan perintah menggunakan ECS Exec
Pencatatan menggunakan ECS Exec
Anda dapat mengonfigurasi pencatatan log untuk sesi ECS Exec untuk menangkap perintah dan output-nya untuk tujuan audit dan pemecahan masalah.
Mengaktifkan login tugas dan layanan Anda
penting
Untuk informasi lebih lanjut tentang CloudWatch harga, lihat CloudWatch Harga
Amazon ECS menyediakan konfigurasi default untuk mencatat perintah yang dijalankan menggunakan ECS Exec. Defaultnya adalah mengirim log ke CloudWatch Log menggunakan awslogs driver log yang dikonfigurasi dalam definisi tugas Anda. Jika Anda ingin memberikan konfigurasi khusus, AWS CLI mendukung a --configuration bendera untuk keduanya create-cluster dan update-cluster perintah. Gambar wadah membutuhkan script dan cat untuk diinstal agar log perintah diunggah dengan benar ke Amazon S3 atau CloudWatch Log. Untuk informasi selengkapnya tentang pembuatan klaster, lihat buat-klaster.
catatan
Konfigurasi ini hanya menangani pencatatan sesi execute-command. Konfigurasi tersebut tidak memengaruhi pencatatan aplikasi Anda.
Contoh berikut membuat cluster dan kemudian mencatat output ke Anda CloudWatch Log LogGroup menamakan cloudwatch-log-group-name dan bucket Amazon S3 Anda bernama s3-bucket-name.
Anda harus menggunakan AWS KMS kunci yang dikelola pelanggan untuk mengenkripsi grup log saat Anda mengatur CloudWatchEncryptionEnabled pilihan untuk true. Untuk informasi tentang cara mengenkripsi grup log, lihat Enkripsi data log di CloudWatch Log menggunakan AWS Key Management Service, di Amazon CloudWatch Logs Panduan Pengguna.
aws ecs create-cluster \ --cluster-namecluster-name\ --configuration executeCommandConfiguration="{ \ kmsKeyId=string, \ logging=OVERRIDE, \ logConfiguration={ \ cloudWatchLogGroupName=cloudwatch-log-group-name, \ cloudWatchEncryptionEnabled=true, \ s3BucketName=s3-bucket-name, \ s3EncryptionEnabled=true, \ s3KeyPrefix=demo\ } \ }"
logging properti menentukan perilaku kemampuan logging ECS Exec:
-
NONE: logging dimatikan. -
DEFAULT: log dikirim ke yang dikonfigurasiawslogspengemudi. Jika driver tidak dikonfigurasi, maka tidak ada log yang disimpan. -
OVERRIDE: log dikirim ke Amazon yang disediakan CloudWatch Log LogGroup, bucket Amazon S3, atau keduanya.
Izin IAM diperlukan untuk Amazon CloudWatch Log atau Amazon S3 Logging
Untuk mengaktifkan logging, peran tugas Amazon ECS yang dirujuk dalam definisi tugas Anda harus memiliki izin tambahan. Izin tambahan ini dapat ditambahkan sebagai kebijakan ke peran tugas. Mereka berbeda tergantung pada apakah Anda mengarahkan log Anda ke Amazon CloudWatch Log atau Amazon S3.
Izin IAM diperlukan untuk enkripsi menggunakan milik Anda AWS KMS key (Kunci KMS)
Secara default, data yang ditransfer antara klien lokal Anda dan wadah menggunakan enkripsi TLS 1.2 yang AWS menyediakan. Untuk mengenkripsi data lebih lanjut menggunakan kunci KMS Anda sendiri, Anda harus membuat kunci KMS dan menambahkan kms:Decrypt izin untuk peran IAM tugas Anda. Izin ini digunakan oleh kontainer Anda untuk mendekripsi data. Untuk informasi selengkapnya tentang membuat kunci KMS, lihat Membuat kunci.
Anda menambahkan kebijakan sebaris berikut ke peran IAM tugas Anda yang membutuhkan AWS KMS izin. Untuk informasi selengkapnya, lihat Izin ECS Exec.
Untuk data yang akan dienkripsi menggunakan kunci KMS Anda sendiri, pengguna atau grup menggunakan execute-command Tindakan harus diberikan kms:GenerateDataKey izin.
Contoh kebijakan berikut untuk pengguna atau grup berisi izin yang diperlukan untuk menggunakan kunci KMS Anda sendiri. Anda harus menentukan Nama Sumber Daya Amazon (ARN) dari kunci KMS Anda.
Menggunakan kebijakan IAM untuk membatasi akses ke ECS Exec
Anda membatasi akses pengguna ke tindakan API execute-command dengan menggunakan satu atau beberapa kunci kondisi kebijakan IAM berikut:
-
aws:ResourceTag/clusterTagKey -
ecs:ResourceTag/clusterTagKey -
aws:ResourceTag/taskTagKey -
ecs:ResourceTag/taskTagKey -
ecs:container-name -
ecs:cluster -
ecs:task -
ecs:enable-execute-command
Dengan contoh kebijakan IAM berikut, pengguna dapat menjalankan perintah dalam wadah yang berjalan di dalam tugas dengan tag yang memiliki environment kunci dan development nilai dan dalam cluster yang diberi nama cluster-name.
Dengan contoh kebijakan IAM berikut, pengguna tidak dapat menggunakan execute-command API saat nama kontainer adalah production-app.
Dengan kebijakan IAM berikut, pengguna hanya dapat meluncurkan tugas saat ECS Exec dimatikan.
catatan
Karena tindakan API execute-command hanya berisi sumber daya tugas dan klaster dalam sebuah permintaan, maka yang dievaluasi adalah tanda klaster dan tugas.
Untuk informasi selengkapnya tentang kunci kondisi kebijakan IAM, lihat Tindakan, sumber daya, dan kunci kondisi untuk Amazon Elastic Container Service di Referensi Otorisasi Layanan.
Membatasi akses ke tindakan Memulai Sesi
Meskipun memulai sesi SSM di wadah Anda di luar ECS Exec dimungkinkan, ini berpotensi mengakibatkan sesi tidak dicatat. Sesi yang dimulai di luar ECS Exec juga dihitung terhadap kuota sesi. Kami menyarankan untuk membatasi akses ini dengan menolak ssm:start-session bertindak langsung untuk tugas Amazon ECS Anda menggunakan kebijakan IAM. Anda dapat menolak akses ke semua tugas Amazon ECS atau ke tugas tertentu berdasarkan tag yang digunakan.
Berikut ini adalah contoh kebijakan IAM yang menolak akses ke ssm:start-session tindakan untuk tugas di semua Wilayah dengan nama cluster tertentu. Anda dapat menyertakan wildcard dengan secara opsional.cluster-name
Berikut ini adalah contoh kebijakan IAM yang menolak akses ke ssm:start-session tindakan pada sumber daya di semua Wilayah yang ditandai dengan kunci tag Task-Tag-Key dan nilai tag Exec-Task.
Pemecahan masalah ECS Exec
Untuk bantuan pemecahan masalah tambahan, lihat Memecahkan masalah dengan Exec.