Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pantau ECS wadah Amazon dengan ECS Exec
Dengan Amazon ECS Exec, Anda dapat langsung berinteraksi dengan kontainer tanpa perlu terlebih dahulu berinteraksi dengan sistem operasi wadah host, membuka port masuk, atau mengelola kunci. SSH Anda dapat menggunakan ECS Exec untuk menjalankan perintah di atau mendapatkan shell ke wadah yang berjalan pada EC2 instance Amazon 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 mudah dengan berbagai proses dalam wadah Anda dan memecahkan masalah aplikasi Anda. Dan dalam skenario produksi, Anda dapat menggunakannya untuk mendapatkan akses break-glass ke kontainer Anda untuk men-debug masalah.
Anda dapat menjalankan perintah dalam wadah Linux atau Windows yang sedang berjalan menggunakan ECS Exec dari Amazon ECSAPI, AWS Command Line Interface (AWS CLI) AWS SDKs, atau AWS CLI Copilot. Untuk detail tentang penggunaan ECS Exec, serta panduan video, menggunakan Copilot, lihat AWS Copilot CLI 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 dari 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
Untuk topik ini, Anda harus terbiasa dengan aspek-aspek berikut yang terlibat dengan penggunaan ECS Exec:
-
ECSExec saat ini tidak didukung menggunakan file. AWS Management Console
-
ECSExec mungkin tidak berfungsi seperti yang diharapkan ketika berjalan pada sistem operasi yang tidak didukung oleh Systems Manager. Untuk informasi tentang sistem operasi yang didukung, lihat Jenis sistem operasi di Panduan AWS Systems Manager Pengguna.
-
ECSExec didukung untuk tugas-tugas yang berjalan pada infrastruktur berikut:
-
Wadah Linux di Amazon EC2 di Amazon apa pun yang ECS dioptimalkanAMI, termasuk Bottlerocket
-
Wadah Linux dan Windows pada instance eksternal (Amazon ECS Anywhere)
-
Wadah Linux dan Windows di AWS Fargate
-
Wadah Windows di Amazon EC2 pada Windows Amazon berikut yang ECS dioptimalkan AMIs (dengan versi agen penampung
1.56
atau yang lebih baru):-
Amazon ECS -dioptimalkan Windows Server 2022 Lengkap AMI
-
Server Windows 2022 ECS Inti yang dioptimalkan Amazon AMI
-
Amazon ECS -dioptimalkan Windows Server 2019 Penuh AMI
-
Inti Windows Server 2019 yang ECS dioptimalkan Amazon AMI
-
Amazon ECS -dioptimalkan Windows Server 20H2 Core AMI
-
-
-
ECSExec dan Amazon VPC
-
Jika Anda menggunakan antarmuka VPC titik akhir Amazon dengan AmazonECS, Anda harus membuat antarmuka VPC titik akhir Amazon untuk Systems Manager Session Manager ()
ssmmessages
. Untuk informasi selengkapnya tentang VPC titik akhir Systems Manager, lihat Menggunakan AWS PrivateLink untuk menyiapkan VPC endpoint bagi Session Manager di AWS Systems Manager Panduan Pengguna. -
Jika Anda menggunakan antarmuka VPC titik akhir Amazon dengan AmazonECS, dan Anda menggunakan AWS KMS key untuk enkripsi, maka Anda harus membuat antarmuka VPC titik akhir Amazon untuk. AWS KMS key Untuk informasi selengkapnya, lihat Menghubungkan ke AWS KMS key melalui VPC titik akhir di Panduan AWS Key Management Service Pengembang.
-
Bila Anda memiliki tugas yang berjalan di EC2 instans Amazon, gunakan mode
awsvpc
jaringan. Jika Anda tidak memiliki akses internet, seperti tidak dikonfigurasi untuk menggunakan NAT gateway), Anda harus membuat antarmuka VPC titik akhir Amazon untuk Systems Manager Session Manager (ssmmessages
). Untuk informasi selengkapnya tentang pertimbangan modeawsvpc
jaringan, lihat Pertimbangan. Untuk informasi selengkapnya tentang VPC titik akhir Systems Manager, lihat Menggunakan AWS PrivateLink untuk menyiapkan VPC endpoint bagi Session Manager di AWS Systems Manager Panduan Pengguna.
-
-
ECSExec dan SSM
-
Ketika pengguna menjalankan perintah pada wadah menggunakan ECS Exec, perintah ini dijalankan sebagai
root
pengguna. SSMAgen dan proses turunannya berjalan sebagai root bahkan ketika Anda menentukan ID pengguna untuk penampung. -
SSMAgen mengharuskan sistem file kontainer 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. -
Meskipun memulai SSM sesi di luar
execute-command
tindakan dimungkinkan, ini mengakibatkan sesi tidak dicatat dan dihitung terhadap batas sesi. Kami menyarankan untuk membatasi akses ini dengan menolakssm:start-session
tindakan menggunakan IAM kebijakan. Untuk informasi selengkapnya, lihat Membatasi akses ke tindakan Memulai Sesi.
-
-
Fitur berikut berjalan sebagai wadah sespan. Oleh karena itu, Anda harus menentukan nama kontainer untuk menjalankan perintah.
-
Pemantauan Runtime
-
Layanan 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
initProcessEnabled
untuk ketentuan tugas Anda. -
ECSExec menggunakan beberapa CPU dan memori. Anda akan ingin mengakomodasi untuk itu saat menentukan alokasi sumber daya CPU dan memori dalam definisi tugas Anda.
-
Anda harus menggunakan AWS CLI versi
1.22.3
atau yang lebih baru atau AWS CLI versi2.3.6
atau yang lebih baru. Untuk informasi tentang cara memperbarui AWS CLI, lihat Menginstal atau memperbarui versi terbaru dari AWS CLI Panduan AWS Command Line Interface Pengguna Versi 2. -
Anda hanya dapat memiliki satu sesi ECS Exec per namespace ID proses (PID). Jika Anda berbagi PID namespace 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 digunakan
run-task
untuk meluncurkan tugas di klaster yang menggunakan penskalaan terkelola dengan penempatan asinkron (meluncurkan tugas tanpa instance). -
Anda tidak dapat menjalankan ECS Exec terhadap kontainer Microsoft Nano Server.
Prasyarat
Sebelum Anda mulai menggunakan ECS Exec, pastikan Anda telah menyelesaikan tindakan ini:
-
Instal dan konfigurasikan AWS CLI. Untuk informasi selengkapnya, lihat Memulai dengan AWS CLI.
-
Instal plugin Session Manager untuk file AWS CLI. Untuk informasi selengkapnya, lihat Instal plugin Pengelola Sesi untuk AWS CLI.
-
Anda harus menggunakan peran tugas dengan izin yang sesuai untuk ECS Exec. Untuk informasi selengkapnya, lihat IAMPeran tugas.
-
ECSExec memiliki persyaratan versi tergantung pada apakah tugas Anda di-host di Amazon EC2 atau AWS Fargate:
-
Jika Anda menggunakan AmazonEC2, Anda harus menggunakan Amazon yang ECS dioptimalkan AMI yang dirilis setelah 20 Januari 2021, dengan versi agen 1.50.2 atau lebih tinggi. Untuk informasi selengkapnya, lihat Amazon ECS dioptimalkan AMIs.
-
Jika Anda menggunakan AWS Fargate, Anda harus menggunakan versi platform
1.4.0
atau lebih tinggi (Linux) atau1.0.0
(Windows). Untuk informasi selengkapnya, lihat Versi platform AWS Fargate.
-
Arsitektur
ECSExec menggunakan AWS Systems Manager (SSM) Session Manager untuk membuat koneksi dengan container yang sedang berjalan dan menggunakan kebijakan AWS Identity and Access Management (IAM) untuk mengontrol akses ke perintah yang sedang berjalan dalam container yang sedang berjalan. Hal ini dimungkinkan dengan mengikat biner SSM agen yang diperlukan ke dalam wadah. Amazon ECS atau AWS Fargate agen bertanggung jawab untuk memulai agen SSM inti di dalam wadah bersama kode aplikasi Anda. Untuk informasi selengkapnya, lihat Systems Manager Session Manager.
Anda dapat mengaudit pengguna mana yang mengakses container menggunakan ExecuteCommand
event in AWS CloudTrail dan mencatat setiap perintah (dan outputnya) ke Amazon S3 atau Amazon CloudWatch Logs. Untuk mengenkripsi data antara klien lokal dan wadah dengan kunci enkripsi Anda sendiri, Anda harus memberikan kunci AWS Key Management Service (AWS KMS).
Menggunakan ECS Exec
Perubahan ketentuan tugas opsional
Jika Anda menyetel parameter definisi tugas initProcessEnabled
ketrue
, ini memulai proses init di dalam wadah. Ini menghilangkan proses anak SSM agen 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
tanda saat menggunakan salah satu AWS CLI perintah berikut: 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 \ --cluster
cluster-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 Anda 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 \ --cluster
cluster-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
Setelah Anda telah mengonfirmasi bahwa ExecuteCommandAgent
sedang berjalan, Anda dapat membuka shell interaktif pada kontainer Anda dengan menggunakan perintah berikut. Jika tugas Anda berisi beberapa kontainer, Anda harus menentukan nama kontainer menggunakan --container
bendera. Amazon ECS hanya mendukung memulai sesi interaktif, jadi Anda harus menggunakan --interactive
bendera.
Perintah berikut akan menjalankan /bin/sh
perintah interaktif terhadap wadah bernama
untuk tugas dengan ID container-name
task-id
.
Bagian task-id
adalah Nama Sumber Daya Amazon (ARN) dari tugas tersebut.
aws ecs execute-command --cluster
cluster-name
\ --tasktask-id
\ --containercontainer-name
\ --interactive \ --command"/bin/sh"
Logging menggunakan ECS Exec
Mengaktifkan login dalam tugas dan layanan Anda
penting
Untuk informasi selengkapnya tentang CloudWatch harga, lihat CloudWatch Harga
Amazon ECS menyediakan konfigurasi default untuk perintah logging yang dijalankan menggunakan ECS Exec dengan mengirimkan CloudWatch log ke Log menggunakan driver awslogs
log yang dikonfigurasi dalam definisi tugas Anda. Jika Anda ingin menyediakan konfigurasi kustom, AWS CLI
mendukung flag --configuration
untuk kedua perintah create-cluster
dan update-cluster
. Penting juga untuk mengetahui bahwa image kontainer memerlukan script
dan cat
diinstal agar log perintah diunggah dengan benar ke Amazon S3 CloudWatch atau 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 klaster dan kemudian mencatat output ke CloudWatch Log LogGroup bernama cloudwatch-log-group-name
dan bucket Amazon S3 Anda bernama. s3-bucket-name
Anda harus menggunakan kunci yang dikelola AWS KMS pelanggan untuk mengenkripsi grup log saat Anda true
menyetel CloudWatchEncryptionEnabled
opsi. Untuk informasi tentang cara mengenkripsi grup log, lihat Mengenkripsi data CloudWatch log di Log menggunakan AWS Key Management Service, di Amazon CloudWatch Logs Panduan Pengguna.
aws ecs create-cluster \ --cluster-name
cluster-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 keawslogs
driver yang dikonfigurasi. Jika driver tidak dikonfigurasi, maka tidak ada log yang disimpan. -
OVERRIDE
: log dikirim ke CloudWatch Log Amazon yang disediakan LogGroup, bucket Amazon S3, atau keduanya.
IAMizin yang diperlukan untuk Amazon CloudWatch Log atau Amazon S3 Logging
Untuk mengaktifkan logging, peran ECS tugas Amazon yang direferensikan dalam definisi tugas Anda harus memiliki izin tambahan. Izin tambahan ini dapat ditambahkan sebagai kebijakan untuk peran tugas. Mereka berbeda tergantung pada apakah Anda mengarahkan log Anda ke Amazon CloudWatch Log atau Amazon S3.
IAMizin yang diperlukan untuk enkripsi menggunakan AWS KMS key (KMSkunci) Anda sendiri
Secara default, data yang ditransfer antara klien lokal Anda dan penampung menggunakan enkripsi TLS 1.2 yang AWS menyediakan. Untuk mengenkripsi data lebih lanjut menggunakan KMS kunci Anda sendiri, Anda harus membuat KMS kunci dan menambahkan kms:Decrypt
izin ke IAM peran tugas Anda. Izin ini digunakan oleh kontainer Anda untuk mendekripsi data. Untuk informasi selengkapnya tentang membuat KMS kunci, lihat Membuat kunci.
Anda menambahkan kebijakan sebaris berikut ke IAM peran tugas yang memerlukan AWS KMS izin. Untuk informasi selengkapnya, lihat ECSIzin Exec.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "
kms-key-arn
" } ] }
Agar data dienkripsi menggunakan KMS kunci Anda sendiri, pengguna atau grup yang menggunakan execute-command
tindakan harus diberikan izin. kms:GenerateDataKey
Contoh kebijakan berikut untuk pengguna atau grup Anda berisi izin yang diperlukan untuk menggunakan KMS kunci Anda sendiri. Anda harus menentukan Amazon Resource Name (ARN) KMS kunci Anda.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "
kms-key-arn
" } ] }
Menggunakan IAM kebijakan untuk membatasi akses ke ECS Exec
Anda membatasi akses pengguna ke API tindakan perintah eksekusi dengan menggunakan satu atau beberapa kunci kondisi IAM kebijakan 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 IAM kebijakan berikut, pengguna dapat menjalankan perintah dalam kontainer yang berjalan di dalam tugas dengan tag yang memiliki environment
kunci dan development
nilai dan dalam klaster yang diberi namacluster-name
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "
Allow
", "Action": [ "ecs:ExecuteCommand", "ecs:DescribeTasks" ], "Resource": [ "arn:aws:ecs:region:aws-account-id:task/cluster-name/*", "arn:aws:ecs:region:aws-account-id:cluster/*" ], "Condition": { "StringEquals": { "ecs:ResourceTag/environment
": "development
" } } } ] }
Dengan contoh IAM kebijakan berikut, pengguna tidak dapat menggunakan execute-command
API saat nama kontainerproduction-app
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "
Deny
", "Action": [ "ecs:ExecuteCommand" ], "Resource": "*", "Condition": { "StringEquals": { "ecs:container-name": "production-app
" } } } ] }
Dengan IAM kebijakan berikut, pengguna hanya dapat meluncurkan tugas saat ECS Exec dimatikan.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "
Allow
", "Action": [ "ecs:RunTask", "ecs:StartTask", "ecs:CreateService", "ecs:UpdateService" ], "Resource": "*", "Condition": { "StringEquals": { "ecs:enable-execute-command": "false
" } } } ] }
catatan
Karena execute-command
API tindakan hanya berisi tugas dan sumber daya klaster dalam permintaan, hanya tag klaster dan tugas yang dievaluasi.
Untuk informasi selengkapnya tentang kunci kondisi IAM kebijakan, lihat Tindakan, sumber daya, dan kunci kondisi untuk Amazon Elastic Container Service di Referensi Otorisasi Layanan.
Membatasi akses ke tindakan Memulai Sesi
Meskipun memulai SSM sesi di penampung Anda di luar ECS Exec dimungkinkan, ini berpotensi mengakibatkan sesi tidak dicatat. Sesi yang dimulai di luar ECS Exec juga dihitung terhadap kuota sesi. Sebaiknya batasi akses ini dengan menolak ssm:start-session
tindakan secara langsung untuk ECS tugas Amazon Anda menggunakan IAM kebijakan. Anda dapat menolak akses ke semua ECS tugas Amazon atau tugas tertentu berdasarkan tag yang digunakan.
Berikut ini adalah contoh IAM kebijakan 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
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ssm:StartSession", "Resource": [ "arn:aws:ecs:region:aws-account-id:task/cluster-name/*", "arn:aws:ecs:region:aws-account-id:cluster/*" ] } ] }
Berikut ini adalah contoh IAM kebijakan 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
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ssm:StartSession", "Resource": "arn:aws:ecs:*:*:task/*", "Condition": { "StringEquals": { "aws:ResourceTag/
Task-Tag-Key
": "Exec-Task
" } } } ] }
Untuk bantuan terkait masalah apa pun yang mungkin Anda hadapi saat menggunakan Amazon ECS Exec, lihat Memecahkan masalah dengan Exec.