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, è possibile utilizzarlo per ottenere un accesso ininterrotto ai container per eseguire il debug dei 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 i dettagli sull'uso di ECS Exec e per una guida video sull'utilizzo della AWS CLI di Copilot, consulta la documentazione di Copilot. GitHub
È inoltre possibile utilizzare ECS Exec per mantenere policy di controllo degli accessi più severe. 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, è possibile utilizzare ECS Exec per visualizzare quali attività sono state eseguite e per verificare chi ha effettuato l'accesso a un contenitore. CloudTrail
Considerazioni
Considera le informazioni seguenti durante l'utilizzo di ECS Exec:
-
ECS Exec potrebbe non funzionare come previsto quando viene eseguito su sistemi operativi non supportati da Systems Manager. Per ulteriori informazioni sui sistemi operativi supportati, consulta Tipi di sistemi operativi nella Guida per l'utente di AWS Systems Manager .
-
ECS Exec è supportato per le attività eseguite sulla seguente infrastruttura:
-
Contenitori Linux su Amazon EC2 su qualsiasi AMI ottimizzata per Amazon ECS, incluso Bottlerocket
-
Container 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.56o 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_PROXYambiente 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 di ambienteNO_PROXY, possono verificarsi errori durante il recupero dei metadati dell'istanza o delle credenziali del ruolo IAM dall'endpoint dei metadati all'interno del container. L'impostazione della variabile di ambienteNO_PROXYcome consigliato filtra i metadati e il traffico IAM in modo che le richieste a169.254.169.254 and 169.254.170.2non passino attraverso il proxyHTTP. -
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 l'interfaccia Amazon VPC con Amazon ECS e la utilizzi AWS KMS key per la crittografia, devi creare l'interfaccia per cui l'endpoint Amazon VPC. 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à
awsvpcdi rete. Se non disponi di accesso a Internet (ad esempio, se non puoi utilizzare un gateway NAT), devi creare gli endpoint dell'interfaccia Amazon VPC per Gestione sessione di Systems 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
-
-
Amazon ECS Exec non è supportato per le attività eseguite in una configurazione di IPv6 sola configurazione. Per ulteriori informazioni sull'esecuzione di attività in una configurazione IPv6 -only, consulta e. Opzioni di rete di attività di Amazon ECS per Fargate Opzioni di task networking di Amazon ECS per EC2
-
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 che il file system del container 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 l'avvio di sessioni di SSM al di fuori dell'operazione
execute-commandsia possibile, le sessioni non saranno registrate e saranno conteggiate rispetto al limite di sessione. Si consiglia di limitare questo accesso negando l'operazionessm:start-sessioncon una policy IAM. Per ulteriori informazioni, consulta Limitazione dell'accesso all'operazione Avvia sessione.
-
-
Le seguenti funzionalità funzionano come container sidecar. Pertanto, è necessario specificare il nome del container 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
initProcessEnabledalla definizione di attività. -
ECS Exec utilizza parte di CPU e 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.3o successiva o AWS CLI la versione2.3.6o 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 namespace dell'ID processo (PID). Se condividi un namespace 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 utilizza
run-taskper avviare un'attività su un cluster che utilizza la scalabilità gestita con collocamento asincrono (avviare un'attività senza istanza). -
Non è possibile eseguire ECS Exec su container Nano Server di Microsoft.
Architecture
ECS Exec 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 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'ExecuteCommandevento 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.
Configurazione di ECS Exec
Per utilizzare ECS Exec, devi prima attivare la funzionalità per le tue attività e i tuoi servizi e poi eseguire i comandi nei container.
Modifiche facoltative alla definizione di attività
Se imposti il parametro di definizione dell'attività da initProcessEnabled a true, questo avvia il processo di init all'interno del container. In questo modo, vengono rimossi 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
È possibile attivare la funzionalità ECS Exec per i servizi e le attività autonome specificando il --enable-execute-command flag quando si utilizza uno dei seguenti AWS CLI comandi: create-service,, o. update-servicestart-taskrun-task
Ad esempio, se esegui il seguente comando, 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 \ --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
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 \ --clustercluster-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
Registrazione tramite ECS Exec
È possibile configurare la registrazione per le sessioni ECS Exec per acquisire i comandi e il relativo output a fini di controllo e risoluzione dei problemi.
Attivazione della registrazione nelle attività e nei 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 dei 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-namecluster-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 driverawslogsconfigurato. Se il driver non è configurato, non viene salvato alcun log. -
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.
È necessario aggiungere la seguente policy in linea al ruolo IAM del processo che richiede le autorizzazioni AWS KMS . Per ulteriori informazioni, consulta Autorizzazioni ACS Exec.
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.
Utilizzo delle policy IAM per limitare l'accesso a ECS Exec
Puoi limitare l'accesso utente all'operazione API execute-command utilizzando una o più delle seguenti chiavi di condizione delle 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.
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.
Con le seguenti policy IAM, gli utenti possono avviare i processi solo quando ECS Exec è disattivato.
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
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.
Risoluzione dei problemi relativi a ECS Exec
Per ulteriore supporto nella risoluzione dei problemi, consulta Risoluzione dei problemi con Exec.