Asume un IAM rol - AWS SDK for PHP

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.

Asume un IAM rol

Uso de IAM roles para las credenciales de variables de EC2 instancia de Amazon

Si ejecutas tu aplicación en una EC2 instancia de Amazon, la forma preferida de proporcionar credenciales para realizar llamadas AWS es usar un IAMrol para obtener credenciales de seguridad temporales.

Cuando utilizas IAM roles, no tienes que preocuparte por la administración de credenciales desde tu aplicación. Permiten que una instancia «asuma» un rol al recuperar credenciales temporales del servidor de metadatos de la EC2 instancia de Amazon.

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 se EC2 encarga de todo el trabajo preliminar de autenticar de forma segura las instancias en el IAM servicio para que asuman el rol y de actualizar periódicamente las credenciales del rol recuperadas. Esto mantiene su aplicación segura prácticamente sin esfuerzo por su parte. Para ver una lista de los servicios que aceptan credenciales de seguridad temporales, consulta AWS los servicios con los que funcionan IAM en la Guía del IAMusuario.

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. Esto permite SDK utilizar en su lugar las credenciales de perfil de instancia almacenadas en caché. Para obtener información detallada, consulte Configuración de la versión 3 de AWS SDK for PHP.

Para obtener más información sobre el desarrollo de EC2 aplicaciones de Amazon mediante elSDKs, consulte Uso de IAM roles para EC2 instancias de Amazon en la Guía de referencia de herramientas AWS SDKs y herramientas.

Crear y asignar un IAM rol a una EC2 instancia de Amazon

  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' ]);
  2. Crea un IAM rol con los permisos para las acciones y los recursos que utilizarás.

    Código de muestra

    $result = $client->createRole([ 'AssumeRolePolicyDocument' => 'IAM JSON Policy', // REQUIRED 'Description' => 'Description of Role', 'RoleName' => 'RoleName', // REQUIRED ]);
  3. Cree un perfil de IAM instancia y almacene el nombre del recurso de Amazon (ARN) del resultado.

    nota

    Si utilizas la IAM consola en lugar de la AWS SDK for 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'];
  4. Crea un EC2 cliente de Amazon.

    Importaciones

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

    Código de muestra

    $ec2Client = new Ec2Client([ 'region' => 'us-west-2', 'version' => '2016-11-15', ]);
  5. Agrega el perfil de instancia a una EC2 instancia de Amazon en ejecución o detenida. Usa el nombre del perfil de instancia de tu IAM rol.

    Código de muestra

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

Para obtener más información, consulta IAMRoles para Amazon EC2 en la Guía del EC2 usuario de Amazon.

Uso de IAM roles para las ECS tareas de Amazon

Una tarea de Amazon Elastic Container Service (AmazonECS) puede asumir una IAM función para realizar AWS API llamadas. Se trata de una estrategia para gestionar las credenciales que van a utilizar tus aplicaciones, de forma similar a como los perfiles de EC2 instancia de Amazon proporcionan credenciales a las EC2 instancias de Amazon.

En lugar de crear y distribuir AWS credenciales a largo plazo a los contenedores o usar el rol de la EC2 instancia de Amazon, puedes asociar un IAM rol que use credenciales temporales a una definición de ECS tarea u RunTask APIoperación.

Para obtener más información sobre el uso de las IAM funciones que pueden asumir las tareas de contenedor, consulte el tema IAMFunción de tarea en la Guía para ECS desarrolladores de Amazon. Para ver ejemplos del uso del IAM rol de tarea en forma de taskRoleArn en las definiciones de tareas, consulte Ejemplos de definiciones de tareas también en la Guía para ECS desarrolladores de Amazon.

Asumir un IAM rol en otro Cuenta de AWS

Si trabaja en una Cuenta de AWS (cuenta A) y quiere asumir un rol en otra cuenta (cuenta B), primero debe crear un IAM rol en la cuenta B. Este rol 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 IAM roles.

Después de crear un rol en la cuenta B, registre el rolARN. Lo usará ARN cuando asuma el rol desde la cuenta A. Asumirá el rol utilizando 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 AWS STS cliente recién creado, llame a assume-role y proporcione un cliente personalizado. sessionName 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 IAM roles o AssumeRoleen la AWS SDK for PHP API Referencia.

Uso de un IAM rol con identidad web

Web Identity Federation permite a los clientes utilizar proveedores de identidad de terceros para la autenticación al acceder a AWS los recursos. Antes de poder asumir un rol con identidad web, debe crear un IAM rol 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).

Tras crear un proveedor de identidades y crear un rol para su identidad web, utilice un AWS STS cliente para autenticar a un usuario. Proporcione el webIdentityToken y ProviderId para su identidad y el rol del IAM rol ARN con los 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 o AssumeRoleWithWebIdentityen la AWS SDK for PHP API referencia.

Asumir rol con perfil

Definir perfiles en ~/.aws/credentials

Puede configurar el rol AWS SDK for PHP para que utilice un IAM rol 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 source_profile configuración de otro perfil con credenciales que tengan permisos para asumir el IAM rol. Para obtener más información sobre estas opciones de configuración, consulte Asumir credenciales de rol 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

El archivo ~/.aws/config también puede contener los perfiles que quiera que se asuman. Si establece la variable de entornoAWS_SDK_LOAD_NONDEFAULT_CONFIG, SDK for PHP carga los perfiles del config archivo. Cuando AWS_SDK_LOAD_NONDEFAULT_CONFIG se establece, SDK carga los perfiles de ambos ~/.aws/config tipos~/.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' ]);