IAM 정책 요소: 변수와 태그
IAM 정책 요소: 변수와 태그 (Variables and tags)
IAM 정책에서 런타임 정보를 주입하는 정책 변수와, 리소스·세션 태그를 조건·리소스 지정에 활용하는 방법을 다루는 페이지예요. ${aws:username} 같은 구문이 대표적이에요.
출처: 문서
본문
IAM 정책에서는 정책 변수(policy variable)를 사용해서 요청이 처리될 때 동적으로 값이 채워지는 자리 표시자를 넣을 수 있어요. 정책 변수는 ${...} 구문으로 표기해요 (예: ${aws:username}).
정책 변수를 사용할 수 있는 주요 요소는 다음과 같아요.
- Resource — 리소스 ARN의 일부에 변수를 넣을 수 있어요 (예:
arn:aws:s3:::bucket/${aws:username}/*). - Condition — 조건 키 값에 변수를 넣을 수 있어요 (예:
{"StringLike": {"s3:prefix": ["${aws:username}/*"]}}). - Principal — 특정 상황에서 사용할 수 있어요.
정책 변수를 쓰려면 정책의 Version 요소가 2012-10-17이어야 해요. 이전 버전(2008-10-17)에서는 변수가 리터럴 문자열로 취급돼요.
요청이 처리될 때 AWS는 정책의 변수를 요청 컨텍스트의 해당 값으로 대체해요. 예를 들어 ${aws:username}은 요청을 보낸 사용자의 이름으로 대체돼요.
태그 기반 속성
IAM은 리소스와 프린시펄에 태그를 연결할 수 있어요. 정책에서는 태그를 사용해 다음을 수행할 수 있어요.
- 리소스 태그로 접근 제어 —
aws:ResourceTag/key-name조건 키로 리소스의 태그를 검사해요. - 요청 태그로 접근 제어 —
aws:RequestTag/key-name조건 키로 요청에서 보낸 태그를 검사해요. - 프린시펄 태그로 접근 제어 —
aws:PrincipalTag/key-name조건 키로 사용자나 역할에 연결된 태그를 검사해요. - 태그 키로 접근 제어 —
aws:TagKeys조건 키로 요청에 포함된 태그 키 목록을 검사해요.
예를 들어 다음 정책 문은 사용자가 aws:PrincipalTag/job-category가 iamuser-admin인 경우에만 액세스 키 동작을 수행할 수 있게 해요.
{
"Version":"2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "iam:*AccessKey*",
"Resource": "arn:aws:iam::111122223333:user/*",
"Condition": {
"StringEquals": {
"aws:PrincipalTag/job-category": "iamuser-admin"
}
}
}
}
세션 태그
AWS STS로 임시 자격 증명을 만들 때 세션 태그(session tag)를 전달할 수 있어요. 세션 태그는 수임된 역할 세션에서 aws:PrincipalTag/... 조건 키로 접근할 수 있어요. 세션 태그를 전달하려면 sts:TagSession 권한이 필요해요. 세션을 수임할 때 전달하는 세션 태그는 역할에 연결된 태그와 함께 프린시펄 태그로 취급돼요.
세션 태그에 대한 자세한 내용은 AWS STS에서 세션 태그 전달을 참고하세요.
변수를 사용할 수 없는 요소
정책 변수는 Effect, Version, Principal(일부 경우 제외)과 같은 요소의 값에는 사용할 수 없어요. 변수는 주로 Resource와 Condition 요소에서 사용돼요.