Oui, l'appel STS pour assumer un rôle a besoin d'informations d'identification pour fonctionner, mais il utilise les informations d'identification fournies lors de la construction, et si celles-ci sont omises, il ne revient pas à des informations d'identification basées sur l'instance.
Pour utiliser des informations d'identification basées sur l'instance pour effectuer l'appel, vous devez utiliser quelque chose comme :
$credentials = \Aws\Credentials\CredentialProvider::instanceProfile();
qui récupère le nom du rôle associé, puis les informations d'identification de l'instance temporaire. Si vous connaissez le nom du rôle, vous pouvez le spécifier dans le constructeur
$credentials = \Aws\Credentials\CredentialProvider::instanceProfile(['profile' => 'role-name-here']);
Vous devrez également mettre à jour la relation de confiance sur le rôle pour permettre à l'instance d'assumer le rôle. J'ai supposé que l'entrée de service ferait cela, mais le fait de changer cela pour référencer le rôle IAM semble fonctionner.
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::XXXXXXXXXXXX:role/ROLE-NAME"
},
"Action": "sts:AssumeRole"
}
(N'oubliez pas d'ajouter la virgule à la fin des sections précédentes qui se terminent par } ).
Passez maintenant ces informations d'identification dans le constructeur du client Sts et votre appel à AssumeRole devrait être renvoyé avec succès. Mon code de test est le suivant :
$credentials = \Aws\Credentials\CredentialProvider::instanceProfile();
$stsClient = new \Aws\Sts\StsClient(['region' => 'eu-west-1', 'version' => 'latest', 'credentials' => $credentials]);
$ar = $stsClient->assumeRole(['RoleArn' => 'arn:aws:iam::XXXXXXXXXXXX:role/Ec2Role-queue', 'RoleSessionName' => 'test']);
$creds = $stsClient->createCredentials($ar);
var_dump($creds);
Quelles sont les sorties :
object(Aws\Credentials\Credentials)#96 (4) {
["key":"Aws\Credentials\Credentials":private]=>
string(20) "XXXXIYH36RJ5NZCDXXXX"
["secret":"Aws\Credentials\Credentials":private]=>
string(40) "eXXXX+azLUNi9LjwyX4MkNI4rnEpFrG9pNNXXXXX"
["token":"Aws\Credentials\Credentials":private]=>
string(308) "FQoDYXdzEH4aDIa3Rx/onWIa4ArZeyLHAX+muL7zKt9trAQhMa98pkzpGGmOGa0N5UhCjX2GXQ3Dc2APElwlpCfr9F+J2k5igAeonadgrwAOC/OvEDv34i1JdmkaUjEE14S2hVGz2dXXXXegYra7kvx0cdoOjCPIFmXSZJeD1PR27lFyacH2x5+F1XKFugveiYCD63axATp4t8fq0K+EPjXXXX/wYKm5tJt7hYkCV7+tThLYFDPZ6NkXXXXjsSKkOw9u52yGJY4yD50y+liSprHH+/ZJyQppDIJcZbbpyBoojoeRvwU="
["expires":"Aws\Credentials\Credentials":private]=>
int(1474580894)
}
J'espère que cela aidera quelqu'un d'autre à sauver quelques follicules pileux :)