Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan Amazon ECS Exec untuk debugging
Dengan Amazon ECS Exec, Anda dapat berinteraksi secara langsung dengan kontainer tanpa perlu terlebih dahulu berinteraksi dengan sistem operasi kontainer host, membuka port masuk masuk, atau mengelola kunci SSH. Anda dapat menggunakan ECS Exec untuk menjalankan perintah atau membawa shell ke kontainer yang berjalan pada instans Amazon EC2 atau aktifAWS 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 kontainer Anda dengan mudah 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 kontainer Linux atau Windows yang berjalan menggunakan ECS Exec dari Amazon ECS API,AWS Command Line Interface (AWS CLI),AWS SDK, atauAWS Copilot CLI. Untuk detail tentang penggunaan ECS Exec, serta panduan video, menggunakanAWS Copilot CLI, lihat dokumentasi Copilot Github
Anda juga dapat menggunakan ECS Exec untuk mempertahankan kebijakan kontrol akses yang lebih ketat dan akses kontainer audit 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 mengaudit tugas yang dijalankan dan Anda dapat menggunakan CloudTrail untuk mengaudit siapa saja yang mengakses kontainer.
Arsitektur
ECS Exec menggunakan Pengelola SesiAWS Systems Manager (SSM) untuk membuat koneksi dengan kontainer yang berjalan dan menggunakan kebijakanAWS Identity and Access Management (IAM) untuk mengendalikan akses ke perintah yang sedang berjalan dalam kontainer yang berjalan. Hal ini dimungkinkan dengan mengikat pemasangan biner SSM agent yang diperlukan ke dalam kontainer. Amazon ECS atauAWS Fargate agen bertanggung jawab untuk memulai agen inti SSM di dalam kontainer bersama kode aplikasi Anda. Untuk informasi lebih lanjut, lihat Systems Manager Session Manager.
Anda dapat mengaudit siapa saja pengguna yang mengakses kontainer menggunakanAWS CloudTrail dan mencatat setiap perintah (dan output mereka) ke Amazon S3 atau Amazon CloudWatch Logs. Untuk mengenkripsi data antara klien lokal dan kontainer dengan kunci enkripsi Anda sendiri, Anda harus menyediakan kunci AWS Key Management Service (AWS KMS).
Pertimbangan untuk menggunakan ECS Exec
Untuk topik ini, Anda harus terbiasa dengan aspek berikut yang terlibat dengan penggunaan ECS Exec:
-
ECS Exec didukung untukAWS Fargate, instans eksternal (ECS Anywhere), kontainer Linux yang dihosting di Amazon EC2 dan AMI yang dioptimalkan Windows Amazon ECS berikut (dengan versi agen kontainer
1.56
atau yang lebih baru):-
AMI Windows Server 2022 Full AMI yang dioptimalkan untuk Amazon ECS
-
AMI Windows Server 2022 Core AMI yang dioptimalkan untuk Amazon ECS
-
AMI Windows Server 2019 Full AMI yang dioptimalkan untuk Amazon ECS
-
AMI Windows Server 2019 Core AMI yang dioptimalkan untuk Amazon ECS
-
AMI Windows Server 20H2 Core AMI yang dioptimalkan untuk Amazon ECS
-
-
ECS Exec saat ini tidak didukung menggunakanAWS Management Console.
-
ECS Exec saat ini tidak didukung untuk tugas yang diluncurkan menggunakan penyedia kapasitas grup Auto Scaling.
-
Jika Anda menggunakan antarmuka titik akhir Amazon VPC dengan Amazon ECS, Anda harus membuat antarmuka titik akhir Amazon VPC untuk Systems Manager Sesi Manager. Untuk informasi selengkapnya, lihat Buat titik akhir VPC Manajer Sesi Systems Manager saat menggunakan fitur ECS Exec.
-
Jika Anda menggunakan antarmuka Amazon VPC endpoint dengan Amazon ECS, dan Anda gunakanAWS KMS key untuk enkripsi, maka Anda harus membuat antarmuka Amazon VPC endpoint untuk harus membuat antarmuka Amazon VPC endpoint untukAWS KMS key. Untuk informasi selengkapnya, lihat Menghubungkan keAWS KMS key melalui titik akhir VPC di PanduanAWS Key Management Service Pengembang.
-
Anda tidak dapat mengaktifkan ECS Exec untuk tugas yang ada. ECS Exec hanya dapat dihidupkan untuk tugas baru.
-
Ketika pengguna menjalankan perintah pada kontainer dengan menggunakan ECS Exec, perintah ini dijalankan sebagai
root
pengguna. Agen SSM dan proses turunannya berjalan sebagai root bahkan ketika Anda menentukan ID pengguna untuk kontainer. -
Sesi ECS Exec memiliki waktu tunggu idle 20 menit. Nilai ini tidak dapat diubah.
-
Agen SSM mengharuskan bahwa 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. -
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. -
Sementara memulai sesi SSM di luar
execute-command
tindakan dimungkinkan, hal ini mengakibatkan sesi tidak dicatat dan dihitung terhadap batas sesi. Kami merekomendasikan untuk membatasi akses ini dengan menolakssm:start-session
tindakan tersebut menggunakan kebijakan IAM. Untuk informasi selengkapnya, lihat Membatasi akses ke tindakan Memulai Sesi. -
ECS Exec akan menggunakan beberapa CPU dan memori. Anda akan ingin mengakomodasinya saat menentukan alokasi sumber daya CPU dan memori dalam ketentuan tugas Anda.
-
Anda harus menggunakanAWS CLI versi
1.22.3
atau versi yang lebih baru atauAWS CLI versi2.3.6
atau yang lebih baru. Untuk informasi tentang cara memperbaruiAWS CLI, lihat Menginstal atau memperbarui versi terbaru dariAWS CLI dalam PanduanAWS Command Line Interface Pengguna Versi 2. -
Anda tidak dapat menggunakan ECS Exec saat Anda menggunakan
run-task
untuk meluncurkan tugas pada klaster yang menggunakan penskalaan terkelola dengan penempatan asinkron (meluncurkan tugas tanpa instance). -
Anda tidak dapat menjalankan ECS Exec terhadap kontainer Microsoft Nano Server. Untuk informasi selengkapnya tentang kontainer Nano Server, lihat Nano Server
di situs web Docker.
Prasyarat untuk menggunakan ECS Exec
Sebelum Anda mulai menggunakan ECS Exec, pastikan bahwa Anda telah menyelesaikan tindakan ini:
-
Instal dan konfigurasikan AWS CLI. Untuk informasi selengkapnya, lihat AWS CLI.
-
Instal plugin Pengelola Sesi untuk AWS CLI. Untuk informasi selengkapnya, lihat Instal plugin Pengelola Sesi untuk AWS CLI.
-
ECS Exec memiliki persyaratan versi berdasarkan pada apakah tugas Anda di-hosting di Amazon EC2 atauAWS Fargate:
-
Jika Anda menggunakan Amazon EC2, Anda harus menggunakan AMI yang dioptimalkan Amazon ECS yang dirilis setelah 20 Januari 2021, dengan versi agen 1.50.2 atau yang lebih besar. Untuk informasi selengkapnya, lihat AMI yang dioptimalkan Amazon ECS.
-
Jika Anda menggunakanAWS Fargate, Anda harus menggunakan versi platform
1.4.0
atau yang lebih tinggi (Linux) atau1.0.0
(Windows). Untuk informasi selengkapnya, lihat Versi platform AWS Fargate.
-
Menggunakan ECS Exec
Izin IAM diperlukan untuk ECS Exec
Fitur ECS Exec mengharuskan peran IAM tugas untuk memberikan kontainer izin yang diperlukan untuk komunikasi antara agen SSM terkelola (execute-command
agen) SSM dan layanan SSM. Untuk informasi lebih lanjut, lihat peran IAM tugas Amazon ECS. Anda harus menambahkan izin berikut untuk peran IAM tugas dan termasuk peran IAM tugas dalam ketentuan tugas Anda. Untuk informasi selengkapnya, lihat Menambahkan dan Menghapus Kebijakan IAM.
Gunakan kebijakan berikut untuk peran IAM tugas Anda untuk menambahkan izin SSM yang diperlukan.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }
Perubahan ketentuan tugas opsional
Jika Anda menetapkan parameter ketentuan tugas initProcessEnabled
ke true
, tindakan ini memulai proses unit dalam kontainer, yang menghapus setiap proses anak SSM agent 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 dapat mengaktifkan fitur ECS Exec untuk layanan Anda dan tugas mandiri dengan menentukan--enable-execute-command
tanda saat menggunakan salah satuAWS 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. 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
\ --desired-count 1
Setelah Anda mengaktifkan ECS Exec untuk tugas, Anda dapat menjalankan perintah berikut untuk mengonfirmasi tugas yang siap untuk 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 kontainer bernama
kontainer untuk tugas dengan id container-nama
tugas id
tugas.
aws ecs execute-command --cluster
cluster-name
\ --tasktask-id
\ --containercontainer-name
\ --interactive \ --command"/bin/sh"
Mencatat dan Mengaudit menggunakan ECS Exec
Mengaktifkan pencatatan dan audit dalam tugas dan layanan
Amazon ECS menyediakan konfigurasi default untuk perintah pencatatan yang berjalan menggunakan ECS Exec dengan mengirim log ke CloudWatch Log menggunakan driverawslogs
log yang dikonfigurasikan dalam ketentuan tugas Anda. Jika Anda ingin menyediakan konfigurasi kustom, AWS CLI mendukung flag --configuration
untuk kedua perintah create-cluster
dan update-cluster
. Penting untuk diketahui bahwa citra kontainer mengharuskanscript
dan dipasang sehingga log perintah dapat diunggah dengan benarcat
ke Amazon S3 atau Log perintah perintah dapat diunggah dengan benar ke Amazon S3 atau CloudWatch Log perintah. Untuk informasi selengkapnya tentang pembuatan klaster, lihat buat-klaster.
Konfigurasi ini hanya menangani pencatatan sesi execute-command
. Konfigurasi tersebut tidak memengaruhi pencatatan aplikasi Anda.
Contoh berikut membuat layanan dan kemudian mencatat output ke CloudWatch Log Anda yang LogGroup diberi namacloudwatch-log-group-name
dan bucket Amazon S3 Anda yang diberi namas3-bucket-name
.
Anda harus menggunakan kunci yang dikelolaAWS KMS pelanggan untuk mengenkripsi grup log saat Anda menyetelCloudWatchEncryptionEnabled
opsitrue
. Untuk informasi tentang cara mengenkripsi grup log, lihat Mengenkripsi data log dalam CloudWatch Log menggunakanAWS Key Management Service, di PanduanAmazon CloudWatch Logs 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 pencatatan ECS Exec:
-
NONE
: log dimatikan -
DEFAULT
: log dikirim ke driverawslogs
yang dikonfigurasi (Jika driver tidak dikonfigurasi, maka log tidak disimpan.) -
OVERRIDE
: log dikirim ke Amazon CloudWatch Logs LogGroup, bucket Amazon S3, atau keduanya yang disediakan
Izin IAM diperlukan untuk Amazon CloudWatch Loggs atau Amazon S3 Logging
Untuk mengaktifkan pencatatan, peran tugas Amazon ECS yang direferensikan dalam ketentuan tugas Anda perlu memiliki izin tambahan. Izin tambahan ini dapat ditambahkan sebagai kebijakan untuk peran tugas. Catatan tersebut berbeda tergantung pada apakah Anda mengarahkan log Anda ke Amazon CloudWatch Logs atau Amazon S3.
Izin IAM diperlukan untuk enkripsi menggunakan Anda sendiriAWS KMS key (kunci KMS)
Secara default, data yang ditransfer antara klien lokal Anda dan kontainer menggunakan enkripsi TLS 1.2 yang menyediakan AWS. Untuk mengenkripsi data lebih lanjut menggunakan kunci KMS Anda sendiri, Anda harus membuat kunci KMS dan menambahkankms:Decrypt
izin ke peran IAM tugas Anda. Izin ini digunakan oleh kontainer Anda untuk mendekripsi data. Untuk informasi lebih lanjut tentang cara membuat kunci KMS, lihat Membuat kunci.
Anda akan menambahkan kebijakan inling berikut untuk tugas IAM role Anda yang memerlukan izin AWS KMS. Untuk informasi selengkapnya, lihat Izin IAM diperlukan untuk ECS Exec.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "
kms-key-arn
" } ] }
Untuk data yang akan dienkripsi menggunakan kunci KMS Anda sendiri, pengguna atau grup yang menggunakanexecute-command
tindakan tersebut harus diberikankms:GenerateDataKey
izin.
Kebijakan contoh berikut untuk pengguna atau grup berisi izin yang diperlukan untuk menggunakan kunci KMS Anda sendiri. Anda harus menentukan Amazon Resource Name (ARN) pada kunci KMS Anda.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "
kms-key-arn
" } ] }
Menggunakan kebijakan IAM untuk membatasi akses ke ECS Exec
Anda dapat membatasi akses pengguna ke tindakan API perintah eksekusi dengan menggunakan satu atau beberapa langkah kunci ketentuan 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 kebijakan IAM contoh berikut, pengguna dapat menjalankan perintah dalam kontainer yang berjalan dalam tugas dengan tanda yang memilikienvironment
kunci dandevelopment
nilai kunci dan klaster yang bernama klaster yang bernamacluster-name
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "
Allow
", "Action": [ "ecs:ExecuteCommand", "ecs:DescribeTasks" ], "Resource": "arn:aws:ecs:region
:aws-account-id
:task/cluster-name
/*", "Condition": { "StringEquals": { "ecs:ResourceTag/environment
": "development
" } } } ] }
Dengan contoh kebijakan IAM berikut, pengguna tidak dapat menggunakanexecute-command
API ketika nama kontainerproduction-app
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "
Deny
", "Action": [ "ecs:ExecuteCommand" ], "Resource": "*", "Condition": { "StringEquals": { "ecs:container-name": "production-app
" } } } ] }
Dengan kebijakan IAM berikut, pengguna hanya dapat meluncurkan tugas ketika 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
" } } } ] }
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 ketentuan kebijakan IAM, lihat Tindakan sumber daya, dan kunci syarat untuk Amazon Elastic Container Service dalam Referensi Otorisasi Layanan.
Membatasi akses ke tindakan Memulai Sesi
Saat memulai sesi SSM pada kontainer Anda di luar ECS Exec memungkinkan, hal ini berpotensi mengakibatkan sesi menjadi tidak dicatat. Sesi yang dimulai di luar ECS Exec juga dihitung terhadap kuota sesi. Kami merekomendasikan untuk membatasi akses ini dengan menolakssm:start-session
tindakan secara langsung untuk tugas Amazon ECS Anda menggunakan kebijakan IAM. Anda dapat menolak akses ke semua tugas Amazon ECS atau tugas tertentu berdasarkan tag yang digunakan.
Berikut ini adalah contoh kebijakan IAM yang menolak akses kessm:start-session
tindakan untuk tugas-tugas di semua Wilayah dengan nama klaster tertentu. Anda dapat menyertakan wildcard dengan
secara opsional.cluster-name
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ssm:StartSession", "Resource": "arn:aws:ecs:*:111122223333:task/cluster-name/*" } ] }
Berikut ini adalah kebijakan IAM contoh yang menolak akses kessm:start-session
tindakan sumber daya di semua Wilayah yang ditandai dengan kunci tanda tandaTask-Tag-Key
dan nilai tanda tandaExec-Task
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ssm:StartSession", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/
Task-Tag-Key
": "Exec-Task
" } } } ] }
Pemecahan masalah dengan ECS Exec
Berikut ini adalah catatan pemecahan masalah untuk membantu mendiagnosis mengapa Anda mungkin mendapatkan kesalahan saat menggunakan ECS Exec.
Verifikasi menggunakan Amazon ECS Exec Checker
Skrip Pemeriksa Amazon ECS Exec menyediakan cara untuk memverifikasi dan memvalidasi bahwa klaster Amazon ECS Anda telah memenuhi prasyarat untuk menggunakan fitur ECS Exec. Skrip Exec Checker memverifikasiAWS CLI lingkungan dan klaster dan tugas Anda siap untuk ECS Exec, dengan memanggil berbagai API atas nama Anda. Alat ini memerlukan versi terbaru AWS CLI dan jq
tersedia. Untuk informasi selengkapnya, lihat Amazon ECS Exec Checker
Terjadi kesalahan saat memanggil execute-command
Jika terjadi kesalahan The execute command failed
, berikut ini kemungkinan penyebabnya.
-
Tugas tidak memiliki izin yang diperlukan. Verifikasi bahwa ketentuan tugas yang digunakan untuk meluncurkan tugas Anda memiliki peran IAM tugas yang ditentukan dan bahwa peran tersebut memiliki izin yang diperlukan. Untuk informasi selengkapnya, lihat Izin IAM diperlukan untuk ECS Exec.
-
Agen SSM tidak diinstal atau tidak berjalan
-
Ada antarmuka Amazon VPC endpoint untuk Amazon ECS, tetapi tidak ada satu untuk Manajer Sesi Systems Manager