- 최신
- 최다 투표
- 가장 많은 댓글
안녕하세요, 문의사항들에 대해 답변드립니다.
먼저 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 - 역할 전환 권한 부여 방법
IAM 사용자가 역할을 수임(assume)할 수 있는지 여부는 두 가지 권한 검사를 통해 결정됩니다:
- 역할의 신뢰 정책(Trust Policy): 이 정책은 "누가 이 역할을 수임할 수 있는지"를 정의합니다.
- 사용자의 권한 정책(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
관련 콘텐츠
- 질문됨 3달 전
- 질문됨 10달 전
- AWS 공식업데이트됨 7달 전
