Assumir um perfil do IAM - AWS SDK for PHP

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Assumir um perfil do IAM

Uso de perfis do IAM para credenciais variáveis da instância do Amazon EC2

Se estiver executando seu aplicativo em uma instância do Amazon EC2, a maneira preferencial de fornecer credenciais para fazer chamadas para a AWS é usar um perfil do IAM para obter credenciais de segurança temporárias.

Quando você usa perfis do IAM, não há a necessidade de se preocupar com o gerenciamento de credenciais em seu aplicativo. Eles permitem que uma instância "assuma" uma função recuperando credenciais temporárias do servidor de metadados da instância do Amazon EC2.

As credenciais temporárias, geralmente conhecidas como credenciais de perfil de instância, permitem acesso a ações e recursos que a política do perfil permite. O Amazon EC2 controla todo o trabalho de autenticação de instâncias com segurança para que o serviço IAM assuma a função e, periodicamente, atualiza as credenciais das funções recuperadas. Isso mantém o aplicativo seguro com praticamente nenhum trabalho de sua parte. Para obter uma lista de serviços que aceitam credenciais de segurança temporárias, consulte os serviços da AWS que funcionam com o IAM no Guia do usuário do IAM.

nota

Para evitar acessar o serviço de metadados sempre, é possível passar uma instância de Aws\CacheInterface como a opção 'credentials' para um construtor de cliente. Isso permite que o SDK use credenciais de perfil de instância em cache no lugar. Para obter detalhes, consulte Configuração do AWS SDK for PHP Versão 3.

Para obter mais informações sobre o desenvolvimento de aplicativos do Amazon EC2 usando os SDKs, consulte Uso de perfis do IAM para instâncias do Amazon EC2 no Guia de referência de SDKs e ferramentas da AWS.

Criar e atribuir o perfil do IAM a uma instância do Amazon EC2

  1. Crie um cliente IAM.

    Importações

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

    Código de exemplo

    $client = new IamClient([ 'region' => 'us-west-2', 'version' => '2010-05-08' ]);
  2. Crie um perfil do IAM com as permissões das ações e dos recursos que você usará.

    Código de exemplo

    $result = $client->createRole([ 'AssumeRolePolicyDocument' => 'IAM JSON Policy', // REQUIRED 'Description' => 'Description of Role', 'RoleName' => 'RoleName', // REQUIRED ]);
  3. Crie um perfil de instância do IAM e armazene o nome do recurso da Amazon (ARN) do resultado.

    nota

    Quando você usa o console do IAM em vez do AWS SDK for PHP, o console cria automaticamente um perfil de instância e dá a ele o mesmo nome da função correspondente.

    Código de exemplo

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

    Importações

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

    Código de exemplo

    $ec2Client = new Ec2Client([ 'region' => 'us-west-2', 'version' => '2016-11-15', ]);
  5. Adicione o perfil de instância a uma instância do Amazon EC2 em execução ou interrompida. Use o nome do perfil de instância do seu perfil do IAM.

    Código de exemplo

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

Para obter mais informações, consulte Perfis do IAM para o Amazon EC2 no Guia do usuário do Amazon EC2 para instâncias do Linux.

Usar perfis do IAM para tarefas do Amazon ECS

Uma tarefa no Amazon Elastic Container Service (Amazon ECS) pode assumir um perfil do IAM para AWS fazer chamadas de API. Essa é uma estratégia para gerenciar credenciais para seus aplicativos usarem, semelhante à forma como os perfis de instância do Amazon EC2 fornecem credenciais para instâncias do Amazon EC2.

Em vez de criar e distribuir credenciais AWS de longo prazo para contêineres ou usar a função da instância do Amazon EC2, você pode associar um perfil do IAM que usa credenciais temporárias a uma definição de tarefa do ECS ou operação de API RunTask.

Para obter mais informações sobre o uso dos perfis do IAM que as tarefas de contêiner podem assumir, consulte o tópico da Função do IAM de tarefa no Amazon ECS Developer Guide. Para obter exemplos de uso do perfil IAM da tarefa na forma de definições de taskRoleArn tarefas, consulte Exemplos de definições de tarefas também no Guia do desenvolvedor do Amazon ECS.

Assumindo um perfil do IAM em outra Conta da AWS

Quando você trabalha em uma Conta da AWS (Conta A) e deseja assumir um perfil em outra conta (Conta B), você deve primeiro criar um perfil do IAM na conta B. Esse perfil permite que as entidades em sua conta (Conta A) executem ações específicas na conta B. Para obter mais informações sobre acesso entre contas, consulte Tutorial do IAM: Delegar acesso entre contas da AWS usando funções do IAM.

Depois de criar um perfil na Conta B, registre o ARN do perfil. Você usará esse ARN quando assumir o perfil da Conta A. Você assume o perfil usando as credenciais da AWS associadas à sua entidade na Conta A.

Crie um cliente AWS STS com credenciais para sua Conta da AWS. No exemplo a seguir, usamos um perfil de credenciais, mas é possível usar qualquer método. Com o cliente AWS STS recém-criado, chame assume-role e forneça um sessionName personalizado. Recupere as novas credenciais temporárias do resultado. Por padrão, as credenciais duram uma hora.

Código de exemplo

$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 obter mais informações, consulte Usar funções do IAM ou AssumeRole na Referência de API do AWS SDK for PHP.

Usar um perfil do IAM com identidade da web

A federação de identidades da web permite que os clientes usem os provedores de identidade de terceiros para autenticação ao acessar recursos da AWS. Antes de assumir um perfil com identidade da web, você deve criar um perfil do IAM e configurar um provedor de identidades da web (IdP). Para obter mais informações, consulte Criar uma função para identidades da web ou federação do OpenID Connect (Console).

Depois de criar um provedor de identidade e criar uma função para sua identidade da web, use um cliente AWS STS para autenticar um usuário. Forneça o webIdentityToken e ProviderId para sua identidade, e o ARN da função para a função do IAM com permissões para o usuário.

Código de exemplo

$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 obter mais informações, consulte AssumeRoleWithWebIdentity — Federação por meio de um provedor de identidade baseado na web ou AssumeRoleWithWebIdentity na Referência de API do AWS SDK for PHP.

Assumir função com perfil

Defina perfis em ~/.aws/credentials

Você pode configurar a AWS SDK for PHP para usar um perfil do IAM definindo um perfil no ~/.aws/credentials.

Crie um novo perfil com a configuração do role_arn para a função que você assumirá. Inclua também a configuração source_profile para um perfil com credenciais que tenham permissões para assumir o perfil do IAM. Para obter mais detalhes sobre essas configurações, consulte Assumir credenciais de função no Guia de referência de SDKs e ferramentas da AWS.

Por exemplo, no ~/.aws/credentials seguinte, o perfil project1 define o role_arn e especifica o perfil default como a fonte das credenciais para verificar se a entidade associada a elas pode assumir a função.

[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

Ao definir a variável de ambiente AWS_PROFILE ou usar o parâmetro profile ao instanciar um cliente de serviço, a função especificada no project1 será assumida, usando o perfil default como as credenciais de origem.

O trecho a seguir mostra o uso do parâmetro profile em um construtor S3Client. O S3Client terá as permissões associadas à função associada ao perfil project1.

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

Defina perfis em ~/.aws/config

O arquivo ~/.aws/config também pode conter perfis que você deseja que sejam assumidos. Se você definir a variável de ambiente AWS_SDK_LOAD_NONDEFAULT_CONFIG, o SDK for PHP carregará perfis do arquivo config. Quando AWS_SDK_LOAD_NONDEFAULT_CONFIG estiver configurado, o SDK carrega perfis de ~/.aws/config e ~/.aws/credentials. Os perfis de ~/.aws/credentials são carregados por último e têm precedência sobre um perfil de ~/.aws/config com o mesmo nome. Perfis de qualquer um desses locais podem servir como o source_profile ou o perfil a ser assumido.

O exemplo a seguir usa o perfil project1 definido no arquivo config e o perfil default no arquivo credentials. O AWS_SDK_LOAD_NONDEFAULT_CONFIG também está definido.

# 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 o construtor S3Client executa o trecho a seguir, a função definida no perfil project1 será assumida usando as credenciais associadas ao perfil default.

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