IAMRuolo ECS dell'attività di Amazon - 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à.

IAMRuolo ECS dell'attività di Amazon

Alle tue ECS attività Amazon può essere associato un IAM ruolo. Le autorizzazioni concesse nel IAM ruolo vengono assunte dai contenitori in esecuzione nell'attività. Questo ruolo consente al codice dell'applicazione (sul contenitore) di utilizzare altri AWS servizi. Il ruolo dell'attività è necessario quando l'applicazione accede ad altri AWS servizi, come Amazon S3. Per le IAM autorizzazioni necessarie ad Amazon ECS per estrarre le immagini dei contenitori ed eseguire l'operazione, consultaIAMRuolo di esecuzione delle ECS attività di Amazon.

Di seguito sono riportati i vantaggi dell'utilizzo dei ruoli delle attività:

  • Isolamento delle credenziali: un contenitore può recuperare solo le credenziali per il IAM ruolo definito nella definizione dell'attività a cui appartiene; un contenitore non ha mai accesso alle credenziali destinate a un altro contenitore che appartiene a un'altra attività.

  • Autorizzazione: i contenitori non autorizzati non possono accedere alle credenziali di IAM ruolo definite per altre attività.

  • Controllo: la registrazione degli accessi e degli eventi è disponibile per garantire un controllo CloudTrail retrospettivo. Le credenziali dell'attività hanno un contesto taskArn che è allegato alla sessione, quindi CloudTrail i registri mostrano quale attività utilizza quale ruolo.

Nota

Quando specifichi un IAM ruolo per un'attività, l'utente AWS CLI o l'altro SDKs nei contenitori per quell'attività utilizza esclusivamente le AWS credenziali fornite dal ruolo dell'attività e non eredita più alcuna IAM autorizzazione da Amazon EC2 o dall'istanza esterna su cui è in esecuzione.

Creazione del ruolo dell'attività IAM

Quando si crea una IAM politica da utilizzare per le attività, la politica deve includere le autorizzazioni che si desidera vengano assegnate ai contenitori delle attività. Puoi utilizzare una politica AWS gestita esistente oppure creare una politica personalizzata da zero che soddisfi le tue esigenze specifiche. Per ulteriori informazioni, consulta Creazione IAM di politiche nella Guida IAM per l'utente.

Importante

Per le ECS attività di Amazon (per tutti i tipi di lancio), ti consigliamo di utilizzare la IAM politica e il ruolo per le tue attività. Queste credenziali consentono all'attività di effettuare AWS API richieste senza sts:AssumeRole dover chiamare per assumere lo stesso ruolo già associato all'attività. Se l'attività richiede che un ruolo assuma se stesso, devi creare una policy di attendibilità che consenta esplicitamente a tale ruolo di assumere se stesso. Per ulteriori informazioni, vedere Modifica di una politica di attendibilità dei ruoli nella Guida per l'IAMutente.

Dopo aver creato la IAM policy, puoi creare un IAM ruolo che includa quella policy a cui fai riferimento nella definizione del tuo ECS task Amazon. Puoi creare il ruolo utilizzando lo use case Elastic Container Service Task nella IAM console. Quindi, puoi allegare la tua IAM politica specifica al ruolo che fornisce ai contenitori della tua attività le autorizzazioni desiderate. Di seguito viene descritto come procedere.

Se disponi di più definizioni o servizi di attività che richiedono IAM autorizzazioni, dovresti prendere in considerazione la creazione di un ruolo per ogni definizione o servizio di attività specifico con le autorizzazioni minime richieste per il funzionamento delle attività, in modo da ridurre al minimo l'accesso fornito per ciascuna attività.

Per informazioni sull'endpoint di servizio per la tua regione, consulta Service endpoints nella Guida.Riferimenti generali di Amazon Web Services

Il ruolo dell'IAMattività deve avere una politica di fiducia che specifichi il servizio. ecs-tasks.amazonaws.com L'sts:AssumeRoleautorizzazione consente alle tue attività di assumere un IAM ruolo diverso da quello utilizzato dall'EC2istanza Amazon. In questo modo, la tua attività non eredita il ruolo associato all'EC2istanza Amazon. Di seguito è illustrato un esempio di policy di attendibilità. Sostituisci l'identificatore della regione e specifica il numero di AWS account che usi per avviare le attività.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ecs-tasks.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333" } } } ] }
Importante

Quando si crea il IAM ruolo dell'attività, si consiglia di utilizzare le chiavi aws:SourceAccount o aws:SourceArn condition nella relazione di fiducia o nella IAM politica associata al ruolo per definire ulteriormente l'ambito delle autorizzazioni ed evitare la confusa questione di sicurezza secondaria. L'uso della chiave di condizioni aws:SourceArn per specificare un cluster specifico non è correntemente supportato, è necessario utilizzare il carattere jolly per specificare tutti i cluster. Per ulteriori informazioni sul problema del vicedirettore confuso e su come proteggere il proprio AWS account, consulta Il problema del vicesceriffo confuso nella Guida per l'IAMutente.

Le seguenti procedure descrivono come creare una policy per recuperare oggetti da Amazon S3 con una policy di esempio. Sostituisci tutto user input con i tuoi valori.

AWS Management Console
Per utilizzare l'editor delle JSON politiche per creare una politica
  1. Accedi a AWS Management Console e apri la IAM console all'indirizzo https://console.aws.amazon.com/iam/.

  2. Nel riquadro di navigazione a sinistra, seleziona Policies (Policy).

    Se è la prima volta che selezioni Policy, verrà visualizzata la pagina Benvenuto nelle policy gestite. Seleziona Inizia.

  3. Nella parte superiore della pagina, scegli Crea policy.

  4. Nella sezione Policy editor, scegli l'JSONopzione.

  5. Inserisci il seguente documento JSON di policy:

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:region:123456789012:*" }, "StringEquals":{ "aws:SourceAccount":"123456789012" } } } ] }
  6. Scegli Next (Successivo).

    Nota

    È possibile passare dall'opzione Visual a quella dell'JSONeditor in qualsiasi momento. Tuttavia, se apporti modifiche o scegli Avanti nell'editor visuale, IAM potresti ristrutturare la tua politica per ottimizzarla per l'editor visuale. Per ulteriori informazioni, consulta la sezione Ristrutturazione delle politiche nella Guida per l'IAMutente.

  7. Nella pagina Rivedi e crea, immettere un valore in Nome policy e Descrizione (facoltativo) per la policy in fase di creazione. Rivedi Autorizzazioni definite in questa policy per visualizzare le autorizzazioni concesse dalla policy.

  8. Seleziona Crea policy per salvare la nuova policy.

AWS CLI

Sostituisci tutto user input con i tuoi valori.

  1. Crea un file denominato s3-policy.json, con il seguente contenuto:

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject" ], "Resource":[ "arn:aws:s3:::my-task-secrets-bucket/*" ], "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:region:123456789012:*" }, "StringEquals":{ "aws:SourceAccount":"123456789012" } } } ] }
  2. Utilizzare il comando seguente per creare la IAM politica utilizzando il file del documento della JSON politica.

    aws iam create-policy \ --policy-name taskRolePolicy \ --policy-document file://s3-policy.json

Le procedure seguenti descrivono come creare un IAM ruolo di attività allegando una IAM politica creata dall'utente.

AWS Management Console
Per creare il ruolo di servizio per Elastic Container Service (IAMconsole)
  1. Accedi a AWS Management Console e apri la IAM console all'indirizzo https://console.aws.amazon.com/iam/.

  2. Nel riquadro di navigazione della IAM console, scegli Ruoli, quindi scegli Crea ruolo.

  3. Per Trusted entity type (Tipo di entità attendibile), scegli Servizio AWS.

  4. Per Servizio o caso d'uso, scegli Elastic Container Service, quindi scegli il caso d'uso Elastic Container Service Task.

  5. Scegli Next (Successivo).

  6. Per Aggiungi autorizzazioni, cerca e scegli la policy che hai creato.

  7. Scegli Next (Successivo).

  8. In Nome ruolo, immetti un nome per il ruolo. Per questo esempio, digita AmazonECSTaskS3BucketRole per il nome del ruolo.

  9. Verificare il ruolo e quindi scegliere Create role (Crea ruolo).

AWS CLI

Sostituisci tutto user input con i tuoi valori.

  1. Crea un file denominato ecs-tasks-trust-policy.json che contenga la politica di fiducia da utilizzare per il IAM ruolo dell'attività. Il file deve contenere quanto segue. Sostituisci l'identificatore della regione e specifica il numero di AWS account da utilizzare per l'avvio delle attività.

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ecs-tasks.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "ArnLike":{ "aws:SourceArn":"arn:aws:ecs:us-west-2:111122223333:*" }, "StringEquals":{ "aws:SourceAccount":"111122223333" } } } ] }
  2. Crea un IAM ruolo denominato ecsTaskRole utilizzando la politica di fiducia creata nel passaggio precedente.

    aws iam create-role \ --role-name ecsTaskRole \ --assume-role-policy-document file://ecs-tasks-trust-policy.json
  3. Recupera ARN la IAM policy che hai creato utilizzando il seguente comando. Replace (Sostituisci) taskRolePolicy con il nome della politica che hai creato.

    aws iam list-policies --scope Local --query 'Policies[?PolicyName==`taskRolePolicy`].Arn'
  4. Allega la IAM politica che hai creato al ecsTaskRole ruolo. Sostituisci il policy-arn con quello ARN della politica che hai creato.

    aws iam attach-role-policy \ --role-name ecsTaskRole \ --policy-arn arn:aws:iam:111122223333:aws:policy/taskRolePolicy

Dopo aver creato il ruolo, aggiungi ulteriori autorizzazioni al ruolo per le seguenti funzionalità.

Funzionalità Autorizzazioni aggiuntive

Usa Exec ECS

ECSAutorizzazioni Exec

Usa EC2 istanze (Windows e Linux)

Configurazione aggiuntiva EC2 delle istanze Amazon

Usa istanze esterne

Configurazione aggiuntiva dell'istanza esterna

Usa istanze Windows EC2

Configurazione aggiuntiva dell'istanza Amazon EC2 Windows

ECSAutorizzazioni Exec

La funzionalità ECSExec richiede un IAM ruolo di attività per concedere ai contenitori le autorizzazioni necessarie per la comunicazione tra l'SSMagente gestito (execute-commandagente) e il servizio. SSM È necessario aggiungere le seguenti autorizzazioni a un ruolo dell'attività e includere il IAM ruolo dell'attività nella IAM definizione dell'attività. Per ulteriori informazioni, consulta Aggiungere e rimuovere i IAM criteri nella Guida per l'IAMutente.

Utilizza la seguente politica per il tuo IAM ruolo di attività per aggiungere le SSM autorizzazioni richieste.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }

Configurazione aggiuntiva EC2 delle istanze Amazon

Ti consigliamo di limitare le autorizzazioni nel tuo ruolo di istanza del contenitore all'elenco minimo di autorizzazioni utilizzate nella politica gestita. AmazonEC2ContainerServiceforEC2Role IAM

Le tue EC2 istanze Amazon richiedono almeno la versione 1.11.0 dell'agente container per utilizzare il task role; tuttavia, ti consigliamo di utilizzare la versione più recente dell'agente container. Per informazioni sulla verifica della versione dell'agente e sull'aggiornamento alla versione più recente, consulta Aggiornamento dell'agente ECS container Amazon. Se utilizzi una versione ECS ottimizzata per AmazonAMI, la tua istanza necessita 1.11.0-1 di almeno una parte del ecs-init pacchetto. Se le tue istanze utilizzano la versione più recente ECS ottimizzata per AmazonAMI, contengono le versioni richieste dell'agente contenitore e. ecs-init Per ulteriori informazioni, consulta Linux ECS ottimizzato per Amazon AMIs.

Se non utilizzi Amazon ECS -optimized AMI per le tue istanze di container, aggiungi l'--net=hostopzione al docker run comando che avvia l'agente e le seguenti variabili di configurazione dell'agente per la configurazione desiderata (per ulteriori informazioni, consultaConfigurazione di Amazon ECS Container Agent):

ECS_ENABLE_TASK_IAM_ROLE=true

Utilizza IAM i ruoli per le attività dei contenitori con le modalità bridge di default rete.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

Utilizza IAM i ruoli per le attività per i contenitori con la modalità host di rete. Questa variabile è supportata sull'agente solo a partire dalla versione 1.12.0.

Per un esempio di comando di esecuzione, vedi Aggiornamento manuale dell'agente ECS container Amazon (per prodotti non ottimizzati per AmazonECS) AMIs. Dovrai inoltre impostare i seguenti comandi di rete sull'istanza del contenitore in modo che i contenitori delle tue attività possano recuperare le proprie AWS credenziali:

sudo sysctl -w net.ipv4.conf.all.route_localnet=1 sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679

Per fare in modo che le regole iptables vengano conservate dopo un riavvio, devi salvarle sull'istanza di container. Puoi salvare e ripristinare le regole iptables all'avvio tramite i comandi iptables-save e iptables-restore. Per ulteriori informazioni, consulta la documentazione specifica per il tuo sistema operativo.

Per impedire ai contenitori eseguiti da attività che utilizzano la modalità di awsvpc rete di accedere alle informazioni sulle credenziali fornite al profilo dell'EC2istanza Amazon, pur consentendo le autorizzazioni fornite dal ruolo dell'attività, imposta la variabile di configurazione dell'ECS_AWSVPC_BLOCK_IMDSagente su true nel file di configurazione dell'agente e riavvia l'agente. Per ulteriori informazioni, consulta Configurazione di Amazon ECS Container Agent.

Per impedire ai contenitori eseguiti da attività che utilizzano la modalità di bridge rete di accedere alle informazioni sulle credenziali fornite al profilo dell'EC2istanza Amazon, pur consentendo le autorizzazioni fornite dal ruolo dell'attività, esegui il seguente iptables comando sulle tue istanze AmazonEC2. Questo comando non influisce sui container nelle attività che usano la modalità di rete host o awsvpc. Per ulteriori informazioni, consulta Modalità di rete.

  • sudo yum install -y iptables-services; sudo iptables --insert DOCKER-USER 1 --in-interface docker+ --destination 169.254.169.254/32 --jump DROP

    Devi salvare questa iptables regola sulla tua EC2 istanza Amazon affinché sopravviva al riavvio. Quando usi Amazon ECS -optimizedAMI, puoi usare il seguente comando. Per gli altri sistemi operativi, consulta la relativa documentazione specifica.

    sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables

Configurazione aggiuntiva dell'istanza esterna

Le istanze esterne richiedono almeno la versione 1.11.0 dell'agente contenitore per utilizzare i IAM ruoli delle attività; tuttavia, consigliamo di utilizzare la versione più recente dell'agente contenitore. Per informazioni sulla verifica della versione dell'agente e sull'aggiornamento alla versione più recente, consulta Aggiornamento dell'agente ECS container Amazon. Se utilizzi una versione ECS ottimizzata per AmazonAMI, la tua istanza richiede almeno una 1.11.0-1 parte del ecs-init pacchetto. Se le tue istanze utilizzano la versione più recente ECS ottimizzata per AmazonAMI, contengono le versioni richieste dell'agente contenitore e. ecs-init Per ulteriori informazioni, consulta Linux ECS ottimizzato per Amazon AMIs.

Se non utilizzi Amazon ECS -optimized AMI per le tue istanze di container, aggiungi l'--net=hostopzione al docker run comando che avvia l'agente e le seguenti variabili di configurazione dell'agente per la configurazione desiderata (per ulteriori informazioni, consultaConfigurazione di Amazon ECS Container Agent):

ECS_ENABLE_TASK_IAM_ROLE=true

Utilizza IAM i ruoli per le attività dei contenitori con le modalità bridge di default rete.

ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true

Utilizza IAM i ruoli per le attività per i contenitori con la modalità host di rete. Questa variabile è supportata sull'agente solo a partire dalla versione 1.12.0.

Per un esempio di comando di esecuzione, vedi Aggiornamento manuale dell'agente ECS container Amazon (per prodotti non ottimizzati per AmazonECS) AMIs. Dovrai inoltre impostare i seguenti comandi di rete sull'istanza del contenitore in modo che i contenitori delle tue attività possano recuperare le proprie AWS credenziali:

sudo sysctl -w net.ipv4.conf.all.route_localnet=1 sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 sudo iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679

Per fare in modo che le regole iptables vengano conservate dopo un riavvio, devi salvarle sull'istanza di container. Puoi salvare e ripristinare le regole iptables all'avvio tramite i comandi iptables-save e iptables-restore. Per ulteriori informazioni, consulta la documentazione specifica per il tuo sistema operativo.

Configurazione aggiuntiva dell'istanza Amazon EC2 Windows

Importante

Questo vale solo per i contenitori Windows EC2 che utilizzano ruoli di attività.

Il ruolo di attività con funzionalità di Windows richiede una configurazione aggiuntivaEC2.

  • Quando avvii le istanze di container, devi configurare l'opzione -EnableTaskIAMRole nello script di dati utente dell'istanza di container. EnableTaskIAMRoleAttiva la funzionalità IAM Ruoli delle attività per le attività. Per esempio:

    <powershell> Import-Module ECSTools Initialize-ECSAgent -Cluster 'windows' -EnableTaskIAMRole </powershell>
  • Devi eseguire il bootstrap del container con i comandi di rete forniti in Script di bootstrap per ECS contenitori Amazon.

  • È necessario creare un IAM ruolo e una politica per le proprie attività. Per ulteriori informazioni, consulta Creazione del ruolo dell'attività IAM.

  • I IAM ruoli del provider di credenziali per le attività utilizzano la porta 80 sull'istanza del contenitore. Pertanto, se IAM configuri i ruoli per le attività sull'istanza del contenitore, i contenitori non possono utilizzare la porta 80 per la porta host in nessuna mappatura delle porte. Per esporre i container sulla porta 80, consigliamo di configurare un servizio che utilizzi il bilanciamento del carico. Puoi utilizzare la porta 80 sul load balancer. In questo modo, il traffico può essere instradato a un'altra porta host nelle istanze di container. Per ulteriori informazioni, consulta Usa il bilanciamento del carico per distribuire il traffico dei ECS servizi Amazon.

  • Se l'istanza Windows viene riavviata, è necessario eliminare l'interfaccia proxy e inizializzare nuovamente l'agente Amazon ECS Container per ripristinare il proxy delle credenziali.

Script di bootstrap per ECS contenitori Amazon

Prima che i container possano accedere al proxy di credenziali nell'istanza di container per ottenere le credenziali, devi eseguire il bootstrap del container con i comandi di rete richiesti. Il seguente script di esempio di codice deve essere eseguito nei container quando si avviano.

Nota

Non è necessario eseguire questo script quando si utilizza la modalità di rete awsvpc su Windows.

Se esegui container Windows che includono Powershell, utilizza lo script seguente:

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. $gateway = (Get-NetRoute | Where { $_.DestinationPrefix -eq '0.0.0.0/0' } | Sort-Object RouteMetric | Select NextHop).NextHop $ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort-Object | Select ifIndex).ifIndex New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # credentials API New-NetRoute -DestinationPrefix 169.254.169.254/32 -InterfaceIndex $ifIndex -NextHop $gateway -PolicyStore ActiveStore # metadata API

Se esegui container Windows con solo Command shell, utilizza lo script seguente:

# Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. for /f "tokens=1" %i in ('netsh interface ipv4 show interfaces ^| findstr /x /r ".*vEthernet.*"') do set interface=%i for /f "tokens=3" %i in ('netsh interface ipv4 show addresses %interface% ^| findstr /x /r ".*Default.Gateway.*"') do set gateway=%i netsh interface ipv4 add route prefix=169.254.170.2/32 interface="%interface%" nexthop="%gateway%" store=active # credentials API netsh interface ipv4 add route prefix=169.254.169.254/32 interface="%interface%" nexthop="%gateway%" store=active # metadata API