AWS Identity and Access Management(AWS IAM) 정책에서 PrincipalTag, ResourceTag, RequestTag 및 TagKeys 태그 기반 조건 키를 사용하여 AWS 리소스에 대한 액세스를 제어하려고 합니다.
해결 방법
다음 IAM 예시 정책은 조건 키를 사용하여 태그가 있는 AWS 리소스에 대한 액세스를 제어합니다.
완료할 수 있는 API 작업을 결정하려면 사용 중인 서비스의 API 설명서를 검토하는 것이 좋습니다.
PrincipalTag 조건 키
aws:PrincipalTag/tag-key 조건 키를 사용하여 다음 태그를 비교하십시오.
- 요청을 보내는 주체에 연결된 태그
- IAM 정책에 지정된 태그
다음 예시에서 Amazon Simple Storage Service(Amazon S3) PutObject 작업은 제목이 Product-Manager인 사용자를 제외한 모든 사용자의 버킷 액세스를 거부합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAllButProductManagers",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::productionbucket/*"
],
"Condition": {
"StringNotEquals": {
"aws:PrincipalTag/job-title": "Product-Manager"
}
}
}
]
}
ResourceTag 조건 키
aws:ResourceTag/tag-key 조건 키를 사용하여 IAM 정책에 지정된 태그 키-값 쌍을 AWS 리소스에 연결된 키-값 쌍과 비교합니다. 자세한 내용을 보려면 AWS 리소스에 대한 액세스 제어를 참조하십시오.
aws:ResourceTag/tag-key 조건 키는 글로벌 버전 aws:ResourceTag 및 AWS 서비스(예: ec2:ResourceTag)와 함께 사용할 수 있습니다.
다음 예시에서 IAM 정책은 사용자가 테스트 환경에 있는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작, 중지 및 종료하도록 허용합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowOnlyForTestEnvironment",
"Effect": "Allow",
"Action": [
"ec2:TerminateInstances",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringLike": {
"ec2:ResourceTag/Env": "test"
}
}
}
]
}
RequestTag 조건 키
aws:RequestTag/tag-key 조건 키를 사용하여 사용자 요청의 키-값 쌍을 IAM 정책에 지정된 태그 쌍과 비교할 수 있습니다. 이 조건 키를 사용하여 리소스를 만드는 작업을 제어하고 이러한 작업 중에 태그를 검증할 수 있습니다.
다음 예시에서 IAM 정책은 Dev, Prod 또는 QA 값을 가진 Env 태그를 포함하는 경우에만 사용자가 Amazon Elastic Block Store(Amazon EBS) 볼륨을 만들도록 허용합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCreateVolumeWithEnvTag",
"Effect": "Allow",
"Action": "ec2:CreateVolume",
"Resource": "arn:aws:ec2:*:*:volume/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/Env": [
"Dev",
"Prod",
"QA"
]
}
}
}
]
}
TagKeys 조건 키
aws:TagKeys 조건 키를 사용하여 요청의 태그 키를 IAM 정책에 지정된 태그 키와 비교할 수 있습니다. 이 조건 키는 리소스에 연결된 태그 키의 유효성을 검사합니다.
요청에 여러 키-값 쌍이 포함된 경우 ForAllValues 또는 ForAnyValue 집합 연산자를 사용하여 이러한 값을 비교하십시오.
다음 예시에서 IAM 정책은 AWS 리소스의 태그 만들기를 제한합니다. 사용자가 새 Amazon EBS 볼륨을 만들 때 Env 및 CostCenter 태그만 만들도록 허용합니다. 사용자는 ForAllValues 집합 연산자와 **** 조건 키를 사용하여 필요한 태그를 리소스에 연결할 수 있습니다. 정책은 리소스를 만드는 동안 이러한 태그 키를 선택 사항으로 만들고 다른 키-값 쌍을 사용한 태그 만들기를 방지합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:CreateVolume",
"Resource": "arn:aws:ec2:*:*:volume/*",
"Condition": {
"ForAllValues:StringEquals": {
"aws:TagKeys": [
"Env",
"CostCenter"
]
}
}
}
]
}
관련 정보
IAM 튜토리얼: 태그를 기반으로 AWS 리소스에 액세스할 수 있는 권한 정의