Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Monitora ECS i container Amazon con ECS Exec
Con Amazon ECS Exec, puoi interagire direttamente con i container senza dover prima interagire con il sistema operativo del container host, aprire le porte in entrata o gestire le chiavi. SSH Puoi usare ECS Exec per eseguire comandi o inserire una shell in un contenitore in esecuzione su un'EC2istanza Amazon o su AWS Fargate. In questo modo è più semplice raccogliere informazioni diagnostiche e risolvere rapidamente gli errori. Ad esempio, in un contesto di sviluppo, puoi usare ECS Exec per interagire facilmente con vari processi nei tuoi contenitori e risolvere i problemi delle tue applicazioni. Inoltre, negli scenari di produzione, è possibile utilizzarlo per ottenere un accesso ininterrotto ai contenitori per il debug dei problemi.
Puoi eseguire comandi in un contenitore Linux o Windows in esecuzione utilizzando ECS Exec da Amazon ECSAPI, AWS Command Line Interface (AWS CLI) o AWS CLI Copilot. AWS SDKs Per informazioni dettagliate sull'uso di ECS Exec e per una guida video sull'utilizzo di Copilot, consulta Copilot AWS CLI GitHub documentazione.
È inoltre possibile utilizzare ECS Exec per mantenere politiche di controllo degli accessi più rigorose. Attivando selettivamente questa funzionalità, è possibile controllare chi può eseguire comandi e quali processi possono eseguire tali comandi. Con un registro di ogni comando e del relativo output, puoi usare ECS Exec per visualizzare quali attività sono state eseguite e puoi usarlo CloudTrail per controllare chi ha avuto accesso a un contenitore.
Considerazioni
Per questo argomento, è necessario conoscere i seguenti aspetti relativi all'uso di Exec: ECS
-
ECSExec non è attualmente supportato utilizzando. AWS Management Console
-
ECSExec potrebbe non funzionare come previsto quando viene eseguito su sistemi operativi non supportati da Systems Manager. Per informazioni sui sistemi operativi supportati, vedere Tipi di sistema operativo nella Guida per l'AWS Systems Manager utente.
-
ECSExec è supportato per le attività eseguite sulla seguente infrastruttura:
-
Contenitori Linux su Amazon EC2 su qualsiasi dispositivo ECS ottimizzato per AmazonAMI, incluso Bottlerocket
-
Contenitori Linux e Windows su istanze esterne (Amazon ECS Anywhere)
-
Contenitori Linux e Windows su AWS Fargate
-
Contenitori Windows su Amazon EC2 sui seguenti sistemi Windows ECS ottimizzati per Amazon AMIs (con la versione Container Agent
1.56
o successiva):-
Windows Server 2022 ECS completo ottimizzato per Amazon AMI
-
Windows Server 2022 ECS Core ottimizzato per Amazon AMI
-
Windows Server 2019 ECS completo ottimizzato per Amazon AMI
-
Windows Server 2019 ECS Core ottimizzato per Amazon AMI
-
Windows Server ECS 20H2 Core ottimizzato per Amazon AMI
-
-
-
Se hai configurato un HTTP proxy per la tua attività, imposta la variabile di
NO_PROXY
ambiente su per"NO_PROXY=169.254.169.254,169.254.170.2"
aggirare il proxy, ad EC2 esempio il traffico di metadati e ruoli. IAM Se non configuri la variabile diNO_PROXY
ambiente, possono verificarsi errori durante il recupero dei metadati dell'istanza o delle credenziali di IAM ruolo dall'endpoint dei metadati all'interno del contenitore. L'impostazione della variabile diNO_PROXY
ambiente come consigliato filtra i metadati e il IAM traffico in modo che le richieste non passino attraverso il proxy.169.254.169.254 and 169.254.170.2
HTTP
-
ECSExec e Amazon VPC
-
Se utilizzi l'interfaccia Amazon VPC endpoints con AmazonECS, devi creare l'interfaccia Amazon VPC endpoints per Systems Manager Session Manager ()
ssmmessages
. Per ulteriori informazioni sugli VPC endpoint di Systems Manager, vedere Utilizzare AWS PrivateLink per configurare un VPC endpoint per Session Manager nella Guida per l'AWS Systems Manager utente. -
Se utilizzi l'interfaccia Amazon VPC endpoint con Amazon ECS e la utilizzi AWS KMS key per la crittografia, devi creare l'interfaccia per cui Amazon VPC endpoint. AWS KMS keyPer ulteriori informazioni, consulta Connessione AWS KMS key tramite un VPC endpoint nella Guida per gli AWS Key Management Service sviluppatori.
-
Se hai attività che vengono eseguite su EC2 istanze Amazon, utilizza la modalità
awsvpc
di rete. Se non disponi di accesso a Internet (ad esempio se non sei configurato per utilizzare un NAT gateway), devi creare l'interfaccia Amazon VPC endpoints per Systems Manager Session Manager (ssmmessages
). Per ulteriori informazioni sulle considerazioni relative alla modalità di reteawsvpc
, consulta Considerazioni. Per ulteriori informazioni sugli VPC endpoint di Systems Manager, vedere Utilizzare AWS PrivateLink per configurare un VPC endpoint per Session Manager nella Guida per l'AWS Systems Manager utente.
-
-
ECSExec e SSM
-
Quando un utente esegue comandi su un contenitore utilizzando ECS Exec, questi comandi vengono eseguiti come utente.
root
L'SSMagente e i relativi processi secondari vengono eseguiti come root anche quando si specifica un ID utente per il contenitore. -
L'SSMagente richiede che il file system del contenitore possa essere scritto per creare le directory e i file richiesti. Pertanto, la specifica del file system root di sola lettura utilizzando il parametro di definizione di attività
readonlyRootFilesystem
, o qualsiasi altro metodo, non è supportata. -
Sebbene sia possibile avviare SSM sessioni al di fuori dell'
execute-command
azione, ciò comporta che le sessioni non vengano registrate e vengano conteggiate ai fini del limite di sessioni. Ti consigliamo di limitare questo accesso negando l'ssm:start-session
azione utilizzando una politica. IAM Per ulteriori informazioni, consulta Limitazione dell'accesso all'operazione Avvia sessione.
-
-
Le seguenti funzionalità funzionano come contenitore secondario. Pertanto, è necessario specificare il nome del contenitore su cui eseguire il comando.
-
Monitoraggio del runtime
-
Service Connect
-
-
Gli utenti possono eseguire tutti i comandi disponibili nel contesto del container. Le seguenti operazioni potrebbero causare processi orfani e zombie: terminare il processo principale del container, terminare l'agente dei comandi ed eliminare le dipendenze. Per ripulire i processi zombie, ti consigliamo di aggiungere il flag
initProcessEnabled
alla definizione di attività. -
ECSExec utilizza some CPU e memory. È consigliabile tenere conto di questo aspetto quando si specificano le CPU allocazioni delle risorse di memoria nella definizione dell'attività.
-
È necessario utilizzare la AWS CLI versione
1.22.3
o successiva o la AWS CLI versione2.3.6
o successiva. Per informazioni su come aggiornare il AWS CLI, vedere Installazione o aggiornamento della versione più recente di AWS CLI nella Guida per l'AWS Command Line Interface utente versione 2. -
È possibile avere una sola sessione ECS Exec per spazio dei nomi process ID (PID). Se si condivide uno spazio dei PID nomi in un'attività, è possibile avviare le sessioni ECS Exec solo in un contenitore.
-
La sessione ECS Exec ha un tempo di timeout di inattività di 20 minuti. Questo valore non può essere modificato.
-
Non puoi attivare ECS Exec per le attività esistenti. Il servizio può essere attivato solo per le nuove attività.
-
Non è possibile utilizzare ECS Exec quando si avvia un'attività su un cluster che utilizza la scalabilità gestita con posizionamento asincrono (avvia un'attività senza istanza).
run-task
-
Non è possibile eseguire ECS Exec su contenitori Microsoft Nano Server.
Prerequisiti
Prima di iniziare a utilizzare ECS Exec, assicurati di aver completato queste azioni:
-
Istalla e configura la AWS CLI. Per ulteriori informazioni, consulta Get started with the AWS CLI.
-
Installa il plug-in Session Manager per AWS CLI. Per ulteriori informazioni, consulta Installazione del plug-in Session Manager per AWS CLI.
-
È necessario utilizzare un ruolo di attività con le autorizzazioni appropriate per ECS Exec. Per ulteriori informazioni, vedere Task role. IAM
-
ECSExec ha requisiti di versione a seconda che le tue attività siano ospitate su Amazon EC2 o AWS Fargate:
-
Se utilizzi AmazonEC2, devi utilizzare un Amazon ECS ottimizzato AMI rilasciato dopo il 20 gennaio 2021, con una versione agente 1.50.2 o successiva. Per ulteriori informazioni, consulta Amazon ECS optimized AMIs.
-
Se utilizzi AWS Fargate, devi utilizzare una versione della piattaforma
1.4.0
o superiore (Linux) o1.0.0
(Windows). Per ulteriori informazioni, consulta Versioni della piattaforma AWS Fargate.
-
Architettura
ECSExec utilizza AWS Systems Manager (SSM) Session Manager per stabilire una connessione con il contenitore in esecuzione e utilizza le politiche AWS Identity and Access Management (IAM) per controllare l'accesso ai comandi in esecuzione in un contenitore in esecuzione. Ciò è reso possibile montando in bind i binari degli SSM agenti necessari nel contenitore. L'Amazon ECS o l' AWS Fargate agente è responsabile dell'avvio dell'agente SSM principale all'interno del contenitore insieme al codice dell'applicazione. Per ulteriori informazioni, consulta Systems Manager Session Manager.
Puoi controllare quale utente ha effettuato l'accesso al contenitore utilizzando l'ExecuteCommand
evento AWS CloudTrail e registrare ogni comando (e il relativo output) su Amazon S3 o Amazon CloudWatch Logs. Per crittografare i dati tra il client locale e il contenitore con la tua chiave di crittografia, devi fornire la chiave AWS Key Management Service ()AWS KMS.
Usare Exec ECS
Modifiche facoltative alla definizione di attività
Se si imposta il parametro di definizione dell'attività initProcessEnabled
sutrue
, viene avviato il processo di inizializzazione all'interno del contenitore. Questo rimuove tutti i processi secondari di Zombie SSM Agent trovati. Il seguente comando fornisce un esempio.
{ "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
" }
ECSAttivazione di Exec per le attività e i servizi
Puoi attivare la funzionalità ECS Exec per i tuoi servizi e le tue attività autonome specificando il --enable-execute-command
flag quando usi uno dei seguenti AWS CLI comandi: create-service
,, o. update-service
start-task
run-task
Ad esempio, se si esegue il comando seguente, la funzionalità ECS Exec viene attivata per un servizio appena creato che viene eseguito su Fargate. Per ulteriori informazioni sulla creazione dei servizi, consulta create-service.
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
Dopo aver attivato ECS Exec per un'operazione, è possibile eseguire il comando seguente per confermare che l'attività è pronta per essere utilizzata. Se la proprietà lastStatus
di ExecuteCommandAgent
è riportata come RUNNING
e la proprietà enableExecuteCommand
è impostata su true
, allora il processo è pronto.
aws ecs describe-tasks \ --cluster
cluster-name
\ --taskstask-id
Il seguente frammento di output è un esempio di cosa potresti vedere.
{ "tasks": [ { ... "containers": [ { ... "managedAgents": [ { "lastStartedAt": "2021-03-01T14:49:44.574000-06:00", "name": "ExecuteCommandAgent", "lastStatus": "RUNNING" } ] } ], ... "enableExecuteCommand": true, ... } ] }
Esecuzione di comandi tramite Exec ECS
Dopo aver confermato che ExecuteCommandAgent
è in esecuzione, è possibile aprire una shell interattiva sul container utilizzando il seguente comando. Se i processo contiene più container, è necessario specificare il nome del container utilizzando il flag --container
. Amazon supporta ECS solo l'avvio di sessioni interattive, quindi è necessario utilizzare il --interactive
flag.
Il comando seguente eseguirà un /bin/sh
comando interattivo su un contenitore denominato in base
a un'attività con un ID dicontainer-name
task-id
.
task-id
È l'Amazon Resource Name (ARN) dell'attività.
aws ecs execute-command --cluster
cluster-name
\ --tasktask-id
\ --containercontainer-name
\ --interactive \ --command"/bin/sh"
Registrazione tramite Exec ECS
Attivazione della registrazione delle attività e dei servizi
Importante
Per ulteriori informazioni sui CloudWatch prezzi, consulta la sezione Prezzi. CloudWatch
Amazon ECS fornisce una configurazione predefinita per i comandi di registrazione eseguiti con ECS Exec inviando i log a CloudWatch Logs utilizzando il driver di awslogs
log configurato nella definizione dell'attività. Se desideri fornire una configurazione personalizzata, la AWS CLI
supporta --configuration
per entrambi i comandi create-cluster
e update-cluster
. È anche importante sapere che l'immagine del contenitore richiede script
e deve essere installata cat
per poter caricare correttamente i log dei comandi su Amazon S3 CloudWatch o Logs. Per ulteriori informazioni sulla creazione dei cluster, consulta create-cluster.
Nota
Questa configurazione gestisce solo la registrazione della sessione execute-command
. Non influisce sulla registrazione della tua applicazione.
L'esempio seguente crea un cluster e quindi registra l'output nei tuoi CloudWatch Logs LogGroup named cloudwatch-log-group-name
e nel tuo bucket Amazon S3 denominato. s3-bucket-name
È necessario utilizzare una chiave gestita AWS KMS dal cliente per crittografare il gruppo di log quando si imposta l'opzione su. CloudWatchEncryptionEnabled
true
Per informazioni su come crittografare il gruppo di log, consulta Crittografare i dati di registro in CloudWatch Logs using AWS Key Management Service, nella Guida per l'utente.Amazon CloudWatch Logs
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
\ } \ }"
La logging
proprietà determina il comportamento della funzionalità di registrazione di Exec: ECS
-
NONE
: la registrazione è disattivata. -
DEFAULT
: i log vengono inviati al driverawslogs
configurato. Se il driver non è configurato, non viene salvato alcun registro. -
OVERRIDE
: i log vengono inviati al bucket Amazon CloudWatch Logs fornito LogGroup, Amazon S3 o a entrambi.
IAMautorizzazioni richieste per Amazon CloudWatch Logs o Amazon S3 Logging
Per abilitare la registrazione, il ruolo dell'ECSattività di Amazon a cui si fa riferimento nella definizione dell'attività deve disporre di autorizzazioni aggiuntive. Queste autorizzazioni aggiuntive possono essere aggiunte al ruolo del processo sotto forma di policy. Sono diversi a seconda che tu indirizzi i log ad Amazon CloudWatch Logs o Amazon S3.
IAMautorizzazioni necessarie per la crittografia utilizzando la propria AWS KMS key (chiave) KMS
Per impostazione predefinita, i dati trasferiti tra il client locale e il contenitore utilizzano la crittografia TLS 1.2 che fornisce. AWS Per crittografare ulteriormente i dati utilizzando la propria KMS chiave, è necessario creare una KMS chiave e aggiungere l'kms:Decrypt
autorizzazione al proprio IAM ruolo di attività. Questa autorizzazione sarà utilizzata dal tuo container per decrittare i dati. Per ulteriori informazioni sulla creazione di una KMS chiave, consulta Creazione di chiavi.
Aggiungi la seguente politica in linea al tuo IAM ruolo di attività che richiede le AWS KMS autorizzazioni. Per ulteriori informazioni, consulta ECSAutorizzazioni Exec.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "
kms-key-arn
" } ] }
Affinché i dati vengano crittografati utilizzando la propria KMS chiave, è necessario concedere l'autorizzazione all'utente o al gruppo che utilizza l'execute-command
kms:GenerateDataKey
azione.
La seguente politica di esempio per l'utente o il gruppo contiene l'autorizzazione richiesta per utilizzare la propria KMS chiave. Devi specificare l'Amazon Resource Name (ARN) della tua KMS chiave.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "
kms-key-arn
" } ] }
Utilizzo IAM di politiche per limitare l'accesso a ECS Exec
È possibile limitare l'accesso degli utenti all'APIazione execute-command utilizzando una o più delle seguenti chiavi relative alle condizioni della policy: IAM
-
aws:ResourceTag/
clusterTagKey
-
ecs:ResourceTag/
clusterTagKey
-
aws:ResourceTag/
taskTagKey
-
ecs:ResourceTag/
taskTagKey
-
ecs:container-name
-
ecs:cluster
-
ecs:task
-
ecs:enable-execute-command
Con la seguente IAM policy di esempio, gli utenti possono eseguire comandi in contenitori in esecuzione all'interno di attività con un tag contenente una environment
chiave e un development
valore e in un cluster denominato. cluster-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
" } } } ] }
Con il seguente esempio di IAM policy, gli utenti non possono utilizzare execute-command
API quando il nome del contenitore èproduction-app
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "
Deny
", "Action": [ "ecs:ExecuteCommand" ], "Resource": "*", "Condition": { "StringEquals": { "ecs:container-name": "production-app
" } } } ] }
Con la seguente IAM politica, gli utenti possono avviare le attività solo quando ECS Exec è disattivato.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "
Allow
", "Action": [ "ecs:RunTask", "ecs:StartTask", "ecs:CreateService", "ecs:UpdateService" ], "Resource": "*", "Condition": { "StringEquals": { "ecs:enable-execute-command": "false
" } } } ] }
Nota
Poiché l'execute-command
APIazione contiene solo attività e risorse del cluster in una richiesta, vengono valutati solo i tag cluster e task.
Per ulteriori informazioni sulle chiavi delle condizioni delle IAM politiche, consulta Azioni, risorse e chiavi di condizione per Amazon Elastic Container Service nel Service Authorization Reference.
Limitazione dell'accesso all'operazione Avvia sessione
Sebbene sia possibile avviare SSM sessioni sul contenitore al di fuori di ECS Exec, ciò potrebbe potenzialmente comportare la mancata registrazione delle sessioni. Anche le sessioni avviate al di fuori di ECS Exec vengono conteggiate nella quota di sessione. Ti consigliamo di limitare questo accesso negando l'ssm:start-session
azione direttamente per le tue ECS attività su Amazon utilizzando una IAM politica. Puoi negare l'accesso a tutte le ECS attività di Amazon o ad attività specifiche in base ai tag utilizzati.
Di seguito è riportato un esempio di IAM politica che nega l'accesso all'ssm:start-session
azione per le attività in tutte le regioni con un nome di cluster specificato. Facoltativamente puoi includere un carattere jolly con
.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/*" ] } ] }
Di seguito è riportato un esempio di IAM politica che nega l'accesso all'ssm:start-session
azione sulle risorse in tutte le regioni contrassegnate con la chiave del tag Task-Tag-Key
e il valore del 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
" } } } ] }
Per assistenza su eventuali problemi che potresti riscontrare durante l'utilizzo di Amazon ECS Exec, consulta Risoluzione dei problemi con Exec.