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à.
Ruolo IAM dell'attività Amazon ECS
Le attività Amazon ECS possono avere un ruolo IAM associato. Le autorizzazioni concesse nel ruolo IAM sono assunte dai container 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.
Nota
A queste autorizzazioni non accedono il container Amazon ECS e gli 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 di attività:
-
Isolamento delle credenziali: un container può recuperare solo le credenziali per il ruolo IAM stabilito nella definizione di attività a cui appartiene; non ha mai accesso alle credenziali destinate a un altro container appartenente a un'altra attività.
-
Autorizzazione: le credenziali del ruolo IAM definite per altre attività non sono accessibili ai container privi di autorizzazione.
-
Controllo: la registrazione degli accessi e degli eventi è disponibile CloudTrail per garantire un controllo 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 ruolo IAM per un'attività, l'utente AWS CLI o l'altro SDKs nei contenitori per quell'attività utilizzano esclusivamente le AWS credenziali fornite dal ruolo dell'attività e non ereditano più alcuna autorizzazione IAM dall'Amazon EC2 o dall'istanza esterna su cui sono in esecuzione.
Creazione del ruolo IAM dell'attività
Quando crei una policy IAM per le tue attività da utilizzare, la policy deve includere le autorizzazioni che desideri vengano assunte dai contenitori delle tue attività. Puoi utilizzare una policy AWS gestita esistente oppure puoi 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 AWS API 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, consulta Aggiornamento di una policy di trust per i ruoli nella Guida per l'utente 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. Quindi, puoi collegare la tua politica IAM specifica al ruolo che fornisce ai contenitori della tua attività le autorizzazioni desiderate. 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 Service endpoints nella Guida.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'sts:AssumeRole
autorizzazione consente alle tue attività di assumere un ruolo IAM diverso da quello utilizzato dall' EC2 istanza Amazon. In questo modo, la tua attività non eredita il ruolo associato all' EC2 istanza 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 ruolo IAM dell'attività, si consiglia di utilizzare le chiavi aws:SourceAccount
o aws:SourceArn
condition nella relazione di fiducia o nella politica IAM 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 saperne di più sul problema del confuso deputato e su come proteggere il tuo AWS account, consulta Il problema del vice confuso nella Guida per l'utente IAM.
Le seguenti procedure descrivono come creare una policy per recuperare oggetti da Amazon S3 con una policy di esempio. Sostituisci tutti i user input
con i valori in tuo possesso.
Le seguenti procedure descrivono come creare un ruolo IAM di task allegando una policy IAM creata dall'utente.
Dopo aver creato il ruolo, aggiungi ulteriori autorizzazioni al ruolo per le seguenti funzionalità.
Funzionalità | Autorizzazioni aggiuntive |
---|---|
Usa ECS Exec |
|
Usa EC2 istanze (Windows e Linux) | |
Usa istanze esterne | |
Usa istanze Windows EC2 |
Autorizzazioni ECS Exec
La funzionalità ECS Exec richiede un ruolo Task IAM per concedere ai contenitori le autorizzazioni necessarie per la comunicazione tra l'agente SSM 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 ulteriori informazioni, consulta Aggiungere e rimuovere le politiche IAM nella Guida per l'utente IAM.
Utilizza la seguente policy per il ruolo IAM del processo e aggiungere le autorizzazioni di SSM richieste.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }
Configurazione aggiuntiva EC2 delle istanze Amazon
Consigliamo di limitare le autorizzazioni nel ruolo dell'istanza di container all'elenco minimo delle autorizzazioni fornito nella policy IAM gestita da AmazonEC2ContainerServiceforEC2Role
.
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 del container Amazon ECS. Se utilizzi un'AMI ottimizzata per Amazon ECS, l'istanza richiede almeno una 1.11.0-1
parte del ecs-init
pacchetto. 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 Linux ottimizzato per Amazon ECS AMIs.
Se non utilizzi l'AMI ottimizzata per Amazon ECS per le tue istanze di container, aggiungi l'--net=host
opzione al docker run comando 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
bridge
edefault
. 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 container Amazon ECS (per prodotti non ottimizzati per Amazon ECS) AMIs. Dovrai inoltre impostare i seguenti comandi di rete sull'istanza del contenitore in modo che i contenitori utilizzati nelle tue attività possano recuperare le proprie credenziali: AWS
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' EC2 istanza Amazon, pur consentendo le autorizzazioni fornite dal ruolo dell'attività, imposta la variabile di configurazione dell'ECS_AWSVPC_BLOCK_IMDS
agente su true
nel file di configurazione dell'agente e riavvia l'agente. Per ulteriori informazioni, consulta Configurazione dell'agente del container Amazon ECS.
Per impedire ai contenitori eseguiti da attività che utilizzano la modalità di bridge
rete di accedere alle informazioni sulle credenziali fornite al profilo dell' EC2 istanza Amazon, pur consentendo le autorizzazioni fornite dal ruolo dell'attività, esegui il seguente iptables comando sulle tue 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 DROP
Devi salvare questa iptables regola sulla tua EC2 istanza Amazon affinché sopravviva al riavvio. 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 aggiuntiva dell'istanza esterna
Le istanze esterne richiedono almeno la versione 1.11.0
dell'agente contenitore per utilizzare i ruoli Task IAM; 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 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 Linux ottimizzato per Amazon ECS AMIs.
Se non utilizzi l'AMI ottimizzata per Amazon ECS per le tue istanze di container, aggiungi l'--net=host
opzione al docker run comando 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
bridge
edefault
. 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 container Amazon ECS (per prodotti non ottimizzati per Amazon ECS) AMIs. Dovrai inoltre impostare i seguenti comandi di rete sull'istanza del contenitore in modo che i contenitori utilizzati nelle tue attività possano recuperare le proprie credenziali: AWS
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 aggiuntiva EC2.
-
Quando avvii le istanze di container, devi configurare l'opzione
-EnableTaskIAMRole
nello script di dati utente dell'istanza di container. LaEnableTaskIAMRole
attiva 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 per contenitori 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 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 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 per contenitori 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