Monitora ECS i container Amazon con ECS Exec - Amazon Elastic Container Service

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 di NO_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 di NO_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 rete awsvpc, 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-commandazione, 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-sessionazione 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 versione 2.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) o 1.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'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.

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-servicestart-taskrun-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-definition task-definition-name \ --enable-execute-command \ --service-name service-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 \ --tasks task-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 container-name a un'attività con un ID ditask-id.

task-idÈ l'Amazon Resource Name (ARN) dell'attività.

aws ecs execute-command --cluster cluster-name \ --task task-id \ --container container-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 fornisce ECS anche parametri di monitoraggio forniti senza costi aggiuntivi. Per ulteriori informazioni, consulta Monitora Amazon ECS utilizzando 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 driver awslogs 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.

Amazon CloudWatch Logs

La seguente policy di esempio aggiunge le autorizzazioni Amazon CloudWatch Logs richieste.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:region:account-id:log-group:/aws/ecs/cloudwatch-log-group-name:*" } ] }
Amazon S3

La policy dell'esempio seguente aggiunge le autorizzazioni Amazon S3 necessarie.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetBucketLocation" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetEncryptionConfiguration" ], "Resource": "arn:aws:s3:::s3-bucket-name" }, { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::s3-bucket-name/*" } ] }

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:Decryptautorizzazione 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-commandkms:GenerateDataKeyazione.

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-commandAPIazione 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-sessionazione 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-sessionazione 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-sessionazione 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.