내용으로 건너뛰기

sts:AssumeRole 권한이 없는 IAM 사용자의 역할 전환 성공에 대한 설명 요청

1

안녕하세요, AWS Support팀.
다음과 같은 상황에 대해 문의드립니다.

■ 배경 지식
https://aws.amazon.com/ko/blogs/korea/how-to-use-trust-policies-with-iam-roles-html/
위 블로그 글에서 'Principal 속성을 사용하여 범위 축소' 섹션에 다음과 같은 문구가 있습니다.

신뢰 정책에서 Principal 속성은 IAM 역할을 맡을 수 있는 다른 보안 주체를 나타냅니다. 위의 예에서 111122223333은 감사자의 AWS 계정에 대한 AWS 계정 번호를 나타냅니다. 실제로 이렇게 하면 sts:AssumeRole 권한이 있는 111122223333 AWS 계정의 모든 보안 주체가 이 역할을 맡을 수 있습니다.

특정 IAM 사용자 계정에 대한 액세스를 제한하려면 111122223333 계정의 IAM 사용자 LiJuan만 이 역할을 맡을 수 있도록 다음 예와 같이 신뢰 정책을 정의하면 됩니다. LiJuan이 작동하려면 IAM 사용자에게 sts:AssumeRole 권한도 연결되어 있어야 합니다.

■ 상황 설명
IAM 사용자 test.user1은 본인의 권한 정책에 sts:AssumeRole 권한이 명시되어 있지 않습니다.

그러나 다음과 같은 신뢰 정책을 가진 IAM Role에 대해, 콘솔에서 성공적으로 역할을 전환할 수 있었고 혹은 CLI에서 aws sts assume-role 명령을 통해 임시 Credentials을 받을 수 있었습니다.

{  
    "Version": "2012-10-17",  
    "Statement": [  
        {  
            "Effect": "Allow",  
            "Principal": {  
                "AWS": "arn:aws:iam::111122223333:user/test.user1"  
            },  
            "Action": "sts:AssumeRole",  
            "Condition": {}  
        }  
    ]  
}  

저는 이때 test.user1(동일 계정 내의 IAM 사용자)의 권한 정책에 sts:AssumeRole 권한이 없기 때문에, 역할 전환 혹은 STS AssumeRole 호출이 실패할 것으로 예상했습니다. 하지만 예상과 다르게 역할이 잘 전환되거나, STS에서 임시 자격 증명(Credentials)을 정상적으로 발급받았습니다.

■ 문의사항

  1. test.user1이 sts:AssumeRole 권한을 보유하지 않고 있음에도, 위와 같은 신뢰 정책을 가진 역할을 성공적으로 전환할 수 있었던 이유는 무엇인가요?

AWS IAM의 권한 평가 로직에서, 해당 사례처럼 IAM 사용자(Principal) 가 신뢰 정책에 명시되어 있는 경우, 자신의 권한 정책에 sts:AssumeRole을 명시하지 않아도 되는 것인지 궁금합니다.

  1. 그렇다면 신뢰 정책 내의 Action은 어떤 의미를 갖는 것인지 궁금합니다.
질문됨 9달 전110회 조회
2개 답변
0

안녕하세요, 문의사항들에 대해 답변드립니다.

먼저 test.user1이 sts:AssumeRole 권한 없이도 역할 전환에 성공한 이유는 동일 계정 내에서 IAM 사용자가 신뢰 정책(Trust Policy)에 명시적으로 Principal로 지정된 경우, 해당 사용자의 권한 정책에 sts:AssumeRole 권한이 없어도 역할을 전환할 수 있기 때문입니다.

IAM 역할 전환(Assuming role) 시 권한 평가는 다음 두 가지를 모두 확인합니다.

  • 신뢰 정책(Trust Policy): 역할을 누가 맡을 수 있는지 정의
  • 권한 정책(Identity-based Policy): Principal이 sts:AssumeRole을 호출할 권한이 있는지 정의

이때 동일 계정인 경우와 교차 계정인 경우의 차이가 존재합니다.

동일 계정 내 (Same Account):

  • IAM 사용자가 신뢰 정책에 명시적으로 지정된 경우 (예: arn:aws:iam::111122223333:user/test.user1)
  • 해당 사용자는 자신의 권한 정책에 sts:AssumeRole 권한이 없어도 역할 전환 가능

교차 계정 (Cross-Account):

  • 다른 계정의 Principal이 역할을 맡으려면 양쪽 모두 허용해야 함
  • 신뢰 정책 + Principal의 권한 정책에 sts:AssumeRole 권한 필요

이를 IAM Policy Evaluation Logic 관점에서 보면 AWS IAM Policy Evaluation Logic에 따르면 역할 전환 시 Resource-based Policy(신뢰 정책), Identity-based Policy(권한 정책) 두 가지 정책 경로가 평가됩니다.

일반적으로는 두 경로 모두 'Allow'를 반환해야 최종적으로 허용되지만 동일 계정 내에서 신뢰 정책이 IAM 사용자를 명시적으로 지정한 경우, AWS는 Identity-based policy의 sts:AssumeRole 권한 확인을 생략합니다.

따라서 "동일 계정 내에서 IAM 사용자가 신뢰 정책에 명시적으로 Principal로 지정된 경우, 해당 사용자의 권한 정책에 sts:AssumeRole 권한이 없어도 역할 전환(Assuming role)이 가능합니다."

(주의 사항: 이때 예외 케이스로는 신뢰 정책에서 Principal을 계정 루트 (예: arn:aws:iam:111122223333:root)로 지정한 경우는 다릅니다. 이는 해당 계정의 모든 Principal에게 잠재적 권한만 부여하므로, 각 IAM 사용자는 자신의 Identity-based Policy에 sts:AssumeRole 권한이 반드시 필요합니다.)

다음으로 신뢰 정책에서 "Action"의 의미는 역할 측에서 "이 작업을 허용한다"는 의미입니다. 위의 예시에서 "Action": "sts:AssumeRole"은 해당 역할에 대해 허용되는 STS 작업을 정의하는 것입니다.

즉, Principal이 이 역할을 맡기 위해 호출할 수 있는 API 작업을 명시하고 있습니다.

추가적인 문의사항이 있으시다면 질문 남겨주시면 더 자세히 도와드리겠습니다.

감사합니다.

Sources

docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html - IAM 정책 평가 로직 전체 설명

docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html - 동일/교차 계정 역할 전환 시나리오

aws.amazon.com/blogs/security/how-to-use-trust-policies-with-iam-roles/ - 신뢰 정책 사용 가이드

docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_permissions-to-switch.html - 역할 전환 권한 부여 방법

답변함 5달 전
-1

IAM 사용자가 역할을 수임(assume)할 수 있는지 여부는 두 가지 권한 검사를 통해 결정됩니다:

  1. 역할의 신뢰 정책(Trust Policy): 이 정책은 "누가 이 역할을 수임할 수 있는지"를 정의합니다.
  2. 사용자의 권한 정책(Permission Policy): 이 정책은 "사용자가 어떤 작업을 수행할 수 있는지"를 정의합니다.

귀하의 사례에서, test.user1 사용자는 자신의 권한 정책에 sts:AssumeRole 권한이 명시되어 있지 않음에도 역할을 성공적으로 수임할 수 있었습니다. 이는 역할의 신뢰 정책에서 해당 사용자를 명시적으로 Principal로 지정했기 때문입니다.

신뢰 정책에서 특정 IAM 사용자(ARN)를 Principal로 직접 지정하면, 해당 사용자는 자신의 권한 정책에 sts:AssumeRole 권한이 없어도 해당 역할을 수임할 수 있습니다. 이는 AWS IAM의 권한 평가 로직에서 특별한 경우로 취급됩니다.

신뢰 정책 내의 "Action": "sts:AssumeRole"은 해당 Principal이 수행할 수 있는 작업을 지정합니다. 이 경우, test.user1 사용자는 이 역할에 대해 sts:AssumeRole 작업만 수행할 수 있습니다. 다른 작업(예: sts:AssumeRoleWithWebIdentity)은 허용되지 않습니다.

일반적으로 보안 모범 사례로는, 사용자의 권한 정책에도 sts:AssumeRole 권한을 명시적으로 부여하고, 필요한 경우 특정 역할 ARN으로 제한하는 것이 좋습니다. 이렇게 하면 최소 권한 원칙을 더 잘 준수할 수 있습니다.
Sources
Access for an IAM user in another AWS account that you own - AWS Identity and Access Management

답변함 9달 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.