当我使用 GetFederationToken API 生成临时凭证时,${aws:userName} 策略变量不起作用。
解决方法
当使用 GetFederationToken API 时,请使用 ${aws:userID} 策略变量,而不是 ${aws:userName} 策略变量。这是因为如果委托人是联合身份用户,则变量 ${aws:userName} 将不存在。有关更多信息,请参阅策略变量的使用位置。
以下 JSON IAM 策略提供了一个示例,其中 ${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 时,名称参数值必须遵循 GetFederationToken 中建立的指导原则。例如,如果您指定友好名称 Bob,则正确的格式是“123456789102:Bob”。它将为您的会话命名,并允许使用匹配的前缀访问 Amazon Simple Storage Service (Amazon S3) 存储桶。
**注意:**此示例假定 aws:userid 变量的调用方指定名称(友好名称)部分是唯一的。唯一的友好名称可防止出现以下情况:无法向具有相同友好名称的另一个用户授予访问 JSON 策略中指定的资源的权限。有关更多信息,请参阅唯一标识符。
相关信息
GetFederationToken 的权限
用于身份注册的令牌售卖机 - 示例 java Web 应用程序
IAM 策略元素:变量和标签
IAM 标识符