태그 기반 제한을 위한 AWS Identity and Access Management(IAM) 정책을 생성하려고 합니다. PrincipalTag, ResourceTag, RequestTag 및 TagKeys 조건 키를 사용하고 싶습니다.
해결 방법
다음 IAM 예제 정책은 조건 키를 사용하여 태그 기반 제한을 생성합니다.
참고: 완료할 수 있는 API 작업을 결정하려면 사용 중인 서비스의 API 설명서를 검토하는 것이 좋습니다.
PrincipalTag 조건 키
aws:PrincipalTag/tag-key 조건 키를 사용하여 요청을 보내는 보안 주체에 연결된 태그를 IAM 정책의 태그와 일치시키세요.
다음 예제 IAM 정책은 Amazon Simple Storage Service(Amazon S3) 버킷에 대한 제한을 제공합니다. 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 버전 및 ec2:ResourceTag와 같은 AWS 서비스와 함께 사용할 수 있습니다 . 자세한 내용을 보려면 AWS 서비스의 작업, 리소스 및 조건 키를 참조하세요.
다음 예제 IAM 정책에서는 사용자가 테스트 환경에 있는 인스턴스를 시작, 중지, 종료할 수 있습니다.
{
"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 정책에 지정된 태그 쌍과 비교할 수 있습니다. 리소스 또는 리소스 태그를 생성하고 태그의 값을 확인하는 작업에 이 조건 키를 사용할 수 있습니다.
다음 예제 정책은 사용자가 Amazon EBS(Amazon Elastic Block Store) 볼륨을 생성할 때 특정 Env 태그를 생성하도록 강제합니다. Env에는 Dev, Prod 또는 QA 값이 있어야 합니다.
{
"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 집합 연산자를 사용합니다.
다음 예제 정책은 AWS 리소스에 생성된 태그를 제한합니다. Env 및 CostCenter 태그는 사용자가 새 Amazon EBS 볼륨으로 생성할 수 있는 유일한 태그 키입니다. ForAllValues 세트 연산자를 aws:TagKeys와 함께 사용하면 사용자는 AWS 리소스에 필요한 태그만 첨부할 수 있습니다. 이 정책에서는 사용자가 리소스 생성 요청 시 이러한 태그 키를 제공할 것을 요구하지 않습니다. 대신 정책은 사용자가 다른 키-값 쌍으로 태그를 생성하는 것을 허용하지 않습니다.
{
"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 리소스에 액세스할 수 있는 권한 정의