리소스 기반 정책을 포함한 테이블 생성 - Amazon DynamoDB

리소스 기반 정책을 포함한 테이블 생성

DynamoDB 콘솔, CreateTable APIAWS CLI, AWS SDK 또는 AWS CloudFormation 템플릿을 사용하여 테이블을 생성하는 동안 리소스 기반 정책을 추가할 수 있습니다.

다음 예시에서는 create-table AWS CLI 명령을 사용하여 MusicCollection이라는 테이블을 생성합니다. 이 명령에는 테이블에 리소스 기반 정책을 추가하는 resource-policy 파라미터도 포함되어 있습니다. 이 정책을 통해 사용자 John은 테이블에서 RestoreTableToPointInTime, GetItemPutItem 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\" } ] }"
  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/dynamodb/에서 DynamoDB 콘솔을 엽니다.

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

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

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

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

  6. 리소스 기반 정책에서 테이블 및 해당 인덱스에 대한 액세스 권한을 정의하는 정책을 추가합니다. 이 정책에서는 이러한 리소스에 액세스할 수 있는 사용자와 각 리소스에서 해당 사용자가 수행할 수 있는 작업을 지정합니다. 정책을 추가하려면 다음 중 하나를 수행합니다.

    • JSON 정책 문서를 입력하거나 붙여 넣습니다. IAM 정책 언어에 대한 자세한 내용은 IAM 사용 설명서의 JSON 편집기를 사용하여 정책 생성을 참조하세요.

      작은 정보

      Amazon DynamoDB 개발자 안내서에서 리소스 기반 정책의 예를 보려면 정책 예시를 선택하세요.

    • 새 문을 추가하려면 새 문 추가를 선택하고 제공된 필드에 정보를 입력합니다. 문을 추가하려는 만큼 이 단계를 반복합니다.

    중요

    정책을 저장하기 전에 보안 경고, 오류 및 제안 사항을 해결해야 합니다.

    다음 IAM 정책 예시는 사용자 JohnMusicCollection 테이블에서 RestoreTableToPointInTime, GetItemPutItem API 작업을 수행할 수 있도록 허용합니다.

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

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/John" }, "Action": [ "dynamodb:RestoreTableToPointInTime", "dynamodb:GetItem", "dynamodb:PutItem" ], "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection" } ] }
  7. (선택 사항) 오른쪽 하단 외부 액세스 미리 보기를 선택하면 새 정책이 리소스의 퍼블릭 및 크로스 계정 액세스에 미치는 영향을 미리 확인할 수 있습니다. 정책을 저장하기 전에 새로운 IAM Access Analyzer 검색 결과가 나오는지, 기존 결과가 해결되는지 여부를 확인할 수 있습니다. 활성 분석기가 표시되지 않으면 Access Analyzer로 이동을 선택하여 IAM Access Analyzer에서 계정 분석기를 생성합니다. 자세한 내용은 액세스 미리 보기를 잠조하세요

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

Using the AWS::DynamoDB::Table resource

다음 CloudFormation 템플릿은 AWS::DynamoDB::Table 리소스를 사용하여 스트림이 포함된 테이블을 생성합니다. 이 템플릿에는 테이블과 스트림 모두에 연결된 리소스 기반 정책도 포함되어 있습니다.

{ "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 리소스로 테이블을 생성하고 테이블과 해당 스트림에 리소스 기반 정책을 연결합니다.

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