리소스 태그 지정에 대한 SCP 예제 - AWS Organizations

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

리소스 태그 지정에 대한 SCP 예제

생성되는 특정 리소스에 대한 태그 요구

다음 SCP는 요청에 지정된 태그가 포함되지 않은 경우 영향받는 계정의 IAM 사용자 및 역할이 특정 리소스 유형을 생성하지 못하도록 합니다.

중요

자신의 환경에서 사용하는 서비스에서 거부 기반 정책을 테스트해야 합니다. 다음 예제는 태그가 지정되지 않은 보안 암호를 생성하거나 태그가 지정되지 않은 Amazon EC2 인스턴스를 실행하는 것을 차단하며, 예외가 없습니다.

다음 정책 예제는 작성된 바와 같이 AWS CloudFormation과 호환되지 않습니다. 해당 서비스는 보안 암호를 생성한 다음 분리된 두 단계로 태그를 지정하기 때문입니다. 이 정책 예제는 AWS CloudFormation이 스택의 일부로 보안 암호를 생성하는 것을 효과적으로 차단합니다. 이러한 작업은 요구에 따라 태그가 지정되지 않은 보안 암호를 짧은 시간 내에 생성하기 때문입니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCreateSecretWithNoProjectTag", "Effect": "Deny", "Action": "secretsmanager:CreateSecret", "Resource": "*", "Condition": { "Null": { "aws:RequestTag/Project": "true" } } }, { "Sid": "DenyRunInstanceWithNoProjectTag", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*" ], "Condition": { "Null": { "aws:RequestTag/Project": "true" } } }, { "Sid": "DenyCreateSecretWithNoCostCenterTag", "Effect": "Deny", "Action": "secretsmanager:CreateSecret", "Resource": "*", "Condition": { "Null": { "aws:RequestTag/CostCenter": "true" } } }, { "Sid": "DenyRunInstanceWithNoCostCenterTag", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*" ], "Condition": { "Null": { "aws:RequestTag/CostCenter": "true" } } } ] }

AWS Organizations SCP와 IAM 권한 정책에서 모두 지원하는 서비스와 작업의 전체 목록을 확인하려면, IAM 사용 설명서AWS 서비스에 사용되는 작업 및 조건 키를 참조하세요.

권한 있는 보안 주체 외에는 태그를 수정할 수 없도록 방지

다음 SCP는 권한 있는 보안 주체만 리소스에 연결된 태그를 수정하도록 정책을 구성하는 방법을 보여 줍니다. 이는 AWS 클라우드 보안 전략의 일환으로 속성 기반 액세스 제어(ABAC)를 사용할 때 중요한 부분입니다. 이 정책은 권한 부여 태그(이 예제에서는 access-project)가 요청을 수행하는 사용자 또는 역할에 연결된 동일한 권한 부여 태그와 정확히 일치하는 리소스의 태그만을 호출자가 수정할 수 있도록 허용합니다. 또한 이 정책은 권한 있는 사용자가 권한 부여에 사용되는 태그의 을 변경하지 못하도록 합니다. 변경을 수행하려면 호출하는 보안 주체에게 권한 부여 태그가 있어야 합니다.

이 정책은 권한 없는 사용자만 태그를 변경하지 못하도록 차단합니다. 이 정책에 의해 차단되지 않은 권한 있는 사용자에게는 관련 태그 지정 API에서 Allow 권한을 명시적으로 부여하는 별도의 IAM 정책이 여전히 필요합니다. 예를 들어 사용자에게 Allow */*(모든 서비스와 모든 작업 허용)를 사용한 관리자 정책이 있는 경우 결합을 통해 관리 사용자는 사용자의 보안 주체에 연결된 권한 부여 태그와 일치하는 권한 부여 태그 값을 가진 태그 변경할 수 있습니다. 이 정책의 명시적 Deny가 관리자 정책의 명시적 Allow를 무시하기 때문입니다.

중요

이는 완전한 정책 솔루션이 아니므로 여기에 제시된 대로 사용해서는 안 됩니다. 이 예제는 ABAC 전략의 일부를 설명하기 위한 것이므로 프로덕션 환경에 맞게 사용자 지정하고 테스트해야 합니다.

작동 방식에 대한 상세 분석을 포함한 전체 정책은 AWS Organizations에서 서비스 제어 정책을 사용하여 권한 부여에 사용되는 리소스 태그 보호를 참조하세요.

자신의 환경에서 사용하는 서비스에서 거부 기반 정책을 테스트해야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyModifyTagsIfResAuthzTagAndPrinTagDontMatch", "Effect": "Deny", "Action": [ "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "*" ], "Condition": { "StringNotEquals": { "ec2:ResourceTag/access-project": "${aws:PrincipalTag/access-project}", "aws:PrincipalArn": "arn:aws:iam::123456789012:role/org-admins/iam-admin" }, "Null": { "ec2:ResourceTag/access-project": false } } }, { "Sid": "DenyModifyResAuthzTagIfPrinTagDontMatch", "Effect": "Deny", "Action": [ "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "*" ], "Condition": { "StringNotEquals": { "aws:RequestTag/access-project": "${aws:PrincipalTag/access-project}", "aws:PrincipalArn": "arn:aws:iam::123456789012:role/org-admins/iam-admin" }, "ForAnyValue:StringEquals": { "aws:TagKeys": [ "access-project" ] } } }, { "Sid": "DenyModifyTagsIfPrinTagNotExists", "Effect": "Deny", "Action": [ "ec2:CreateTags", "ec2:DeleteTags" ], "Resource": [ "*" ], "Condition": { "StringNotEquals": { "aws:PrincipalArn": "arn:aws:iam::123456789012:role/org-admins/iam-admin" }, "Null": { "aws:PrincipalTag/access-project": true } } } ] }