當我使用 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}/*"
]
}
]
}
aw:userid 變數的值應該是「ACCOUNTNUMBER:caller-specified-name」。
當調用 GetFederationToken API 時,Name 參數值必須遵循 GetFederationToken 中建立的準則。例如,如果您指定易記名稱 Bob,則正確的格式為「123456789102:Bob」。這會命名您的工作階段,並允許存取具有相符字首的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。
**注意:**此範例假設 aw:userid 變數的呼叫者指定名稱 (易記名稱) 部分是唯一的。唯一易記名稱可防止其他具有相同易記名稱的使用者無法存取 JSON 政策中指定資源的情況。如需詳細資訊,請參閱唯一識別碼。
相關資訊
GetFederationToken 的權限
用於身份登記的權杖自動售貨機 - Java Web 應用程序示例
IAM 政策元素:變數和標籤
IAM 識別碼