관리 메뉴

가끔 보자, 하늘.

AWS AssumeRole 설정 안될 때.. 본문

개발 이야기/인프라 구축 및 운영

AWS AssumeRole 설정 안될 때..

가온아 2022. 3. 17. 10:17
An error occurred (AccessDenied) when calling the AssumeRole operation : User: arn:aws:iam::**************:user/ar_user is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::**************:role/test_role

위와 같은 에러는 두 가지 경우에서 발생할 수 있다. 

첫 번째는 할당하고자 하는 role 이 없을 때.

에러 메세지가 권한이 없다고 나와서 애매한데 오타 등으로 이름을 잘못 지정하거나 삭제된 role을 할당하려고 할 때 위와 같은 에러를 볼 수 있다.

 

두 번째는 "신뢰 관계" 설정이 안되어 있을 때. 

해당 role 속성 중 "신뢰 관계" 설정이 있는데 간혹 자동 설정된 role을 복사해서 수정/사용하거나 다른 용도로 생성된 role을 할당하려고 할 때 위 에러가 발생할 수 있다. 이렇게 쓰는건 정상적이지 않지만 간혹 생각없이 사용하다가 봉변을 당하기도 한다. 근본적으로는 필요한 권한은 tag를 이용해 철저히 분리/사용하는게 올바른 방법이다.

 

"신뢰 관계"를 확인해서 아래와 같이 사용하는 계정에 AssumeRole  권한이 허용되어 있는지 확인해보자.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::**********:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {}
        }
    ]
}

없다면 추가/변경하여 사용해보면 됩니다. 

 

아래는 python으로 AssumeRole을 할당을 시도해보는 간단한 예제이다.

import boto3

aws_access_key_id = '**********'
aws_secret_access_key = '************'

client = boto3.client('sts', aws_access_key_id=aws_access_key_id, aws_secret_access_key=aws_secret_access_key)

response = client.assume_role(RoleArn='arn:aws:iam::***********:role/ar-test-role', RoleSessionName='test-role')

print(response['Credentials']['AccessKeyId'], response['Credentials']['SecretAccessKey'])

문제가 있다면 위와 같은 에러가 발생할 것이고, 정상적으로 할당되었다면 임의로 생성된 계정의 AccessKeyId와 SecretAccessKey 값을 확인할 수 있다.

반응형