當我使用 GetFederationToken API 產生臨時憑證時,${aws:userName} 政策變數不起作用。
解決方法
當主體元素為聯合身分使用者,則請求中部包含 ${aws:userName} AWS Identity and Access Management (IAM) 政策變數。請改為使用 ${aws:userID} 政策變數搭配 GetFederationToken API 呼叫。如需詳細資訊,請參閱可以使用政策變數的位置。
在以下 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 呼叫的 Name 參數值必須遵循 GetFederationToken 準則。.例如,如果您指定易記名稱 Bob,則正確的格式為「123456789102:Bob」。此格式會命名您的工作階段,並允許存取具有相符字首的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。
**注意:**上述範例假設 aws:userid 變數的呼叫者指定易記名稱部分是唯一的識別碼。唯一的易記名稱可防止其他具有相同易記名稱的使用者存取 JSON 政策中指定的資源。
相關資訊
GetFederationToken 的權限
IAM 政策元素:變數和標籤
IAM 識別碼