

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Asuma una función de IAM con la AWS SDK para PHP versión 3
<a name="guide_credentials_assume_role"></a>

## Uso de roles de IAM para credenciales variables de instancias de Amazon EC2
<a name="instance-profile-credentials"></a>

Si ejecuta la aplicación en una instancia de Amazon EC2, la forma preferida de proporcionar credenciales para realizar llamadas AWS es utilizar un [rol de IAM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) para obtener credenciales de seguridad temporales.

Si utiliza roles de IAM, no tiene que ocuparse de la administración de credenciales desde la aplicación. Permiten que una instancia "asuma" un rol recuperando credenciales temporales del servidor de metadatos de la instancia de Amazon EC2.

Las credenciales temporales, que a menudo reciben el nombre de **credenciales del perfil de instancia**, permiten obtener acceso a las acciones y los recursos permitidos por la política del rol. Amazon EC2 administra todas las operaciones de autenticación segura de las instancias en el servicio de IAM para asumir el rol, así como las operaciones de actualización periódica de las credenciales del rol recuperadas. Esto mantiene su aplicación segura prácticamente sin esfuerzo por su parte. Para obtener una lista de los servicios que aceptan credenciales de seguridad temporales, consulte [los servicios AWS que funcionan con IAM ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) en la*Guía del usuario de IAM*.

**nota**  
Para evitar llegar siempre al servicio de metadatos, puede pasar una instancia de `Aws\CacheInterface` como opción `'credentials'` a un constructor de clientes. De este modo, el SDK utiliza las credenciales del perfil de instancia en su lugar. Para obtener información detallada, consulte [Configuración de la versión 3 de AWS SDK para PHP](guide_configuration.md).

*Para obtener más información sobre el desarrollo de aplicaciones de Amazon EC2 mediante el SDKs, consulte [Uso de funciones de IAM para instancias de Amazon EC2](https://docs.aws.amazon.com/sdkref/latest/guide/access-iam-roles-for-ec2.html) en la AWS SDKs Guía de referencia de herramientas y herramientas.*

### Creación y asignación de un rol de IAM a una instancia de Amazon EC2
<a name="create-and-assign-an-iam-role-to-an-ec2-instance"></a>

1. Cree un cliente de IAM.

    **Importaciones** 

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

    **Código de muestra** 

   ```
   $client = new IamClient([
       'region' => 'us-west-2',
       'version' => '2010-05-08'
   ]);
   ```

1. Cree un rol de IAM con los permisos necesarios para las acciones y los recursos que vaya a utilizar.

    **Código de muestra** 

   ```
   $result = $client->createRole([
       'AssumeRolePolicyDocument' => 'IAM JSON Policy', // REQUIRED
       'Description' => 'Description of Role',
       'RoleName' => 'RoleName', // REQUIRED
   ]);
   ```

1. Cree un perfil de instancia de IAM y guarde el nombre de recurso de Amazon (ARN) del resultado.
**nota**  
Si utiliza la consola de IAM en lugar de la AWS SDK para PHP, la consola crea un perfil de instancia automáticamente y le asigna el mismo nombre que la función a la que corresponde.  
 **Código de muestra**   

   ```
   $IPN = 'InstanceProfileName';
   
   $result = $client->createInstanceProfile([
       'InstanceProfileName' => $IPN ,
   ]);
   
   $ARN = $result['Arn'];
   $InstanceID =  $result['InstanceProfileId'];
   ```

1. Cree un cliente de Amazon EC2.

    **Importaciones** 

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

    **Código de muestra** 

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

1. Añada el perfil de instancia a una instancia de Amazon EC2 en ejecución o detenida. Utilice el nombre del perfil de instancia del rol de IAM.

    **Código de muestra** 

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

Para obtener más información, consulte [Roles de IAM para Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html) en la *Guía del usuario de Amazon EC2*.

## Uso de roles de IAM para tareas de Amazon ECS
<a name="ecs-credentials"></a>

Una tarea de Amazon Elastic Container Service (Amazon ECS) puede asumir una función de IAM para realizar llamadas a AWS la API. Esta es una estrategia de administración de credenciales para que las utilicen las aplicaciones, similar al modo en que los perfiles de instancia de Amazon EC2 proporcionan credenciales a las instancias de Amazon EC2.

[En lugar de crear y distribuir AWS credenciales de larga duración a los contenedores o utilizar la función de la instancia Amazon EC2, puede asociar una función de IAM que utilice credenciales temporales a una definición de tarea de ECS o `RunTask` a una operación de API.](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-ecs-2014-11-13.html#runtask) 

Para obtener más información sobre el uso de los roles de IAM que pueden asumir las tareas de contenedores, consulte el tema sobre los [roles de IAM en las tareas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html) de la *Guía para desarrolladores de Amazon ECS*. Para ver ejemplos del uso del rol de IAM de tareas en forma de `taskRoleArn` en las definiciones de tareas, consulte también [Ejemplos de las definiciones de tareas](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/firelens-example-taskdefs.html) en la *Guía para desarrolladores de Amazon ECS*.

## Asumir una función de IAM en otra Cuenta de AWS
<a name="assuming-an-iam-role-in-another-aws-account"></a>

Si trabaja en una Cuenta de AWS (cuenta A) y quiere asumir una función en otra cuenta (cuenta B), primero debe crear una función de IAM en la cuenta B. Esta función permite a las entidades de su cuenta (cuenta A) realizar acciones específicas en la cuenta B. Para obtener más información sobre el acceso entre cuentas, consulte el [tutorial: Delegar el acceso entre AWS cuentas mediante](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) funciones de IAM.

Después de crear un rol en Cuenta B, registre los ARN de rol. Utilizará este ARN cuando asuma la función desde la cuenta A. Asumirá la función con las AWS credenciales asociadas a su entidad en la cuenta A.

Cree un AWS STS cliente con credenciales para su. Cuenta de AWS A continuación, utilizamos un perfil de credenciales, pero puede utilizar cualquier método. Con el cliente de AWS STS recién creado, llame a assume-role y proporcione un valor de sessionName personalizado. Recupere las nuevas credenciales temporales del resultado. De forma predeterminada, las credenciales duran una hora.

 **Código de muestra** 

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

Para obtener más información, consulte [Uso de funciones de IAM](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)en la referencia de la AWS SDK para PHP API.

## Uso de un rol de IAM con la identidad web
<a name="using-an-iam-role-with-web-identity"></a>

Web Identity Federation permite a los clientes utilizar proveedores de identidad de terceros para autenticarse al acceder a AWS los recursos. Para poder asumir un rol con identidad web, debe crear un rol de IAM y configurar un proveedor de identidad web (IdP). Para obtener más información, consulte [Creación de un rol para identidades federadas web u OpenID Connect (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html).

Tras [crear un proveedor de identidades](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html) y [crear un rol para su identidad web](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_oidc.html), utilice un AWS STS cliente para autenticar a un usuario. Proporcione el webIdentityToken y ProviderId para su identidad y el ARN del rol para el rol de IAM con permisos para el usuario.

 **Código de muestra** 

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

Para obtener más información, consulte [AssumeRoleWithWebIdentity—La federación mediante un proveedor de identidad basado en la web](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)en la referencia de la AWS SDK para PHP API.

## Asumir rol con perfil
<a name="assume-role-with-profile"></a>

### Definir perfiles en `~/.aws/credentials`
<a name="assume-role-profile-credentials-file"></a>

Puede configurarlo AWS SDK para PHP para que utilice un rol de IAM definiendo un perfil en. `~/.aws/credentials`

Cree un nuevo perfil con la configuración de `role_arn` para el rol que quiere asumir. Incluya también la configuración de `source_profile` de otro perfil con credenciales que tenga permisos para asumir el rol de IAM. Para obtener más información sobre estas opciones de configuración, consulte [Asumir credenciales de rol](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html) en la *Guía de referencia de AWS SDKs and Tools*.

Por ejemplo, en el siguiente `~/.aws/credentials`, el perfil de `project1` establece `role_arn` y especifica el perfil de `default` como el origen de las credenciales para verificar la entidad asociada que puede asumir el rol.

```
[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
```

Si se establece la variable de entorno `AWS_PROFILE` o se usa el parámetro `profile` al crear la instancia de un cliente de servicio, se asumirá el rol especificado en `project1`, utilizando el perfil `default` como credenciales de origen.

En el siguiente fragmento se muestra el uso del parámetro `profile` en un constructor `S3Client`. `S3Client` tendrá los permisos asociados al rol asociado al perfil de `project1`.

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

### Definir perfiles en `~/.aws/config`
<a name="assume-role-profile-config-file"></a>

El archivo `~/.aws/config` también puede contener los perfiles que quiera que se asuman. Si establece la variable de entorno `AWS_SDK_LOAD_NONDEFAULT_CONFIG`, el SDK para PHP carga los perfiles del archivo `config`. Cuando `AWS_SDK_LOAD_NONDEFAULT_CONFIG` está establecido, el SDK carga los perfiles tanto de `~/.aws/config` como de `~/.aws/credentials`. Los perfiles de `~/.aws/credentials` se cargan en último lugar y tienen prioridad sobre un perfil de `~/.aws/config` con el mismo nombre. Los perfiles de cualquier ubicación pueden servir como `source_profile` o el perfil que se asumirá.

En el siguiente ejemplo se utiliza el perfil de `project1` definido en el archivo `config` y el perfil de `default` del archivo `credentials`. También se ha establecido `AWS_SDK_LOAD_NONDEFAULT_CONFIG`.

```
# 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
```

Cuando se ejecute el constructor `S3Client` que se muestra en el siguiente fragmento, se asumirá el rol definido en el perfil de `project1` con las credenciales asociadas al perfil de `default`.

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