Usar credenciais temporárias do AWS STS no SDK para PHP
O AWS Security Token Service (AWS STS) permite que você solicite credenciais temporárias para usuários do IAM, ou para os usuários que você autentica por meio da federação de identidades. Para uma compreensão mais profunda, consulte Credenciais de segurança temporárias no Guia do usuário do IAM. Você pode usar credenciais de segurança temporárias para acessar a maioria dos serviços da AWS. 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.
Um caso de uso comum para credenciais temporárias é conceder acesso às aplicações móveis ou do lado do cliente aos recursos da AWS autenticando os usuários por meio de provedores de identidade de terceiros (consulte Federação de identidades da Web).
Obtenção de credenciais temporárias
O AWS STS tem várias operações que retornam credenciais temporárias, mas a operação GetSessionToken é a mais simples para demonstração. O trecho a seguir recupera credenciais temporárias chamando o método getSessionToken do cliente STS do SDK do PHP.
$sdk = new Aws\Sdk([ 'region' => 'us-east-1', ]); $stsClient = $sdk->createSts(); $result = $stsClient->getSessionToken();
O resultado de GetSessionToken e das outras operações do AWS STS sempre contém um valor de 'Credentials'. Se você imprimir o $result (por exemplo, usando print_r($result)), ele será semelhante ao seguinte.
Array ( ... [Credentials] => Array ( [SessionToken] => '<base64 encoded session token value>' [SecretAccessKey] => '<temporary secret access key value>' [Expiration] => 2013-11-01T01:57:52Z [AccessKeyId] => '<temporary access key value>' ) ... )
Fornecimento de credenciais temporárias ao AWS SDK para PHP
Você pode usar credenciais temporárias com outro cliente da AWS instanciando o cliente e passando diretamente os valores recebidos do AWS STS.
use Aws\S3\S3Client; $result = $stsClient->getSessionToken(); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => [ 'key' => $result['Credentials']['AccessKeyId'], 'secret' => $result['Credentials']['SecretAccessKey'], 'token' => $result['Credentials']['SessionToken'] ] ]);
Você também pode construir um objeto Aws\Credentials\Credentials e usá-lo ao instanciar o cliente.
use Aws\Credentials\Credentials; use Aws\S3\S3Client; $result = $stsClient->getSessionToken(); $credentials = new Credentials( $result['Credentials']['AccessKeyId'], $result['Credentials']['SecretAccessKey'], $result['Credentials']['SessionToken'] ); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => $credentials ]);
No entanto, a melhor maneira de fornecer credenciais temporárias é usar o método auxiliar createCredentials() incluído com o StsClient. Esse método extrai os dados de um resultado do AWS STS e cria o objeto Credentials para você.
$result = $stsClient->getSessionToken(); $credentials = $stsClient->createCredentials($result); $s3Client = new S3Client([ 'version' => '2006-03-01', 'region' => 'us-west-2', 'credentials' => $credentials ]);
Para obter mais informações sobre por que você pode precisar usar credenciais temporárias em seu aplicativo ou projeto, consulte Cenários de concessão de acesso temporário na documentação do AWS STS.