Comment utiliser des variables de stratégie IAM avec des utilisateurs fédérés ?

Date de la dernière mise à jour : 19/08/2020

Lorsque j'utilise l'API GetFederationToken pour générer des informations d'identification temporaires, la variable de stratégie ${aws:userName} ne fonctionne pas.

Solution

Lorsque vous utilisez l'API GetFederationToken, utilisez la variable de stratégie ${aws:userID} au lieu de la variable de stratégie ${aws:userName}. En effet, la variable ${aws:userName} n'est pas présente si le mandataire est un utilisateur fédéré. Pour plus d'informations, consultez où vous pouvez utiliser les variables de stratégie.

La stratégie IAM JSON suivante fournit un exemple où la variable de stratégie ${aws:userName} a été remplacée par la variable de stratégie ${aws:userID} :

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"AllowListingOfUserFolder",
         "Action":[
            "s3:ListBucket"
         ],

         "Effect":"Allow",

         "Resource":[
            "arn:aws:s3:::TESTBUCKET"
         ],
         "Condition":{
            "StringLike":{
               "s3:prefix":[
                  "TESTBUCKET/${aws:userid}/*"
               ]
            }
         }
      },
      {
         "Sid":"AllowAllS3ActionsInUserFolder",
         "Action":[
            "s3:PutObject",
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:DeleteObject"
         ],
         "Effect":"Allow",
         "Resource":[
            "arn:aws:s3:::TESTBUCKET/${aws:userid}/*"
         ]
      }
   ]
}

La valeur de la variable aws:userid doit être « ACCOUNTNUMBER:caller-specified-name ».

Lors de l'appel de l'API GetFederationToken, la valeur du paramètre Name doit suivre les instructions établies dans GetFederationToken. Par exemple, si vous spécifiez le nom convivial Bob, le format correct est « 123456789102:Bob ». Cela nomme votre séance et permet d'accéder au compartiment Amazon Simple Storage Service (Amazon S3) avec un préfixe correspondant.

Remarque : cet exemple suppose que le nom défini par le mandataire (nom convivial) de la variable aws:userid est unique. Un nom convivial unique empêche un autre utilisateur ayant le même nom convivial d’accéder aux ressources spécifiées dans la stratégie JSON. Pour plus d'informations, voir Identifiants uniques.