메뉴
Amazon Relational Database Service
사용 설명서 (API Version 2014-10-31)

IAM 정책 조건을 사용하여 세부적인 액세스 제어 구현

Amazon RDS에서 권한을 부여할 때 권한 정책이 적용되는 방식을 결정하는 조건을 지정할 수 있습니다.

개요

Amazon RDS에서는 IAM 정책을 사용하여 권한을 부여할 때 조건을 지정하는 옵션이 있습니다(액세스 제어 참조). 예를 들면,

  • 사용자가 특정 데이터베이스 엔진을 지정하는 경우에만 DB 인스턴스를 만들 수 있도록 허용합니다.

  • 사용자가 특정 태그 이름 및 태그 값으로 태그 지정된 RDS 리소스를 수정할 수 있도록 허용합니다.

Amazon RDS에 대한 IAM 정책에서는 다음 두 가지 방법으로 조건을 지정할 수 있습니다.

조건 지정: 조건 키 사용

AWS는 액세스 제어를 위해 IAM을 지원하는 모든 AWS 서비스에 대해 사전 정의된 조건 키(AWS 차원의 조건 키) 집합을 제공합니다. 예를 들어, 작업을 요청할 때 특정 AWS ID를 요구하려면 aws:userid 조건 키를 사용할 수 있습니다. 자세한 내용과 AWS 차원의 조건 키 목록은 IAM 사용 설명서사용 가능한 조건 키을(를) 참조하십시오.

참고

조건 키는 대/소문자를 구분합니다.

또한 Amazon RDS는 IAM 권한 정책의 Condition 요소에 포함시킬 수 있는 고유의 조건 키도 제공합니다. 다음 표는 RDS 리소스에 적용되는 RDS 조건 키를 보여 줍니다.

RDS 조건 키 설명 값 유형
rds:DatabaseClass DB 인스턴스 클래스의 유형입니다. 문자열
rds:DatabaseEngine MySQL과 같은 데이터베이스 엔진입니다. 문자열
rds:DatabaseName DB 인스턴스에 있는 데이터베이스의 사용자 정의 이름입니다. 문자열
rds:MultiAz DB 인스턴스를 여러 가용 영역에서 실행할지 여부를 지정하는 값입니다. DB 인스턴스가 다중 AZ를 사용하고 있음을 나타내려면 true를 지정합니다. 부울
rds:Piops 인스턴스가 지원하는 프로비저닝된 IOPS(PIOPS)의 개수가 포함된 값입니다. PIOPS가 활성화되어 있지 않은 DB 인스턴스를 나타내려면 0을 지정합니다. 정수
rds:StorageSize 스토리지 볼륨 크기(GB)입니다. 정수
rds:Vpc DB 인스턴스를 Amazon Virtual Private Cloud(Amazon VPC)에서 실행할지 여부를 지정하는 값입니다. DB 인스턴스가 Amazon VPC에서 실행됨을 나타내려면 true를 지정합니다. 부울

예를 들어, 다음 Condition 요소는 조건 키를 사용하며 MySQL 데이터베이스 엔진을 지정합니다. rds:CreateDBInstance 작업에 대한 권한을 허용하는 IAM 정책에 이를 적용하여 사용자가 MySQL 데이터베이스 엔진에서 DB 인스턴스만 생성하도록 설정할 수 있습니다. 이 조건을 사용하는 IAM 정책의 예는 정책 예: 조건 키 사용을(를) 참조하십시오.

"Condition":{"StringEquals":{"rds:DatabaseEngine": "mysql" } }

모든 RDS 조건 키 식별자와 이 식별자가 적용되는 RDS 작업 및 리소스의 목록은 Amazon RDS API 권한: 작업, 리소스 및 조건 참조을(를) 참조하십시오.

정책 예: 조건 키 사용

다음은 Amazon RDS IAM 권한 정책에서 조건 키를 사용할 수 있는 방법의 예입니다.

예제 1: 특정 DB 엔진을 사용하고 MultiAZ가 아닌 DB 인스턴스를 생성할 수 있는 권한 부여

다음 정책은 RDS 조건 키를 사용하며, 사용자가 MySQL 데이터베이스 엔진을 사용하는 DB 인스턴스만 생성할 수 있도록 허용하며, MultiAZ를 사용하지 않습니다. Condition 요소는 데이터베이스 엔진이 MySQL이라는 요구 사항을 나타냅니다.

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowMySQLCreate", "Effect":"Allow", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "StringEquals":{ "rds:DatabaseEngine":"mysql" }, "Bool":{ "rds:MultiAz": false } } } ] }

예제 2: 특정 DB 인스턴스 클래스에 대한 DB 인스턴스를 만들고 프로비저닝된 IOPS를 사용하는 DB 인스턴스를 만들 수 있는 권한을 명시적으로 거부

다음 정책은 가장 크고 가장 비싼 인스턴스인 DB 인스턴스 클래스 r3.8xlargem4.10xlarge를 사용하는 DB 인스턴스를 만들 수 있는 권한을 명시적으로 거부합니다. 또한 이 정책은 추가 비용이 발생하는 프로비저닝된 IOPS를 사용하는 DB 인스턴스를 사용자가 생성하지 못하도록 합니다.

명시적으로 거부하는 권한은 이미 부여된 다른 모든 권한에 우선합니다. 따라서 부여하지 않으려는 권한을 자격 증명이 우연히 획득하지 않도록 할 수 있습니다.

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"DenyLargeCreate", "Effect":"Deny", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "StringEquals":{ "rds:DatabaseClass":[ "db.r3.8xlarge", "db.m4.10xlarge" ] } } }, { "Sid":"DenyPIOPSCreate", "Effect":"Deny", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "NumericNotEquals":{ "rds:Piops":"0" } } } ] }

조건 지정: 사용자 지정 태그 사용

RDS에서는 사용자 지정 태그를 사용하여 IAM 정책에서 조건을 지정할 수 있습니다.

예를 들어, beta, staging, production 등의 값과 함께 environment라는 태그를 DB 인스턴스에 추가하는 경우, environment 태그 값을 기반으로 특정 사용자를 DB 인스턴스로 제한하는 정책을 만들 수 있습니다.

참고

사용자 지정 태그 식별자는 대/소문자를 구분합니다.

다음 표에는 Condition 요소에서 사용할 수 있는 RDS 태그 식별자가 나와 있습니다.

RDS 태그 식별자 적용 대상
db-tag 읽기 전용 복제본을 포함하는 DB 인스턴스입니다
snapshot-tag DB 스냅샷
ri-tag 예약 DB 인스턴스
secgrp-tag DB 보안 그룹
og-tag DB 옵션 그룹
pg-tag DB 파라미터 그룹
subgrp-tag DB 서브넷 그룹
es-tag 이벤트 구독
cluster-tag DB 클러스터
cluster-pg-tag DB 클러스터 파라미터 그룹
cluster-snapshot-tag DB 클러스터 스냅샷

사용자 지정 태그 조건의 구문은 다음과 같습니다.

"Condition":{"StringEquals":{"rds:rds-tag-identifier/tag-name": ["value"]} }

예를 들어, 다음 Condition 요소는 태그 이름이 environment이고 태그 값이 production인 DB 인스턴스에 적용됩니다.

"Condition":{"StringEquals":{"rds:db-tag/environment": ["production"]} }

태그 생성에 대한 자세한 내용은 Amazon RDS 리소스에 태그 지정을(를) 참조하십시오.

중요

태깅을 사용하여 RDS 리소스에 대한 액세스를 관리하는 경우 RDS 리소스의 태그에 대한 액세스의 보안을 유지하는 것이 좋습니다. AddTagsToResourceRemoveTagsFromResource 작업에 대한 정책을 생성하여 태그에 대한 액세스를 관리할 수 있습니다. 예를 들어, 다음 정책은 모든 리소스에 대해 태그를 추가하거나 제거할 수 있는 사용자의 권한을 거부합니다. 그런 다음 특정 사용자가 태그를 추가하거나 제거할 수 있도록 허용하기 위한 정책을 생성할 수 있습니다.

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"DenyTagUpdates", "Effect":"Deny", "Action":[ "rds:AddTagsToResource", "rds:RemoveTagsFromResource" ], "Resource":"*" } ] }

모든 조건 키 값과 이 값이 적용되는 RDS 작업 및 리소스의 목록은 Amazon RDS API 권한: 작업, 리소스 및 조건 참조을(를) 참조하십시오.

정책 예: 사용자 지정 태그 사용

다음은 Amazon RDS IAM 권한 정책에서 사용자 지정 태그를 사용할 수 있는 방법의 예입니다. Amazon RDS 리소스에 태그를 추가하는 방법에 대한 자세한 내용은 Amazon RDS의 Amazon 리소스 이름(ARN)을 사용한 작업을(를) 참조하십시오.

참고

모든 예는 us-west-2 리전을 사용하며 가상의 계정 ID를 포함합니다.

예제 1: 두 개의 값을 갖는 특정 태그를 사용하는 리소스 작업에 대한 권한 부여

다음 정책은 development 또는 test로 설정된 stage 태그가 있는 인스턴스에서 ModifyDBInstanceCreateDBSnapshot API를 수행할 수 있는 권한을 허용합니다.

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowDevTestCreate", "Effect":"Allow", "Action":[ "rds:ModifyDBInstance", "rds:CreateDBSnapshot" ], "Resource":"*", "Condition":{ "StringEquals":{ "rds:db-tag/stage":[ "development", "test" ] } } } ] }

예제 2: 지정된 DB 파라미터 그룹을 사용하는 DB 인스턴스를 만들 수 있는 권한을 명시적으로 거부

다음 정책은 특정 태그 값이 있는 DB 파라미터 그룹을 사용하는 DB 인스턴스를 만들 수 있는 권한을 명시적으로 거부합니다. DB 인스턴스를 생성할 때 특정 고객 생성 DB 파라미터 그룹을 사용해야 할 경우 이 정책을 적용할 수 있습니다. Deny를 사용하는 정책은 더 광범위한 정책에서 부여한 액세스 권한을 제한하기 위해 가장 자주 사용됩니다.

명시적으로 거부하는 권한은 이미 부여된 다른 모든 권한에 우선합니다. 따라서 부여하지 않으려는 권한을 자격 증명이 우연히 획득하지 않도록 할 수 있습니다.

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"DenyProductionCreate", "Effect":"Deny", "Action":"rds:CreateDBInstance", "Resource":"*", "Condition":{ "StringEquals":{ "rds:pg-tag/usage":"prod" } } } ] }

예제 3: 인스턴스 이름에 사용자 이름이 접두사로 붙은 DB 인스턴스 작업에 대한 권한 부여

다음 정책은 DB 인스턴스 이름에 사용자 이름이 접두사로 붙어 있고 devo와 동일한 stage라는 태그가 있거나 stage라는 태그가 없는 DB 인스턴스에서 API(AddTagsToResource 또는 RemoveTagsFromResource 제외)를 호출할 수 있는 권한을 허용합니다.

정책의 Resource 줄은 Amazon 리소스 이름(ARN)을 기준으로 리소스를 식별합니다. Amazon RDS 리소스에서 ARN을 사용하는 방법에 대한 자세한 내용은 Amazon RDS의 Amazon 리소스 이름(ARN)을 사용한 작업을(를) 참조하십시오.

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AllowFullDevAccessNoTags", "Effect":"Allow", "NotAction":[ "rds:AddTagsToResource", "rds:RemoveTagsFromResource" ], "Resource":"arn:aws:rds:*:123456789012:db:${aws:username}*", "Condition":{ "StringEqualsIfExists":{ "rds:db-tag/stage":"devo" } } } ] }

관련 주제