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 i contenitori Amazon ECS 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, è possibile utilizzare ECS Exec per interagire facilmente con vari processi nei container e risolvere i problemi delle applicazioni. Inoltre, negli scenari di produzione, puoi utilizzarlo per ottenere un accesso ininterrotto ai contenitori per risolvere i problemi.
Puoi eseguire comandi in un contenitore Linux o Windows in esecuzione utilizzando ECS Exec dall'API Amazon ECS, AWS Command Line Interface (AWS CLI) o dalla CLI AWS SDKs AWS Copilot. Per informazioni dettagliate sull'utilizzo di ECS Exec e per una guida video sull'utilizzo della CLI di Copilot, consulta Copilot AWS 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 per controllare chi ha avuto accesso CloudTrail a un contenitore.
Considerazioni
Per questo argomento, è necessario acquisire familiarità con i seguenti aspetti relativi all'utilizzo di ECS Exec:
-
ECS Exec non è attualmente supportato utilizzando. AWS Management Console
La pagina dei dettagli dei cluster mostra la registrazione e la chiave gestita AWS KMS dal cliente utilizzate per crittografare i dati tra il client locale e il contenitore.
-
ECS Exec potrebbe non funzionare come previsto quando viene eseguito su sistemi operativi non supportati da Systems Manager. Per informazioni sui sistemi operativi supportati, consulta Tipi di sistema operativo nella Guida per l'AWS Systems Manager utente.
-
ECS Exec è supportato per le attività eseguite sulla seguente infrastruttura:
-
Contenitori Linux su Amazon EC2 su qualsiasi AMI ottimizzata per Amazon ECS, 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 ottimizzati per Windows Amazon ECS AMIs (con la versione Container Agent
1.56
o successiva):-
AMI Windows Server 2022 Full ottimizzata per Amazon ECS
-
AMI Windows Server 2022 Core ottimizzata per Amazon ECS
-
AMI Windows Server 2019 Full ottimizzata per Amazon ECS
-
AMI Windows Server 2019 Core ottimizzata per Amazon ECS
-
AMI Windows Server 20H2 Core ottimizzata per Amazon ECS
-
-
-
Se hai configurato un proxy HTTP 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 i metadati e il traffico dei ruoli IAM. Se non configuri la variabile diNO_PROXY
ambiente, possono verificarsi errori durante il recupero dei metadati dell'istanza o delle credenziali del ruolo IAM dall'endpoint di metadati all'interno del contenitore. L'impostazione della variabile diNO_PROXY
ambiente come consigliato filtra i metadati e il traffico IAM in modo che le richieste non passino attraverso il proxy.169.254.169.254 and 169.254.170.2
HTTP
-
ECS Exec e Amazon VPC
-
Se utilizzi gli endpoint dell'interfaccia Amazon VPC con Amazon ECS, devi creare tali endpoint per Session Manager di Systems Manager (
ssmmessages
). Per ulteriori informazioni sugli endpoint VPC di Systems Manager, vedere Utilizzare AWS PrivateLink per configurare un endpoint VPC per Session Manager nella Guida per l'utente.AWS Systems Manager -
Se utilizzi gli endpoint dell'interfaccia Amazon VPC con Amazon ECS e AWS KMS key per la crittografia, devi creare tali endpoint per AWS KMS key. Per ulteriori informazioni, consulta Connessione a AWS KMS key mediante un endpoint VPC nella Guida per gli sviluppatori di AWS Key Management Service .
-
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 gateway NAT), devi creare l'interfaccia Amazon VPC (endpoint) per Systems Manager Session Manager ().ssmmessages
Per ulteriori informazioni sulle considerazioni relative alla modalità di reteawsvpc
, consulta Considerazioni. Per ulteriori informazioni sugli endpoint VPC di Systems Manager, vedere Utilizzare AWS PrivateLink per configurare un endpoint VPC per Session Manager nella Guida per l'utente.AWS Systems Manager
-
-
ECS Exec e SSM
-
Quando un utente esegue comandi su un container utilizzando ECS Exec, questi comandi vengono eseguiti come utente
root
. SSM Agent e i relativi processi figlio vengono eseguiti come root anche quando si specifica un ID utente per il container. -
L'agente SSM richiede la possibilità di scrivere sul file system del contenitore 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 l'avvio di sessioni di SSM al di fuori dell'operazione
execute-command
sia possibile, le sessioni non saranno registrate e saranno conteggiate rispetto al limite di sessione. Si consiglia di limitare questo accesso negando l'operazionessm:start-session
con una policy IAM. Per ulteriori informazioni, consulta Limitazione dell'accesso all'operazione Avvia sessione.
-
-
Le seguenti funzionalità funzionano come contenitore sidecar. 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à. -
ECS Exec utilizza parte della CPU e della memoria. Sarà necessario adattare questi valori quando si specificano le allocazioni di risorse CPU e memoria nella definizione di 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. -
Puoi avere solo una sessione ECS Exec per ogni spazio dei nomi dell'ID processo (PID). Se condividi uno spazio dei nomi PID in un'attività, puoi avviare le sessioni ECS Exec solo in un container.
-
La sessione di ECS Exec ha un valore di timeout di inattività pari a 20 minuti. Questo valore non può essere modificato.
-
Non è possibile 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.
-
Devi utilizzare un ruolo attività con le autorizzazioni appropriate per ECS Exec. Per ulteriori informazioni, consulta Ruolo IAM dell'attività.
-
ECS Exec ha requisiti di versione a seconda che le attività siano ospitate su Amazon EC2 o: AWS Fargate
-
Se utilizzi Amazon EC2, devi utilizzare un'AMI ottimizzata per Amazon ECS rilasciata 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
ECS Exec utilizza AWS Systems Manager (SSM) Session Manager per stabilire una connessione con il contenitore in esecuzione e utilizza le policy AWS Identity and Access Management (IAM) per controllare l'accesso ai comandi in esecuzione in un contenitore in esecuzione. Ciò è reso possibile collegando i file binari di SSM Agent necessari nel container. L'Amazon ECS o AWS Fargate l'agente è responsabile dell'avvio dell'agente principale SSM 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.
Utilizzo di ECS Exec
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. Ciò rimuove tutti i processi secondari rilevati dall'agente SSM zombie. 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
" }
Attivazione di ECS Exec per attività e 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:,, o. create-service
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 abilitato ECS Exec per un'attività, è possibile emettere il comando seguente per confermare che l'attività è pronta per l'uso. 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 ECS Exec
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 ECS supporta solo l'avvio di sessioni interattive, pertanto è necessario utilizzare il flag --interactive
.
Il comando seguente eseguirà un /bin/sh
comando interattivo su un contenitore denominato
per un'attività con un ID di. container-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 ECS Exec
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 utilizzando ECS Exec. L'impostazione predefinita prevede l'invio di log a CloudWatch Logs utilizzando il driver di awslogs
log configurato nella definizione dell'attività. Se si desidera fornire una configurazione personalizzata, AWS CLI supporta un --configuration
flag sia per i comandi che per. create-cluster
update-cluster
L'immagine del contenitore richiede script
e cat
deve essere installata 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 proprietà logging
determina il comportamento della funzionalità di registrazione di ECS Exec:
-
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.
Autorizzazioni IAM richieste per Amazon CloudWatch Logs o Amazon S3 Logging
Per abilitare la registrazione, il ruolo del processo Amazon ECS a cui si fa riferimento nella definizione di 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.
Autorizzazioni IAM necessarie per la crittografia utilizzando le proprie 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 chiave KMS, è necessario creare una chiave KMS e aggiungere l'autorizzazione kms:Decrypt
al ruolo IAM del processo. Questa autorizzazione sarà utilizzata dal tuo container per decrittare i dati. Per ulteriori informazioni sulla creazione di una chiave KMS, consulta Creazione di chiavi.
Aggiungi la seguente policy in linea al tuo ruolo Task IAM che richiede le AWS KMS autorizzazioni. Per ulteriori informazioni, consulta Autorizzazioni ECS Exec.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": "
kms-key-arn
" } ] }
Per crittografare i dati utilizzando la propria chiave KMS, all'utente o al gruppo che utilizza l'operazione execute-command
deve essere concessa l'autorizzazione kms:GenerateDataKey
.
La seguente policy di esempio per l'utente o il gruppo contiene l'autorizzazione necessaria per utilizzare la propria chiave KMS. È necessario specificare l'Amazon Resource Name (ARN) della chiave KMS.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:GenerateDataKey" ], "Resource": "
kms-key-arn
" } ] }
Utilizzo delle policy IAM per limitare l'accesso a ECS Exec
Limiti l'accesso degli utenti all'azione dell'API execute-command utilizzando una o più delle seguenti chiavi di condizione 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 policy IAM di esempio, gli utenti possono eseguire comandi in container in esecuzione all'interno di processi con un tag che dispone di una chiave environment
e un valore development
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/cluster-name" ],
"Condition": { "StringEquals": { "ecs:ResourceTag/environment": "development" } } } ] }
Con l'esempio di policy IAM riportato di seguito, gli utenti non possono utilizzare l'API execute-command
quando il nome del container è production-app
.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "
Deny
", "Action": [ "ecs:ExecuteCommand" ], "Resource": "*", "Condition": { "StringEquals": { "ecs:container-name": "production-app
" } } } ] }
Con le seguenti policy IAM, gli utenti possono avviare i processi 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
Perché l'operazione API execute-command
contiene solo risorse di processo e cluster in una richiesta, vengono valutati solo i tag di cluster e processo.
Per ulteriori informazioni sulle chiavi di condizione della policy IAM, consulta Operazioni, risorse e chiavi di condizione per Amazon Elastic Container Service in Service Authorization Reference.
Limitazione dell'accesso all'operazione Avvia sessione
Mentre è possibile avviare sessioni SSM sul container al di fuori di ECS Exec, ciò potrebbe causare potenzialmente la mancata registrazione delle sessioni. Anche le sessioni avviate al di fuori di ECS Exec vengono conteggiate per la quota di sessione. Si consiglia di limitare questo accesso negando l'operazione ssm:start-session
direttamente per i processi Amazon ECS con una policy IAM. Puoi negare l'accesso a tutti i processi Amazon ECS o a processi specifici in base ai tag utilizzati.
Di seguito è riportato un esempio di policy IAM che nega l'accesso all'operazione ssm:start-session
per i processi in tutte le regioni con un nome 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/*" } ] }
Di seguito è riportato un esempio di policy IAM che nega l'accesso all'operazione ssm:start-session
sulle risorse in tutte le regioni con chiave di tag Task-Tag-Key
e valore di 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.