AWS Fedeation User 에 대한 커스텀 권한 주기

임태빈·2025년 3월 15일

많은 회사에서 Keycloak,okta 등을 활용해서 aws saml login을 진행합니다.

saml login을 진행하는 과정에서 federation role을 생성하게 됩니다.

공용 role을 쓸 수도 있고 개인마다 role을 지정할 수도 있습니다.

저는 개발자마다 권한을 주기보다는 federation 공용 role을 쓰면서
추가적인 policy를 만들어서 특정 개안에게만 해당하는 권한을 주는 것을
선호합니다.

굳이 많은 리소스를 운영하여 좋은게 없다고 생각합니다.

보안 점검을 할때에도 굳이 쓸때없는 리소스가 있다면 그것도 지적 당할 수 있기에...ㅠ
없는게 낫다고 생각합니다.

그렇다면 어떻게 공용role에 policy를 추가해서 특정 사용자만 쓰게 할 수 있을까요?
그건 바로 condition을 주면됩니다.

아래와 같은 condition을 주로 사용하면 특정 user(들)한테 권한을 줄 수 있습니다.

{
	"Version": "2012-10-17",
	"Statement": [
		
		{
			"Sid": "VisualEditor2",
			"Effect": "Allow",
			"Action": [
				"es:List*",
				"es:Desc*"
			],
			"Resource": "*",
			"Condition": {
				"StringEquals": {
					"aws:PrincipalType": "AssumedRole"
				},
				"StringLike": {
					"aws:userid": "*:{userid}"
				},
				"ArnEquals": {
					"aws:PrincipalArn": "arn:aws:iam::{account-id}:role/{role-name}"
				},
				"DateLessThan": {
					"aws:CurrentTime": "2025-08-06T00:00:00Z"
				}
			}
		}
	]
}

저는 여기서 아래와 같이 씁니다.

{
	"Version": "2012-10-17",
	"Statement": [
		
		{
			"Sid": "VisualEditor2",
			"Effect": "Allow",
			"Action": [
				"es:List*",
				"es:Desc*"
			],
			"Resource": "*",
			"Condition": {
				"StringLike": {
					"aws:userid": "*:{userid}"
				},
				"DateLessThan": {
					"aws:CurrentTime": "2025-08-06T00:00:00Z"
				}
			}
		}
	]
}

이유는 신뢰정책으로 saml login을 한 user만 쓸 수 있도록 해둔 상태이기 때문입니다.
이렇게쓰면 또 좋은 이유가 policy에 적을 수 있는 가용글자 수를 줄일 있기에 아주 좋습니다.

추가로 {userid}라고 적혀 있는데 그 값이 궁금하다면 아래 명령어를 통해 확인이 가능합니다.

aws sts get-caller-identity

유용하게 써보시기를 권유드립니다.

profile
golang으로 devops 하고 있는 개발자입니다.

0개의 댓글