

# Aurora에서 리소스를 생성, 수정 및 삭제하기 위한 권한 정책
<a name="security_iam_id-based-policy-examples-create-and-modify-examples"></a>

다음 섹션에는 리소스에 대한 액세스를 허용하고 제한하는 권한 정책의 예제가 나와 있습니다.

## 사용자에게 AWS 계정에서 DB 인스턴스를 생성하도록 허용
<a name="security_iam_id-based-policy-examples-create-db-instance-in-account"></a>

다음은 ID가 `123456789012`인 계정에 AWS 계정에 대한 DB 인스턴스를 생성하도록 허용하는 정책 예제입니다. 이 정책에 따라 새 DB 인스턴스의 이름은 `test`로 시작해야 합니다. 또한 새 DB 인스턴스는 MySQL 데이터베이스 엔진 및 `db.t2.micro` DB 인스턴스 클래스를 사용해야 합니다. 또한 새로운 DB 인스턴스는 `default`로 시작하는 옵션 그룹과 DB 파라미터 그룹을, 그리고 `default` 서브넷 그룹을 사용해야 합니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "AllowCreateDBInstanceOnly",
         "Effect": "Allow",
         "Action": [
            "rds:CreateDBInstance"
         ],
         "Resource": [
            "arn:aws:rds:*:123456789012:db:test*",
            "arn:aws:rds:*:123456789012:og:default*",
            "arn:aws:rds:*:123456789012:pg:default*",
            "arn:aws:rds:*:123456789012:subgrp:default"
         ],
         "Condition": {
            "StringEquals": {
               "rds:DatabaseEngine": "mysql",
               "rds:DatabaseClass": "db.t2.micro"
            }
         }
      }
   ]
}
```

------

다음 사용자 권한을 지정하는 단일 명령문이 정책에 포함됩니다.
+ 정책은 계정이 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) API 작업을 사용하여 DB 인스턴스를 생성할 수 있도록 허용합니다. 이는 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) AWS CLI 명령과 AWS Management Console에도 적용됩니다.
+ `Resource` 요소는 사용자가 리소스 위치에서 또는 리소스를 사용하여 작업을 수행할 수 있도록 지정합니다. 리소스는 Amazon 리소스 이름(ARN)을 사용하여 지정합니다. 이 ARN에는 리소스가 속하는 서비스 이름(`rds`), AWS 리전(`*`는 위의 예제에서 사용하는 모든 리전을 의미함), AWS 계정 번호(이 예에서는 `123456789012`가 계정 번호임) 및 리소스 유형이 포함됩니다. ARN 생성에 대한 자세한 내용은 [Amazon RDS의 Amazon 리소스 이름(ARN)](USER_Tagging.ARN.md) 단원을 참조하십시오.

  위의 예제에서 `Resource` 요소는 사용자 리소스에 대해 다음과 같은 정책 제약 조건을 지정합니다.
  + 새 DB 인스턴스에 대한 DB 인스턴스 식별자는 `test`로 시작해야 합니다(예: `testCustomerData1`, `test-region2-data`).
  + 새로운 DB 인스턴스의 옵션 그룹은 `default`로 시작해야 합니다.
  + 새로운 DB 인스턴스의 DB 파라미터 그룹은 `default`로 시작해야 합니다.
  + 새로운 DB 인스턴스의 서브넷 그룹은 `default` 서브넷 그룹이 되어야 합니다.
+ `Condition` 요소는 DB 엔진은 MySQL이 되고, DB 인스턴스 클래스는 `db.t2.micro`가 되도록 지정합니다. `Condition` 요소는 정책 적용 시 조건을 지정합니다. 그 밖에도 `Condition` 요소를 사용하여 다른 권한이나 제한을 추가할 수 있습니다. 조건 지정에 대한 자세한 내용은 [Aurora의 정책 조건 키](security_iam_service-with-iam.md#UsingWithRDS.IAM.Conditions) 단원을 참조하십시오. 이 예제에서는 `rds:DatabaseEngine` 및 `rds:DatabaseClass` 조건을 지정합니다. `rds:DatabaseEngine`의 유효 조건 값에 대한 정보는 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)의 `Engine` 파라미터 아래 목록을 참조하십시오. `rds:DatabaseClass`의 유효 조건 값에 대한 정보는 [DB 인스턴스 클래스에 지원되는 DB 엔진](Concepts.DBInstanceClass.SupportAurora.md) 단원을 참조하십시오.

자격 증명 기반 정책에서는 권한을 가질 보안 주체를 지정하지 않으므로 이 정책은 `Principal` 요소를 지정하지 않습니다. 정책을 사용자에게 연결할 경우 사용자는 암시적인 보안 주체입니다. IAM 역할에 권한 정책을 연결할 경우 역할의 신뢰 정책에 식별된 보안 주체는 권한을 가집니다.

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

## 사용자가 모든 RDS 리소스에서 Describe 작업을 수행할 수 있도록 허용
<a name="IAMPolicyExamples-RDS-perform-describe-action"></a>

다음 권한 정책은 사용자에게 `Describe`로 시작하는 모든 작업을 실행할 수 있는 권한을 부여합니다. 이러한 작업은 DB 인스턴스와 같은 RDS 리소스에 대한 정보를 보여 줍니다. `Resource` 요소에 와일드카드 문자(\$1)가 있으면 계정이 소유한 모든 Amazon Aurora 리소스에 대해 작업이 허용됩니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "AllowRDSDescribe",
         "Effect": "Allow",
         "Action": "rds:Describe*",
         "Resource": "*"
      }
   ]
}
```

------

## 사용자가 지정된 DB 파라미터 그룹 및 서브넷 그룹을 사용하는 DB 인스턴스를 생성할 수 있도록 허용
<a name="security_iam_id-based-policy-examples-create-db-instance-specified-groups"></a>

다음 권한 정책은 사용자가 `mydbpg` DB 파라미터 그룹 및 `mydbsubnetgroup` DB 서브넷 그룹을 사용해야 하는 DB 인스턴스만 생성할 수 있도록 허용하는 권한을 부여합니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": "rds:CreateDBInstance",
         "Resource": [
            "arn:aws:rds:*:*:pg:mydbpg",
            "arn:aws:rds:*:*:subgrp:mydbsubnetgroup"
         ]
      }
   ]
}
```

------

## 두 가지 값이 있는 특정 태그를 사용하는 리소스 작업에 대한 권한 부여
<a name="security_iam_id-based-policy-examples-grant-permissions-tags"></a>

자격 증명 기반 정책의 조건을 사용하여 태그를 기반으로 Aurora 리소스에 대한 액세스를 제어할 수 있습니다. 다음 정책은 `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"
               ]
            }
         }
      }
   ]
}
```

------

## 사용자의 DB 인스턴스 삭제 방지
<a name="IAMPolicyExamples-RDS-prevent-db-deletion"></a>

다음 권한 정책은 사용자의 특정 DB 인스턴스 삭제를 방지하는 권한을 부여합니다. 예를 들어, 관리자가 아닌 모든 사용자에 대해 프로덕션 DB 인스턴스를 삭제할 수 있는 권한을 거부해야 할 수 있습니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "DenyDelete1",
         "Effect": "Deny",
         "Action": "rds:DeleteDBInstance",
         "Resource": "arn:aws:rds:us-west-2:123456789012:db:my-mysql-instance"
      }
   ]
}
```

------

## 리소스에 대한 모든 액세스 거부
<a name="IAMPolicyExamples-RDS-deny-all-access"></a>

리소스에 대한 액세스를 명시적으로 거부할 수 있습니다. 거부 정책은 허용 정책보다 우선합니다. 다음 정책은 사용자가 리소스를 관리할 수 있는 권한을 명시적으로 거부합니다.

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Deny",
         "Action": "rds:*",
         "Resource": "arn:aws:rds:us-east-1:123456789012:db:mydb"
      }
   ]
}
```

------