GetFederationToken API を使用して一時的な認証情報を生成すると、ポリシー変数 ${aws:userName} が機能しません。
解決策
プリンシパル要素がフェデレーションユーザーの場合、${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 ポリシーで指定されたリソースにアクセスすることはできません。
関連情報
GetFederation トークンの取得権限
IAM ポリシー要素: 変数とタグ
IAM 識別子