Assumi un IAM ruolo - AWS SDK for PHP

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à.

Assumi un IAM ruolo

Utilizzo IAM dei ruoli per le credenziali delle variabili di EC2 istanza Amazon

Se esegui l'applicazione su un'EC2istanza Amazon, il modo preferito per fornire le credenziali a cui effettuare chiamate AWS consiste nell'utilizzare un IAMruolo per ottenere credenziali di sicurezza temporanee.

Quando utilizzi IAM i ruoli, non devi preoccuparti della gestione delle credenziali dell'applicazione. Consentono a un'istanza di «assumere» un ruolo recuperando credenziali temporanee dal server di metadati dell'EC2istanza Amazon.

Le credenziali temporanee, spesso chiamate credenziali del profilo di istanza, consentono l'accesso alle azioni e alle risorse consentite dalla politica del ruolo. Amazon si EC2 occupa dell'autenticazione sicura delle istanze al IAM servizio per l'assunzione del ruolo e dell'aggiornamento periodico delle credenziali del ruolo recuperate. In questo modo, l'applicazione resta protetta quasi senza necessità del tuo intervento. Per un elenco dei servizi che accettano credenziali di sicurezza temporanee, consulta AWS i servizi con cui funziona nella Guida per l'utente. IAM IAM

Nota

Per evitare di coinvolgere ogni volta il servizio dei metadati, è possibile trasmettere al costruttore di client un'istanza di Aws\CacheInterface come opzione 'credentials'. Ciò consente invece di SDK utilizzare le credenziali del profilo di istanza memorizzate nella cache. Per i dettagli, consulta Configurazione per la AWS SDK for PHP versione 3.

Per ulteriori informazioni sullo sviluppo di EC2 applicazioni Amazon utilizzando laSDKs, consulta Using IAM roles for Amazon EC2 instances nella AWS SDKsand Tools Reference Guide.

Creare e assegnare un IAM ruolo a un'istanza Amazon EC2

  1. Crea un client IAM.

    Importazioni

    require 'vendor/autoload.php'; use Aws\Iam\IamClient;

    Codice di esempio

    $client = new IamClient([ 'region' => 'us-west-2', 'version' => '2010-05-08' ]);
  2. Crea un IAM ruolo con le autorizzazioni per le azioni e le risorse che utilizzerai.

    Codice di esempio

    $result = $client->createRole([ 'AssumeRolePolicyDocument' => 'IAM JSON Policy', // REQUIRED 'Description' => 'Description of Role', 'RoleName' => 'RoleName', // REQUIRED ]);
  3. Crea un profilo di IAM istanza e archivia Amazon Resource Name (ARN) dal risultato.

    Nota

    Se utilizzi la IAM console invece di AWS SDK for PHP, la console crea automaticamente un profilo di istanza e gli assegna lo stesso nome del ruolo a cui corrisponde.

    Codice di esempio

    $IPN = 'InstanceProfileName'; $result = $client->createInstanceProfile([ 'InstanceProfileName' => $IPN , ]); $ARN = $result['Arn']; $InstanceID = $result['InstanceProfileId'];
  4. Crea un EC2 client Amazon.

    Importazioni

    require 'vendor/autoload.php'; use Aws\Ec2\Ec2Client;

    Codice di esempio

    $ec2Client = new Ec2Client([ 'region' => 'us-west-2', 'version' => '2016-11-15', ]);
  5. Aggiungi il profilo dell'istanza a un'EC2istanza Amazon in esecuzione o interrotta. Usa il nome del profilo di istanza del tuo IAM ruolo.

    Codice di esempio

    $result = $ec2Client->associateIamInstanceProfile([ 'IamInstanceProfile' => [ 'Arn' => $ARN, 'Name' => $IPN, ], 'InstanceId' => $InstanceID ]);

Per ulteriori informazioni, consulta IAMRoles for Amazon EC2 nella Amazon EC2 User Guide.

Utilizzo IAM dei ruoli per le ECS attività di Amazon

Un'attività in Amazon Elastic Container Service (AmazonECS) può assumere IAM il ruolo di effettuare AWS API chiamate. Si tratta di una strategia per la gestione delle credenziali da utilizzare per le applicazioni, simile a come i profili di EC2 istanza Amazon forniscono le credenziali alle istanze AmazonEC2.

Invece di creare e distribuire AWS credenziali a lungo termine ai contenitori o utilizzare il ruolo dell'EC2istanza Amazon, puoi associare un IAM ruolo che utilizza credenziali temporanee a una definizione o ECS operazione di attività. RunTask API

Per ulteriori informazioni sull'utilizzo IAM dei ruoli che le attività dei contenitori possono assumere, consulta l'argomento Task IAM role nella Amazon ECS Developer Guide. Per esempi di utilizzo del IAM ruolo dell'attività sotto forma di definizioni di taskRoleArn attività, consulta Definizioni di attività di esempio anche nella Amazon ECS Developer Guide.

Assumere un IAM ruolo in un altro Account AWS

Quando lavori in un Account AWS (Account A) e desideri assumere un ruolo in un altro account (Account B), devi prima creare un IAM ruolo nell'Account B. Questo ruolo consente alle entità del tuo account (Account A) di eseguire azioni specifiche nell'Account B. Per ulteriori informazioni sull'accesso tra account, vedi Tutorial: Delegare l'accesso tra AWS account utilizzando i ruoli. IAM

Dopo aver creato un ruolo nell'account B, registra il ruolo. ARN Lo utilizzerai ARN quando assumerai il ruolo dall'Account A. Assumi il ruolo utilizzando le AWS credenziali associate alla tua entità nell'Account A.

Crea un AWS STS cliente con le credenziali per il tuo. Account AWS Nel seguente esempio, abbiamo utilizzato un profilo con credenziali, ma puoi utilizzare qualsiasi metodo. Con il AWS STS client appena creato, chiama assume-role e fornisci uno personalizzato. sessionName Recupera le nuove credenziali provvisorie dal risultato. Per impostazione predefinita, le credenziali durano un'ora.

Codice di esempio

$stsClient = new Aws\Sts\StsClient([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2011-06-15' ]); $ARN = "arn:aws:iam::123456789012:role/xaccounts3access"; $sessionName = "s3-access-example"; $result = $stsClient->AssumeRole([ 'RoleArn' => $ARN, 'RoleSessionName' => $sessionName, ]); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);

Per ulteriori informazioni, vedere Utilizzo IAM dei ruoli o AssumeRolenella Guida di AWS SDK for PHP API riferimento.

Utilizzo di un IAM ruolo con identità web

Web Identity Federation consente ai clienti di utilizzare provider di identità di terze parti per l'autenticazione durante l'accesso alle AWS risorse. Prima di poter assumere un ruolo con l'identità Web, è necessario creare un IAM ruolo e configurare un provider di identità Web (IdP). Per ulteriori informazioni, consultare Creazione di un ruolo per la federazione di identità web o di OpenID Connect (Console).

Dopo aver creato un provider di identità e creato un ruolo per la tua identità web, utilizza un AWS STS client per autenticare un utente. Fornisci webIdentityToken e ProviderId per la tua identità e il ruolo ARN per il IAM ruolo con le autorizzazioni per l'utente.

Codice di esempio

$stsClient = new Aws\Sts\StsClient([ 'profile' => 'default', 'region' => 'us-east-2', 'version' => '2011-06-15' ]); $ARN = "arn:aws:iam::123456789012:role/xaccounts3access"; $sessionName = "s3-access-example"; $duration = 3600; $result = $stsClient->AssumeRoleWithWebIdentity([ 'WebIdentityToken' => "FACEBOOK_ACCESS_TOKEN", 'ProviderId' => "graph.facebook.com", 'RoleArn' => $ARN, 'RoleSessionName' => $sessionName, ]); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);

Per ulteriori informazioni, vedere AssumeRoleWithWebIdentity—Federazione tramite un provider di identità basato sul Web o AssumeRoleWithWebIdentitynel Reference. AWS SDK for PHP API

Assumi un ruolo con profilo

Definisci i profili in ~/.aws/credentials

È possibile AWS SDK for PHP configurare l'utilizzo di un IAM ruolo definendo un profilo in~/.aws/credentials.

Crea un nuovo profilo con l'role_arnimpostazione per il ruolo che vuoi assumere. Includi anche l'source_profileimpostazione per un altro profilo con credenziali autorizzate ad assumere il IAM ruolo. Per maggiori dettagli su queste impostazioni di configurazione, consulta Assumere le credenziali del ruolo nella AWS SDKsand Tools Reference Guide.

Ad esempio, di seguito~/.aws/credentials, il project1 profilo imposta role_arn e specifica il default profilo come fonte per le credenziali per verificare che l'entità ad esse associata possa assumere il ruolo.

[project1] role_arn = arn:aws:iam::123456789012:role/testing source_profile = default role_session_name = OPTIONAL_SESSION_NAME [default] aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY aws_session_token= YOUR_AWS_SESSION_TOKEN

Se si imposta la variabile di AWS_PROFILE ambiente o si utilizza il profile parametro quando si crea un'istanza di un client di servizio, project1 viene assunto il ruolo specificato in, utilizzando il default profilo come credenziali di origine.

Il frammento seguente mostra l'uso del parametro in un costruttore. profile S3Client S3ClientAvranno le autorizzazioni associate al ruolo associato al profilo. project1

$s3 = new Aws\S3\S3Client([ 'region' => 'us-east-1', 'version' => '2006-03-01', 'profile' => 'project1' ]);

Definire i profili in ~/.aws/config

Il ~/.aws/config file può contenere anche i profili che si desidera vengano assunti. Se impostate la variabile di ambienteAWS_SDK_LOAD_NONDEFAULT_CONFIG, SDK for PHP carica i profili dal config file. Quando AWS_SDK_LOAD_NONDEFAULT_CONFIG è impostato, SDK carica i profili da entrambi ~/.aws/config e~/.aws/credentials. I profili di ~/.aws/credentials vengono caricati per ultimi e hanno la precedenza su un profilo ~/.aws/config con lo stesso nome. I profili della posizione possono servire come source_profile o il profilo da assumere.

L'esempio seguente utilizza il project1 profilo definito nel config file e il default profilo nel credentials file. AWS_SDK_LOAD_NONDEFAULT_CONFIGÈ inoltre impostato.

# Profile in ~/.aws/config. [profile project1] role_arn = arn:aws:iam::123456789012:role/testing source_profile = default role_session_name = OPTIONAL_SESSION_NAME
# Profile in ~/.aws/credentials. [default] aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID aws_secret_access_key = YOUR_AWS_SECRET_ACCESS_KEY aws_session_token= YOUR_AWS_SESSION_TOKEN

Quando viene eseguito il S3Client costruttore, come mostrato nel frammento seguente, il ruolo definito nel project1 profilo verrà assunto utilizzando le credenziali associate al profilo. default

$s3 = new Aws\S3\S3Client([ 'region' => 'us-east-1', 'version' => '2006-03-01', 'profile' => 'project1' ]);