

# 조건 지정: 사용자 지정 태그 사용
<a name="UsingWithRDS.IAM.SpecifyingCustomTags"></a>

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

예를 들어 이름이 `environment`인 태그를 `beta`, `staging`, `production` 등의 값으로 DB 인스턴스에 추가한다고 가정하겠습니다. 그러면 `environment` 태그 값에 따라 특정 사용자를 DB 인스턴스로 제한하는 정책을 생성할 수 있습니다.

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

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

<a name="rds-iam-condition-tag-reference"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/UsingWithRDS.IAM.SpecifyingCustomTags.html)

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

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

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

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

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

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

****  

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

Amazon RDS 작업 목록을 보려면 *서비스 권한 부여 참조*에서 [Amazon RDS에서 정의한 작업](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonrds.html#amazonrds-actions-as-permissions)을 참조하세요.

## 정책 예: 사용자 지정 태그 사용
<a name="UsingWithRDS.IAM.Conditions.Tags.Examples"></a>

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

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

### 예제 1: 두 개의 값을 갖는 특정 태그를 사용하는 리소스 작업에 대한 권한 부여
<a name="w2aac58c48c33c23c29b6"></a>

다음 정책은 `development` 또는 `test`로 설정된 `stage` 태그를 사용하여 DB 인스턴스에서 `CreateDBSnapshot` API 작업을 수행할 수 있는 권한을 허용합니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowAnySnapshotName",
         "Effect":"Allow",
         "Action":[
            "rds:CreateDBSnapshot"
         ],
         "Resource":"arn:aws:rds:*:123456789012:snapshot:*"
      },
      {
         "Sid":"AllowDevTestToCreateSnapshot",
         "Effect":"Allow",
         "Action":[
            "rds:CreateDBSnapshot"
         ],
         "Resource":"arn:aws:rds:*:123456789012:db:*",
         "Condition":{
            "StringEquals":{
                "rds:db-tag/stage":[
                  "development",
                  "test"
               ]
            }
         }
      }
   ]
}
```

------

다음 정책은 `development` 또는 `test`로 설정된 `stage` 태그를 사용하여 DB 인스턴스에서 `ModifyDBInstance` API 작업을 수행할 수 있는 권한을 허용합니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowChangingParameterOptionSecurityGroups",
         "Effect":"Allow",
         "Action":[
            "rds:ModifyDBInstance"
            ],
          "Resource": [
            "arn:aws:rds:*:123456789012:pg:*",
            "arn:aws:rds:*:123456789012:secgrp:*",
            "arn:aws:rds:*:123456789012:og:*"
            ]
       },
       {
         "Sid":"AllowDevTestToModifyInstance",
         "Effect":"Allow",
         "Action":[
            "rds:ModifyDBInstance"
            ],
         "Resource":"arn:aws:rds:*:123456789012:db:*",
         "Condition":{
            "StringEquals":{
               "rds:db-tag/stage":[
                  "development",
                  "test"
                  ]
               }
            }
       }
    ]
}
```

------

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

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

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

------
#### [ JSON ]

****  

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

------

### 예제 3: 인스턴스 이름에 사용자 이름이 접두사로 붙은 DB 인스턴스 작업에 대한 권한 부여
<a name="w2aac58c48c33c23c29c10"></a>

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

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

------
#### [ JSON ]

****  

```
{
   "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"
            }
         }
      }
   ]
}
```

------