Assuma uma IAM função - 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á.

Assuma uma IAM função

Usando IAM funções para credenciais de variáveis de EC2 instância da Amazon

Se você estiver executando seu aplicativo em uma EC2 instância da Amazon, a forma preferida de fornecer credenciais para fazer chamadas AWS é usar uma IAMfunção para obter credenciais de segurança temporárias.

Ao usar IAM funções, você não precisa se preocupar com o gerenciamento de credenciais do seu aplicativo. Eles permitem que uma instância “assuma” uma função recuperando credenciais temporárias do servidor de metadados da EC2 instância Amazon.

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. A Amazon EC2 lida com todo o trabalho de autenticar com segurança as instâncias no IAM serviço para assumir a função e atualizar periodicamente as credenciais da função recuperadas. Isso mantém o aplicativo seguro com praticamente nenhum trabalho de sua parte. Para obter uma lista dos serviços que aceitam credenciais de segurança temporárias, consulte os AWS serviços com os quais funcionam IAM no Guia do IAM usuário.

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. Em vez disso, isso permite que SDK eles usem credenciais de perfil de instância em cache. Para obter detalhes, consulte Configuração do AWS SDK for PHP Versão 3.

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

Crie e atribua uma IAM função a uma EC2 instância da Amazon

  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 uma IAM função com as permissões para as ações e os 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 IAM instância e armazene o Amazon Resource Name (ARN) do resultado.

    nota

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

    Código de exemplo

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

    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 da instância a uma EC2 instância da Amazon em execução ou parada. Use o nome do perfil da instância da sua IAM função.

    Código de exemplo

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

Para obter mais informações, consulte IAMFunções para a Amazon EC2 no Guia EC2 do usuário da Amazon.

Usando IAM funções para ECS tarefas da Amazon

Uma tarefa no Amazon Elastic Container Service (AmazonECS) pode assumir a IAM função de fazer AWS API chamadas. Essa é uma estratégia para gerenciar credenciais para uso de seus aplicativos, semelhante à forma como os perfis de EC2 instância da Amazon fornecem credenciais às instâncias da AmazonEC2.

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

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

Assumindo um IAM papel em outro Conta da AWS

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

Depois de criar uma função na Conta B, registre a funçãoARN. Você usará isso ARN ao assumir a função da Conta A. Você assume a função usando AWS as credenciais associadas à sua entidade na Conta A.

Crie um AWS STS cliente com credenciais para o seu Conta da AWS. No exemplo a seguir, usamos um perfil de credenciais, mas é possível usar qualquer método. Com o AWS STS cliente recém-criado, chame assume-role e forneça um personalizado. sessionName 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 Usando IAM funções ou AssumeRolena AWS SDK for PHP API Referência.

Usando uma IAM função com identidade na web

O Web Identity Federation permite que os clientes usem provedores de identidade terceirizados para autenticação ao acessar AWS recursos. Antes de assumir uma função com a identidade da Web, você deve criar uma IAM função e configurar um provedor de identidade 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 na web, use um AWS STS cliente para autenticar um usuário. Forneça a webIdentityToken e ProviderId para sua identidade e a função ARN para a IAM função 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 AssumeRoleWithWebIdentityna AWS SDK for PHP API Referência.

Assumir função com perfil

Definir perfis em ~/.aws/credentials

Você pode configurar o AWS SDK for PHP para usar uma IAM função definindo um perfil em~/.aws/credentials.

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

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 o perfil.

[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, o perfil especificado em project1 será assumido, usando o perfil default como as credenciais de origem.

O trecho a seguir mostra o uso do parâmetro profile em um construtor do 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' ]);

Definir 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 ambienteAWS_SDK_LOAD_NONDEFAULT_CONFIG, o SDK for PHP carregará os perfis do config arquivo. Quando AWS_SDK_LOAD_NONDEFAULT_CONFIG está definido, os perfis de SDK carga de ambos ~/.aws/config ~/.aws/credentials e. 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 do 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' ]);