

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 ruolo IAM utilizzando la AWS SDK per PHP versione 3
<a name="guide_credentials_assume_role"></a>

## Utilizzo dei ruoli IAM per le credenziali delle variabili di istanza Amazon EC2
<a name="instance-profile-credentials"></a>

Se esegui l'applicazione su un'istanza Amazon EC2, il modo migliore per fornire le credenziali a cui effettuare chiamate AWS consiste nell'utilizzare un [ruolo IAM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) per ottenere credenziali di sicurezza temporanee.

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

Le credenziali temporanee, spesso chiamate **credenziali del profilo di istanza**, consentono l'accesso alle azioni e alle risorse consentite dalla politica del ruolo. Amazon EC2 gestisce tutte le fasi di autenticazione sicura delle istanze sul servizio IAM per assumere il ruolo e di aggiornare periodicamente le credenziali del ruolo recuperate. In questo modo, l'applicazione resta protetta quasi senza necessità del tuo intervento. Per un elenco di servizi che supportano le credenziali di sicurezza temporanee, consulta [AWS services that work with IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) nella *Guida per l’utente 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'`. In questo modo l'SDK utilizza le credenziali del profilo di istanza memorizzate nella cache. [Per i dettagli, consulta Configurazione per la versione 3. AWS SDK per PHP](guide_configuration.md)

*Per ulteriori informazioni sullo sviluppo di applicazioni Amazon EC2 utilizzando la SDKs, consulta Using [IAM roles for Amazon EC2](https://docs.aws.amazon.com/sdkref/latest/guide/access-iam-roles-for-ec2.html) Instances nella AWS SDKs and Tools Reference Guide.*

### Crea e assegna un ruolo IAM a un'istanza Amazon EC2
<a name="create-and-assign-an-iam-role-to-an-ec2-instance"></a>

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'
   ]);
   ```

1. Crea un ruolo IAM 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
   ]);
   ```

1. Crea un profilo di istanza IAM e archivia l'Amazon Resource Name (ARN) dal risultato.
**Nota**  
Se utilizzi la console IAM anziché AWS SDK per 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'];
   ```

1. Crea un client Amazon EC2.

    **Importazioni** 

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

    **Codice di esempio** 

   ```
   $ec2Client = new Ec2Client([
       'region' => 'us-west-2',
       'version' => '2016-11-15',
   ]);
   ```

1. Aggiungi il profilo dell'istanza a un'istanza Amazon EC2 in esecuzione o interrotta. Usa il nome del profilo dell'istanza del tuo ruolo IAM.

    **Codice di esempio** 

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

Per ulteriori informazioni sui ruoli IAM, consulta [Ruoli IAM per Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) nella *Guida per l'utente di Amazon EC2*.

## Utilizzo dei ruoli IAM per le attività di Amazon ECS
<a name="ecs-credentials"></a>

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

[Invece di creare e distribuire AWS credenziali a lungo termine ai contenitori o utilizzare il ruolo dell'istanza Amazon EC2, puoi associare un ruolo IAM che utilizza credenziali temporanee a una definizione di attività ECS o a un'operazione API. `RunTask`](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ecs-2014-11-13.html#runtask) 

Per ulteriori informazioni sull'utilizzo dei ruoli IAM che le attività del contenitore possono assumere, consulta l'argomento relativo al [ruolo Task IAM](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) nella *Amazon ECS Developer Guide*. Per esempi di utilizzo del ruolo IAM dell'attività sotto forma di una `taskRoleArn` nelle definizioni delle attività, consulta Definizioni di [attività di esempio](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/firelens-example-taskdefs.html) anche nella *Amazon ECS Developer Guide*.

## Assumere un ruolo IAM in un altro Account AWS
<a name="assuming-an-iam-role-in-another-aws-account"></a>

Quando lavori in un Account AWS (Account A) e desideri assumere un ruolo in un altro account (Account B), devi prima creare un ruolo IAM 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, consulta [Tutorial: Delegate l'accesso tra AWS account tramite](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) ruoli IAM.

Dopo aver creato un ruolo nell'Account B, annota il relativo ARN. Utilizzerai questo ARN quando assumerai il ruolo dall'Account A. Assumi il ruolo utilizzando AWS le 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 client AWS STS appena creato, invoca assume-role e fornisci un valore di sessionName personalizzato. 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, consulta [Using IAM Roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html) o [AssumeRole](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sts-2011-06-15.html#assumerole)nell' AWS SDK per PHP API Reference.

## Utilizzo di un ruolo IAM con identità web
<a name="using-an-iam-role-with-web-identity"></a>

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 assumere un ruolo con un'identità web, devi creare un ruolo IAM 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)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html).

Dopo aver [creato un provider di identità](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html) e [creato un ruolo per la tua identità web](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html), utilizza un AWS STS client per autenticare un utente. Fornisci l' webIdentityToken e ProviderId per la tua identità e il Role ARN per il ruolo IAM 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, consulta [AssumeRoleWithWebIdentity—Federation Through a Web-based Identity Provider](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity.html) o [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sts-2011-06-15.html#assumerolewithwebidentity)nell'API Reference. AWS SDK per PHP 

## Assumi un ruolo con profilo
<a name="assume-role-with-profile"></a>

### Definisci i profili in `~/.aws/credentials`
<a name="assume-role-profile-credentials-file"></a>

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

Crea un nuovo profilo con l'`role_arn`impostazione per il ruolo che vuoi assumere. Includi anche l'`source_profile`impostazione per un altro profilo con credenziali autorizzate ad assumere il ruolo IAM. Per maggiori dettagli su queste impostazioni di configurazione, consulta [Assume le credenziali del ruolo](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html) nella *AWS SDKs and 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` `S3Client`Avranno 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`
<a name="assume-role-profile-config-file"></a>

Il `~/.aws/config` file può contenere anche i profili che si desidera vengano assunti. Se imposti la variabile di ambiente`AWS_SDK_LOAD_NONDEFAULT_CONFIG`, l'SDK for PHP carica i profili `config` dal file. Quando `AWS_SDK_LOAD_NONDEFAULT_CONFIG` è impostato, l'SDK carica i profili da entrambi e. `~/.aws/config` `~/.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'
]);
```