GetFederationToken API를 사용하여 임시 자격 증명을 생성하면 ${aws:userName} 정책 변수가 작동하지 않습니다.
해결 방법
GetFederationToken API를 사용하는 경우 ${aws:userName} 정책 변수 대신 ${aws:userID} 정책 변수를 사용합니다. 이는 보안 주체가 연동 사용자인 경우 ${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 S3(Amazon Simple Storage Service) 버킷에 액세스할 수 있습니다.
참고: 이 예제에서는 aws:userid 변수의 호출자 지정 이름(친숙한 이름) 부분이 고유하다고 가정합니다. 고유한 친숙한 이름을 사용하면 동일한 친숙한 이름을 가진 다른 사용자에게 JSON 정책에 지정된 리소스에 대한 액세스 권한이 부여되지 않는 상황을 방지할 수 있습니다. 자세한 내용은 고유 식별자를 참조하십시오.
관련 정보
GetFederationToken에 대한 권한
자격 증명 등록을 위한 토큰 벤딩 머신 - 샘플 Java 웹 응용 프로그램
IAM 정책 요소: 변수 및 태그
IAM 식별자