当我使用 GetFederationToken API 生成临时凭证时,${aws:userName} 策略变量不起作用。
解决方法
当 Principal 元素是联合用户时,${aws:userName} AWS Identity and Access Management(IAM)策略变量不在请求中。相反,请在 GetFederationToken API 调用中使用 ${aws:userID} 策略变量。有关详细信息,请参阅您可以使用策略变量的位置。
在以下 JSON 策略示例中,${aws:userName} 策略变量被替换为 ${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}/*"
]
}
]
}
aws:userid 变量的值必须为 ACCOUNTNUMBER:caller-specified-name。
GetFederationToken API 调用的 Name 参数值必须遵循 GetFederationToken 指南。例如,如果指定友好名称 Bob,则正确的格式为 123456789102:Bob。这种格式会为您的会话命名,并允许访问具有匹配前缀的 Amazon Simple Storage Service(Amazon S3)存储桶。
**注意:**前面的示例假设 aws:userid 变量的调用方指定的友好名称是唯一标识符。唯一友好名称不允许具有相同友好名称的其他用户访问 JSON 策略中指定的资源。
相关信息
GetFederationToken 的权限
IAM 策略元素:变量和标签
IAM 标识符