Ruolo IAM dell'attività Amazon ECS
Le attività Amazon ECS possono avere un ruolo IAM associato. Le autorizzazioni concesse nel ruolo IAM sono vendute ai container in esecuzione nell'attività. Questo ruolo permette al codice dell'applicazione (in esecuzione sul container) di usare altri servizi AWS. Il ruolo di attività è necessario quando l'applicazione accede ad altri servizi AWS, come Amazon S3.
Nota
Queste autorizzazioni non sono accessibili dal container Amazon ECS e dagli agenti Fargate. Per conoscere le autorizzazioni IAM necessarie ad Amazon ECS per estrarre le immagini di container ed eseguire l'attività, consulta Ruolo IAM di esecuzione di attività Amazon ECS.
Di seguito sono riportati i vantaggi dell'utilizzo dei ruoli delle attività:
-
Separazione dei problemi: se usi EC2, i ruoli IAM delle attività ti consentono di specificare le autorizzazioni IAM per i tuoi container senza richiedere che tali autorizzazioni siano specificate usando i profili delle istanze EC2 (per ulteriori informazioni, consulta Utilizzo dei profili delle istanze nella Guida per l'utente di AWS Identity and Access Management) Pertanto, puoi implementare le tue applicazioni in modo indipendente e uniforme sulle istanze di container ECS senza dover modificare le autorizzazioni IAM associate alle istanze EC2.
-
Verifica: la registrazione di accessi ed eventi è disponibile tramite CloudTrail per garantire verifiche retrospettive. Le credenziali dell'attività dispongono di un contesto
taskArnannesso alla sessione: in questo modo, i log di CloudTrail mostrano per quale attività sono state vendute le credenziali del ruolo. -
Consegna uniforme delle credenziali: ECS fornisce le credenziali dei ruoli IAM ai tuoi container e le rende accessibili tramite un'interfaccia ben definita, indipendentemente dall'opzione di elaborazione associata alle tue attività. Su ECS Fargate, i profili delle istanze EC2 non sono disponibili per i container nelle tue attività. I ruoli IAM delle attività consentono di associare autorizzazioni IAM ai container indipendentemente dall'opzione di elaborazione quando si utilizza AWS SDK o AWS CLI nei container. Per ulteriori informazioni su come AWS SDK accede a queste credenziali, consulta Provider di credenziali container.
Importante
I container non costituiscono un limite di sicurezza e l'uso dei ruoli IAM delle attività non cambia questa situazione. Ogni attività in esecuzione su Fargate ha un proprio limite di isolamento e non condivide il kernel sottostante, le risorse CPU, le risorse di memoria o l'interfaccia di rete elastica con un'altra attività. Per EC2 e le istanze di container esterne su ECS, non esiste l'isolamento delle attività (a differenza di Fargate) e i container possono potenzialmente accedere alle credenziali di altre attività sulla stessa istanza di container. Possono anche accedere alle autorizzazioni assegnate al ruolo dell'istanza di container ECS. Segui i consigli contenuti in Suggerimenti sui ruoli per bloccare l'accesso al servizio di metadati di istanza di Amazon EC2 per i container (per ulteriori informazioni, consulta Utilizza il servizio di metadati di istanza per accedere ai metadati dell'istanza nella Guida utente di Amazon EC2).
Nota che quando specifichi un ruolo IAM per un'attività, la AWS CLI o altri SDK nei container di quell'attività utilizzano in modo esclusivo le credenziali AWS fornite dal ruolo dell'attività e non ereditano le autorizzazioni IAM dall'istanza Amazon EC2 o esterna su cui sono in esecuzione.
Creazione del ruolo IAM dell'attività
Quando crei una policy IAM da utilizzare per le tue attività, essa deve includere le autorizzazioni che vuoi assegnare ai container nelle tue attività. Puoi utilizzare una policy gestita da AWS esistente o creare una policy personalizzata partendo da zero che soddisfi le tue esigenze specifiche. Per ulteriori informazioni, consulta Creazione di policy IAM nella Guida per l'utente di IAM.
Importante
Per le attività di Amazon ECS (per tutti i tipi di avvio), ti consigliamo di utilizzare il ruolo e la policy IAM per le tue attività. Queste credenziali consentono all'attività di effettuare richieste API AWS senza chiamare sts:AssumeRole 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, consulta Aggiornamento di una policy di attendibilità di un ruolo nella Guida per l'utente di IAM.
Una volta creata la policy IAM, puoi creare un ruolo IAM che include la policy a cui fai riferimento nella definizione dell'attività Amazon ECS. Puoi creare il ruolo utilizzando il caso d'uso Attività Elastic Container Service nella console IAM. Potrai quindi allegare al ruolo la policy IAM specifica per l'assegnazione delle autorizzazioni desiderate ai container nella tua attività. Di seguito viene descritto come procedere.
In caso di più definizioni di attività o servizi che richiedono autorizzazioni IAM, è consigliabile creare un ruolo per ogni specifica definizione di attività o per ogni specifico servizio con il numero minimo di autorizzazioni necessarie per il funzionamento dell'attività, in modo da ridurre al minimo l'accesso fornito per ciascuna attività.
Per informazioni sull'endpoint di servizio per la tua Regione, consulta Endpoint di servizio nella Guida di Riferimenti generali di Amazon Web Services.
Il ruolo dell'attività IAM deve avere una policy di attendibilità che specifica il servizio ecs-tasks.amazonaws.com. L'autorizzazione sts:AssumeRole consente ai processi di assumere un ruolo IAM diverso da quello utilizzato dall'istanza Amazon EC2. In questo modo, l'attività non eredita il ruolo associato all'istanza Amazon EC2. Di seguito è illustrato un esempio di policy di attendibilità. Sostituisci l'identificatore della regione e specificare il numero di account AWS utilizzato durante l'avvio delle attività.
Importante
Quando crei il tuo ruolo IAM per attività, ti consigliamo di utilizzare le chiavi di condizione aws:SourceAccount o aws:SourceArn nella policy di relazione di fiducia associata al ruolo per limitare ulteriormente le autorizzazioni e prevenire il problema di sicurezza confused deputy. 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 saperne di più sul problema "confused deputy" e su come proteggere il tuo account AWS, consulta la sezione Problema del "confused deputy" nella Guida per l'utente di IAM.
Usa la seguente procedura per creare una policy per il recupero di oggetti da Amazon S3 con una policy di esempio. Sostituisci tutti gli input dell'utente con i tuoi valori.
Per creare il ruolo di servizio, usa la seguente procedura.
Dopo aver creato il ruolo, aggiungi ad esso ulteriori autorizzazioni per le seguenti funzionalità.
| Funzionalità | Autorizzazioni aggiuntive |
|---|---|
|
Usare l'ECS Exec |
|
| Utilizza un'immagine da un repository Amazon ECR privato | |
| Utilizza istanze EC2 (Windows e Linux) | |
| Usa istanze esterne | |
| Usa le istanze EC2 di Windows | Configurazione aggiuntiva delle istanze Windows di Amazon EC2 |
Autorizzazioni Amazon ECR
Le autorizzazioni seguenti sono necessarie quando il codice dell'applicazione deve interagire direttamente con i repository Amazon ECR. Nota che per l'implementazione di base in cui è sufficiente estrarre immagini da Amazon ECR, queste autorizzazioni non sono richieste a livello di ruolo IAM dell'attività. Al contrario, il ruolo di esecuzione delle attività di Amazon ECS dovrebbe avere queste autorizzazioni. Per ulteriori informazioni sul ruolo di esecuzione delle attività, consulta Ruolo IAM di esecuzione di attività Amazon ECS.
Se il codice dell'applicazione in esecuzione nel container deve interagire direttamente con le API di Amazon ECR, devi aggiungere le seguenti autorizzazioni a un ruolo IAM dell'attività e includere il ruolo IAM dell'attività nella definizione dell'attività. Per informazioni, consulta Aggiunta e rimozione delle policy IAM nella Guida per l'utente di IAM.
Usa la seguente policy per il ruolo IAM dell'attività e aggiungi le autorizzazioni Amazon ECR richieste per le applicazioni container che devono interagire direttamente con Amazon ECR di:
Autorizzazioni ACS Exec
La funzionalità ECS Exec richiede un ruolo IAM dell'attività per concedere ai container le autorizzazioni necessarie per la comunicazione tra SSM Agent gestito (agente execute-command) e il servizio SSM. È necessario aggiungere le seguenti autorizzazioni a un ruolo IAM del processo e includere il ruolo IAM del processo nella definizione di attività. Per informazioni, consulta Aggiunta e rimozione delle policy IAM nella Guida per l'utente di IAM.
Utilizza la seguente policy per il ruolo IAM del processo e aggiungere le autorizzazioni di SSM richieste.
Configurazione aggiuntiva delle istanze di Amazon EC2
Consigliamo di limitare le autorizzazioni nel ruolo dell'istanza di container all'elenco minimo delle autorizzazioni fornito nella policy IAM gestita da AmazonEC2ContainerServiceforEC2Role.
Le istanze Amazon EC2 richiedono l'agente del container almeno alla versione 1.11.0 per utilizzare i ruoli dell'attività; tuttavia, 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 del container Amazon ECS. Se usi l'AMI ottimizzata per Amazon ECS, l'istanza deve disporre almeno della versione 1.11.0-1 del pacchetto ecs-init. Se le istanze di container sono avviate dall'AMI ottimizzata per Amazon ECS più recente, contengono le versioni richieste dell'agente del container e di ecs-init. Per ulteriori informazioni, consulta AMI Linux ottimizzate per Amazon ECS.
Se non utilizzi l'AMI ottimizzata per Amazon ECS per le istanze di container, aggiungi l'opzione --net=host al comando docker run che avvia l'agente e le seguenti variabili di configurazione dell'agente per la configurazione desiderata (per ulteriori informazioni, consulta Configurazione dell'agente del container Amazon ECS):
ECS_ENABLE_TASK_IAM_ROLE=true-
Utilizza i ruoli IAM per le attività per i container con le modalità di rete
bridgeedefault. ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true-
Utilizza i ruoli IAM per le attività per i container con la modalità di rete
host. 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 del container di Amazon ECS (per AMI non ottimizzate per Amazon ECS). Dovrai anche impostare i seguenti comandi di rete sull'istanza di container in modo che i container nelle tue attività possano recuperare le proprie credenziali AWS:
sudo sysctl -w net.ipv4.conf.all.route_localnet=1sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679sudo 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 container in esecuzione come parte di un'attività che usano la modalità di rete awsvpc di accedere alle informazioni sulle credenziali fornite al profilo dell'istanza Amazon EC2 (continuando a concedere le autorizzazioni fornite dal ruolo dell'attività), imposta la variabile di configurazione dell'agente ECS_AWSVPC_BLOCK_IMDS su true nel file di configurazione dell'agente e quindi riavvia l'agente. Per ulteriori informazioni, consulta Configurazione dell'agente del container Amazon ECS.
Per impedire ai container in esecuzione come parte di un'attività che usano la modalità di rete bridge di accedere alle informazioni sulle credenziali fornite al profilo dell'istanza istanza Amazon EC2 (continuando a concedere le autorizzazioni fornite dal ruolo dell'attività), esegui il comando iptables seguente nelle istanze Amazon EC2. 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 DROPPer fare in modo che la regola iptables venga conservata dopo un riavvio, devi salvarla sull'istanza Amazon EC2. Quando utilizzi l'AMI ottimizzata per Amazon ECS, puoi utilizzare il comando riportato di seguito. Per gli altri sistemi operativi, consulta la relativa documentazione specifica.
sudo iptables-save | sudo tee /etc/sysconfig/iptables && sudo systemctl enable --now iptables
Configurazione dell'istanza esterna aggiuntiva
Le istanze esterne richiedono l'agente del container almeno alla versione 1.11.0 per utilizzare i ruoli IAM dell'attività; tuttavia, 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 del container Amazon ECS. Se utilizzi l'AMI ottimizzata per Amazon ECS, l'istanza deve disporre almeno della versione 1.11.0-1 del pacchetto ecs-init. Se le istanze di container sono avviate dall'AMI ottimizzata per Amazon ECS più recente, contengono le versioni richieste dell'agente del container e di ecs-init. Per ulteriori informazioni, consulta AMI Linux ottimizzate per Amazon ECS.
Se non utilizzi l'AMI ottimizzata per Amazon ECS per le istanze di container, aggiungi l'opzione --net=host al comando docker run che avvia l'agente e le seguenti variabili di configurazione dell'agente per la configurazione desiderata (per ulteriori informazioni, consulta Configurazione dell'agente del container Amazon ECS):
ECS_ENABLE_TASK_IAM_ROLE=true-
Utilizza i ruoli IAM per le attività per i container con le modalità di rete
bridgeedefault. ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true-
Utilizza i ruoli IAM per le attività per i container con la modalità di rete
host. 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 del container di Amazon ECS (per AMI non ottimizzate per Amazon ECS). Dovrai anche impostare i seguenti comandi di rete sull'istanza di container in modo che i container nelle tue attività possano recuperare le proprie credenziali AWS:
sudo sysctl -w net.ipv4.conf.all.route_localnet=1sudo iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679sudo 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 delle istanze Windows di Amazon EC2
Importante
Vale solo per i container Windows su EC2 che usano i ruoli dell'attività.
Il ruolo dell'attività con funzionalità Windows richiede una configurazione aggiuntiva su EC2.
-
Quando avvii le istanze di container, devi configurare l'opzione
-EnableTaskIAMRolenello script di dati utente dell'istanza di container. LaEnableTaskIAMRoleattiva la funzionalità ruoli IAM dei processi per i processi. Ad 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 del container Amazon ECS.
-
Devi creare un ruolo IAM e una policy per i processi. Per ulteriori informazioni, consulta Creazione del ruolo IAM dell'attività.
-
I ruoli IAM per il provider di credenziali dei processi utilizzano la porta 80 nell'istanza di container. Pertanto, se configuri i ruoli IAM per i processi nell'istanza di container, i container non potranno utilizzare la porta 80 come porta host in qualsiasi 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 bilanciatore del carico. 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 del servizio Amazon ECS.
-
Se l'istanza di Windows viene riavviata, è necessario eliminare l'interfaccia proxy e inizializzare nuovamente l'agente del container di Amazon ECS per ripristinare il proxy delle credenziali.
Script di bootstrap del container Amazon ECS
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