Cuando utilizo la API GetFederationToken para generar credenciales temporales, la variable de política ${aws:userName} no funciona.
Resolución
Cuando el elemento Entidad principal es un usuario federado, la variable de política ${aws:userName} de AWS Identity and Access Management (IAM) no aparece en la solicitud. En su lugar, use la variable de política ${aws:userID} con las llamadas a la API GetFederationToken. Para obtener más información, consulte Dónde puede utilizar variables de política.
En la siguiente política de JSON, la variable de política ${aws:userName} se ha sustituido por la variable de política ${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}/*"
]
}
]
}
El valor de la variable aws:userid debería ser ACCOUNTNUMBER:caller-specified-name.
El valor del parámetro Name para las llamadas a la API GetFederationToken debe seguir las directrices de GetFederationToken. Por ejemplo, si especifica el nombre intuitivo Bob, entonces el formato correcto sería 123456789102:Bob. De este modo se asigna un nombre de formato a su sesión y se permite acceder al bucket de Amazon Simple Storage Service (Amazon S3) que cuenta con el prefijo correspondiente.
Nota: En este ejemplo anterior se presupone que el nombre intuitivo de la variable aws:userid es un identificador único. Un nombre intuitivo único no permite que otro usuario con el mismo nombre intuitivo se quede sin acceso a los recursos especificados en la política de JSON.
Información relacionada
Permisos para GetFederationToken
Elementos de la política de IAM: variables y etiquetas
Identificadores de IAM