

# 리소스 기반 정책을 포함한 테이블 생성
<a name="rbac-create-table"></a>

DynamoDB 콘솔, [CreateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CreateTable.html) API, AWS CLI, [AWS SDK](rbac-attach-resource-based-policy.md#rbac-attach-policy-java-sdk) 또는 CloudFormation 템플릿을 사용하여 테이블을 생성하는 동안 리소스 기반 정책을 추가할 수 있습니다.

## AWS CLI
<a name="rbac-create-table-CLI"></a>

다음 예시에서는 `create-table` AWS CLI 명령을 사용하여 *MusicCollection*이라는 테이블을 생성합니다. 이 명령에는 테이블에 리소스 기반 정책을 추가하는 `resource-policy` 파라미터도 포함되어 있습니다. 이 정책을 통해 사용자 *John*은 테이블에서 [RestoreTableToPointInTime](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_RestoreTableToPointInTime.html), [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) 및 [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html) API 작업을 수행할 수 있습니다.

*기울임꼴* 텍스트를 리소스별 정보로 바꿔야 합니다.

```
aws dynamodb create-table \
    --table-name MusicCollection \
    --attribute-definitions AttributeName=Artist,AttributeType=S AttributeName=SongTitle,AttributeType=S \
    --key-schema AttributeName=Artist,KeyType=HASH AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \
    --resource-policy \
        "{
            \"Version\": \"2012-10-17\",		 	 	 
            \"Statement\": [
              {
                    \"Effect\": \"Allow\",
                    \"Principal\": {
                        \"AWS\": \"arn:aws:iam::123456789012:user/John\"
                    },
                    \"Action\": [
                        \"dynamodb:RestoreTableToPointInTime\",
                        \"dynamodb:GetItem\",
                        \"dynamodb:DescribeTable\"
                    ],
                    \"Resource\": \"arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection\"
                }
            ]
        }"
```

## AWS Management Console
<a name="rbac-create-table-console"></a>

1. AWS Management Console에 로그인하고 DynamoDB 콘솔([https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/))을 엽니다.

1. 대시보드에서 **테이블 생성**을 선택합니다.

1. **테이블 세부 정보**에 테이블 이름, 파티션 키 및 정렬 키 세부 정보를 입력합니다.

1. **테이블 설정**에서 **설정 사용자 지정**을 선택합니다.

1. (선택 사항) **테이블 클래스**, **용량 계산기**, **읽기/쓰기 용량 설정**, **보조 인덱스**, **저장 중 암호화** 및 **삭제 방지**에 대한 옵션을 지정합니다.

1. **리소스 기반 정책**에서 테이블 및 해당 인덱스에 대한 액세스 권한을 정의하는 정책을 추가합니다. 이 정책에서는 이러한 리소스에 액세스할 수 있는 사용자와 각 리소스에서 해당 사용자가 수행할 수 있는 작업을 지정합니다. 정책을 추가하려면 다음 중 하나를 수행합니다.
   + JSON 정책 문서를 입력하거나 붙여 넣습니다. IAM 정책 언어에 대한 자세한 내용은 **IAM 사용 설명서의 [JSON 편집기를 사용하여 정책 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)을 참조하세요.
**작은 정보**  
Amazon DynamoDB 개발자 안내서에서 리소스 기반 정책의 예를 보려면 **정책 예시**를 선택하세요.
   + 새 문을 추가하려면 **새 문 추가**를 선택하고 제공된 필드에 정보를 입력합니다. 문을 추가하려는 만큼 이 단계를 반복합니다.
**중요**  
정책을 저장하기 전에 보안 경고, 오류 및 제안 사항을 해결해야 합니다.

   다음 IAM 정책 예시는 사용자 *John*이 *MusicCollection* 테이블에서 [RestoreTableToPointInTime](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_RestoreTableToPointInTime.html), [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) 및 [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html) API 작업을 수행할 수 있도록 허용합니다.

   *기울임꼴* 텍스트를 리소스별 정보로 바꿔야 합니다.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::123456789012:user/username"
         },
         "Action": [
           "dynamodb:RestoreTableToPointInTime",
           "dynamodb:GetItem",
           "dynamodb:PutItem"
         ],
         "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
       }
     ]
   }
   ```

------

1. (선택 사항) 오른쪽 하단 **외부 액세스 미리 보기**를 선택하면 새 정책이 리소스의 퍼블릭 및 크로스 계정 액세스에 미치는 영향을 미리 확인할 수 있습니다. 정책을 저장하기 전에 새로운 IAM Access Analyzer 검색 결과가 나오는지, 기존 결과가 해결되는지 여부를 확인할 수 있습니다. 활성 분석기가 표시되지 않으면 **Access Analyzer로 이동**을 선택하여 IAM Access Analyzer에서 [계정 분석기를 생성](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-getting-started.html#access-analyzer-enabling)합니다. 자세한 내용은 [액세스 미리 보기](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-access-preview.html)를 잠조하세요

1. **테이블 생성**을 선택합니다.

## AWS CloudFormation 템플릿
<a name="rbac-create-table-cfn"></a>

------
#### [ Using the AWS::DynamoDB::Table resource ]

다음 CloudFormation 템플릿은 [AWS::DynamoDB::Table](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html) 리소스를 사용하여 스트림이 포함된 테이블을 생성합니다. 이 템플릿에는 테이블과 스트림 모두에 연결된 리소스 기반 정책도 포함되어 있습니다.

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "MusicCollectionTable": {
            "Type": "AWS::DynamoDB::Table",
            "Properties": {
                "AttributeDefinitions": [
                    {
                        "AttributeName": "Artist",
                        "AttributeType": "S"
                    }
                ],
                "KeySchema": [
                    {
                        "AttributeName": "Artist",
                        "KeyType": "HASH"
                    }
                ],
                "BillingMode": "PROVISIONED",
                "ProvisionedThroughput": {
                    "ReadCapacityUnits": 5,
                    "WriteCapacityUnits": 5
                },
                "StreamSpecification": {
                  "StreamViewType": "OLD_IMAGE",
                  "ResourcePolicy": {
                    "PolicyDocument": {
                      "Version": "2012-10-17",		 	 	 
                      "Statement": [
                        {
                            "Principal": {
                                "AWS": "arn:aws:iam::111122223333:user/John"
                            },
                            "Effect": "Allow",
                            "Action": [
                                "dynamodb:GetRecords",
                                "dynamodb:GetShardIterator",
                                "dynamodb:DescribeStream"
                            ],
                            "Resource": "*"
                        }
                      ]
                    }
                  }
                },
                "TableName": "MusicCollection",
                "ResourcePolicy": {
                    "PolicyDocument": {
                        "Version": "2012-10-17",		 	 	 
                        "Statement": [
                            {
                                "Principal": {
                                    "AWS": [
                                        "arn:aws:iam::111122223333:user/John"
                                    ]
                                },
                                "Effect": "Allow",
                                "Action": "dynamodb:GetItem",
                                "Resource": "*"
                            }
                        ]
                    }
                }
            }
           
        }
    }
}
```

------
#### [ Using the AWS::DynamoDB::GlobalTable resource ]

다음 CloudFormation 템플릿은 [AWS::DynamoDB::GlobalTable](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-globaltable.html) 리소스로 테이블을 생성하고 테이블과 해당 스트림에 리소스 기반 정책을 연결합니다.

```
{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "GlobalMusicCollection": {
            "Type": "AWS::DynamoDB::GlobalTable",
            "Properties": {
                "TableName": "MusicCollection",
                "AttributeDefinitions": [{
                    "AttributeName": "Artist",
                    "AttributeType": "S"
                }],
                "KeySchema": [{
                    "AttributeName": "Artist",
                    "KeyType": "HASH"
                }],
                "BillingMode": "PAY_PER_REQUEST",
                "StreamSpecification": {
                    "StreamViewType": "NEW_AND_OLD_IMAGES"
                },
                "Replicas": [
                    {
                        "Region": "us-east-1",
                        "ResourcePolicy": {
                            "PolicyDocument": {
                                "Version": "2012-10-17",		 	 	 
                                "Statement": [{
                                    "Principal": {
                                        "AWS": [
                                            "arn:aws:iam::111122223333:user/John"
                                        ]
                                    },
                                    "Effect": "Allow",
                                    "Action": "dynamodb:GetItem",
                                    "Resource": "*"
                                }]
                            }
                        },
                        "ReplicaStreamSpecification": {
                            "ResourcePolicy": {
                                "PolicyDocument": {
                                    "Version": "2012-10-17",		 	 	 
                                    "Statement": [{
                                        "Principal": {
                                            "AWS": "arn:aws:iam::111122223333:user/John"
                                        },
                                        "Effect": "Allow",
                                        "Action": [
                                            "dynamodb:GetRecords",
                                            "dynamodb:GetShardIterator",
                                            "dynamodb:DescribeStream"
                                        ],
                                        "Resource": "*"
                                    }]
                                }
                            }
                        }
                    }
                ]
            }
        }
    }
}
```

------