연동 사용자와 함께 IAM 정책 변수를 사용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 8월 19일

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 정책에 지정된 리소스에 대한 액세스 권한이 부여되지 않는 상황을 방지할 수 있습니다. 자세한 내용은 고유 식별자를 참조하십시오.