

# Amazon DynamoDB에서 자격 증명 기반 정책 사용
<a name="using-identity-based-policies"></a>

이 항목에서는 Amazon DynamoDB에서 AWS Identity and Access Management(IAM) 정책을 사용하는 방법을 설명하고 예시를 제공합니다. 이 예제에서는 계정 관리자가 IAM 자격 증명(사용자, 그룹, 역할)에 권한 정책을 연결함으로써 Amazon DynamoDB 리소스에 대한 작업을 수행할 권한을 부여하는 방법을 보여 줍니다.

이 주제의 섹션에서는 다음 내용을 학습합니다.
+ [Amazon DynamoDB 콘솔을 사용하는 데 필요한 IAM 권한](#console-permissions)
+ [Amazon DynamoDB에 대한 AWS 관리형(미리 정의된) IAM 정책](#access-policy-examples-aws-managed)
+ [고객 관리형 정책 예제](#access-policy-examples-for-sdk-cli)



다음은 권한 정책의 예제입니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DescribeQueryScanBooksTable",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeTable",
                "dynamodb:Query",
                "dynamodb:Scan"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:111122223333:table/Books"
        }
    ]
}
```

------

 앞의 정책에는 `account-id`에 의해 지정된 AWS 계정이 소유하는 `us-west-2` AWS 리전 내 테이블에서 세 가지 DynamoDB 작업(`dynamodb:DescribeTable`, `dynamodb:Query`, 및 `dynamodb:Scan`)에 대한 권한을 부여하는 문이 하나 있습니다. `Resource` 값의 *Amazon 리소스 이름(ARN)*은 권한이 적용되는 테이블을 지정합니다.

## Amazon DynamoDB 콘솔을 사용하는 데 필요한 IAM 권한
<a name="console-permissions"></a>

사용자가 DynamoDB 콘솔로 작업하려면 AWS 계정의 DynamoDB 리소스로 작업하도록 허용하는 최소 권한 집합이 있어야 합니다. 이 DynamoDB 권한 이외에 콘솔에는 다음 권한이 필요합니다.
+ 지표 및 그래프를 표시할 수 있는 Amazon CloudWatch 권한
+ AWS Data PipelineDynamoDB 데이터를 내보내고 가져오기 위한 권한 
+  AWS Identity and Access Management내보내기 및 가져오기 작업에 필요한 역할에 액세스할 수 있는 권한.
+ CloudWatch 경보가 트리거될 때마다 사용자에게 알릴 수 있는 Amazon Simple Notification Service 권한
+ AWS LambdaDynamoDB Streams 레코드를 처리할 수 있는 권한

최소 필수 권한보다 더 제한적인 IAM 정책을 만들면 콘솔은 해당 IAM 정책에 연결된 사용자에 대해 의도대로 작동하지 않습니다. 이 사용자가 DynamoDB 콘솔을 계속 사용할 수 있도록 하려면 `AmazonDynamoDBReadOnlyAccess` AWS 관리형 정책도 사용자에게 연결합니다([Amazon DynamoDB에 대한 AWS 관리형(미리 정의된) IAM 정책](#access-policy-examples-aws-managed) 참조).

AWS CLI 또는 Amazon DynamoDB API만 호출하는 사용자에게는 최소 콘솔 권한을 허용할 필요가 없습니다.

**참고**  
 VPC 엔드포인트를 참조하는 경우 IAM 작업(dynamodb:DescribeEndpoints)을 사용하여 요청하는 IAM 보안 주체에 대한 DescribeEndpoints API 호출도 승인해야 합니다. 자세한 내용은 [엔드포인트에 필요한 정책](inter-network-traffic-privacy.md#inter-network-traffic-DescribeEndpoints)을 참조하세요.

## Amazon DynamoDB에 대한 AWS 관리형(미리 정의된) IAM 정책
<a name="access-policy-examples-aws-managed"></a>

AWS는 에서 생성하고 관리하는 독립형 IAM 정책을 제공하여 몇 가지 일반적인 사용 사례를 처리합니다.AWS 이러한 AWS 관리형 정책은 사용자가 필요한 권한을 조사할 필요가 없도록 일반 사용 사례에 필요한 권한을 부여합니다. 자세한 내용은 *IAM 사용 설명서*의 [AWS 관리형 정책](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)을 참조하세요.

계정의 사용자에게 연결할 수 있는 다음 AWS 관리형 정책은 DynamoDB에 고유하며, 사용 사례 시나리오별로 그룹화되어 있습니다.
+ **AmazonDynamoDBReadOnlyAccess** - AWS Management Console을 통해 DynamoDB 리소스에 대한 읽기 전용 액세스 권한을 부여합니다.
+ **AmazonDynamoDBFullAccess** - AWS Management Console을 통해 DynamoDB 리소스에 대한 전체 액세스 권한을 부여합니다.

IAM 콘솔에 로그인하고 이 콘솔에서 특정 정책을 검색하여 이러한 AWS 관리형 권한 정책을 검토할 수 있습니다.

**중요**  
가장 좋은 방법은 필요한 사용자, 역할 또는 그룹에 [최소 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)을 부여하는 사용자 지정 IAM 정책을 생성하는 것입니다.

## 고객 관리형 정책 예제
<a name="access-policy-examples-for-sdk-cli"></a>

이 단원에서는 다양한 DynamoDB 작업에 대한 권한을 부여하는 정책의 예를 제공합니다. 이러한 정책은 AWS SDK 또는 AWS CLI를 사용하는 경우에 유효합니다. 콘솔을 사용하는 경우 콘솔에 해당하는 추가 권한을 부여해야 합니다. 자세한 내용은 [Amazon DynamoDB 콘솔을 사용하는 데 필요한 IAM 권한](#console-permissions) 섹션을 참조하세요.

**참고**  
다음 정책 예시에서는 모두 AWS 리전 중 하나를 사용하고 가상의 계정 ID와 테이블 이름을 포함합니다.

예시:
+ [테이블에서 모든 DynamoDB 작업에 대한 권한을 부여하는 IAM 정책](grant-permissions-to-any-action-on-table.md)
+ [DynamoDB 테이블의 항목에 대한 읽기 전용 권한을 부여하는 IAM 정책](read-only-permissions-on-table-items.md)
+ [특정 DynamoDB 테이블과 관련 인덱스에 대한 액세스 권한을 부여하는 IAM 정책](iam-policy-specific-table-indexes.md)
+ [DynamoDB 테이블에서 읽기, 쓰기, 업데이트 및 삭제 액세스 권한에 대한 IAM 정책](iam-policy-example-data-crud.md)
+ [동일한 AWS 계정의 다른 DynamoDB 환경에 대한 IAM 정책](iam-policy-separate-environments.md)
+ [DynamoDB 예약 용량 구매를 방지하는 IAM 정책](iam-prevent-purchase-reserved-capacity.md)
+ [DynamoDB 스트림에 대해서만 읽기 액세스 권한을 부여하는 IAM 정책(테이블은 부여하지 않음)](iam-policy-read-stream-only.md)
+ [AWS Lambda 함수가 DynamoDB 스트림 레코드에 액세스하도록 허용하는 IAM 정책](iam-policy-example-lamda-process-dynamodb-streams.md)
+ [DynamoDB Accelerator(DAX) 클러스터에 대한 읽기 및 쓰기 액세스 권한을 위한 IAM 정책](iam-policy-example-read-write-dax-access.md)

 *IAM 사용 설명서*에는 다음 [세 가지 추가 DynamoDB 예시](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html)가 포함되어 있습니다.
+ [Amazon DynamoDB: 특정 테이블에 대한 액세스 허용](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_specific-table.html)
+ [Amazon DynamoDB: 특정 열에 대한 액세스 허용](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_columns.html)
+ [Amazon DynamoDB: Amazon Cognito ID를 기준으로 DynamoDB에 대한 행 수준 액세스 허용](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_rows.html)

# 테이블에서 모든 DynamoDB 작업에 대한 권한을 부여하는 IAM 정책
<a name="grant-permissions-to-any-action-on-table"></a>

다음 정책은 `Books`라는 테이블에서 *모든* DynamoDB 작업을 위한 권한을 부여합니다. `Resource`에 지정된 리소스 ARN은 특정 AWS 리전 내의 테이블을 식별합니다. `Resource` ARN에서 테이블 이름 `Books`를 와일드카드 문자(\$1)로 바꾸면 *모든* DynamoDB 작업이 계정의 *모든* 테이블에서 허용됩니다. 이 정책이나 IAM 정책에서 와일드카드 문자를 사용하려면 먼저 보안에 미칠 수 있는 영향을 신중히 고려하세요.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllAPIActionsOnBooks",
            "Effect": "Allow",
            "Action": "dynamodb:*",
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
        }
    ]
}
```

------

**참고**  
이 예제에서는 와일드카드 문자(\$1)를 사용하여 관리, 데이터 작업, 모니터링, DynamoDB 예약 용량 구매 등의 *모든* 작업을 허용합니다. 대신 허용할 각 작업과 해당 사용자, 역할 또는 그룹에 필요한 작업만 명시적으로 지정하는 것이 좋습니다.

# DynamoDB 테이블의 항목에 대한 읽기 전용 권한을 부여하는 IAM 정책
<a name="read-only-permissions-on-table-items"></a>

다음 권한 정책은 `GetItem`, `BatchGetItem`, `Scan`, `Query` 및 `ConditionCheckItem` DynamoDB 작업에 대한 권한만 부여하며 결과적으로 `Books` 테이블에 대한 읽기 전용 액세스 권한을 설정합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadOnlyAPIActionsOnBooks",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:BatchGetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:ConditionCheckItem"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
        }
    ]
}
```

------

# 특정 DynamoDB 테이블과 관련 인덱스에 대한 액세스 권한을 부여하는 IAM 정책
<a name="iam-policy-specific-table-indexes"></a>

다음 정책은 `Books`라는 DynamoDB 테이블과 해당 테이블의 모든 인덱스에서 데이터 수정 작업에 대한 권한을 부여합니다. 인덱스 작동 방식에 대한 자세한 내용은 [DynamoDB에서 보조 인덱스를 사용하여 데이터 액세스 개선](SecondaryIndexes.md) 단원을 참조하세요.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessTableAllIndexesOnBooks",
            "Effect": "Allow",
            "Action": [
              "dynamodb:PutItem",
              "dynamodb:UpdateItem",
              "dynamodb:DeleteItem",
              "dynamodb:BatchWriteItem",
              "dynamodb:GetItem",
              "dynamodb:BatchGetItem",
              "dynamodb:Scan",
              "dynamodb:Query",
              "dynamodb:ConditionCheckItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books",
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books/index/*"
            ]
        }
    ]
}
```

------

# DynamoDB 테이블에서 읽기, 쓰기, 업데이트 및 삭제 액세스 권한에 대한 IAM 정책
<a name="iam-policy-example-data-crud"></a>

애플리케이션이 Amazon DynamoDB 테이블, 인덱스 및 스트림에서 데이터를 생성하고, 읽고, 업데이트하고, 삭제하도록 허용해야 하는 경우 이 정책을 사용합니다. AWS 리전 이름, 계정 ID, 계정 ID, 테이블 이름 또는 와일드카드 문자(\$1)는 적절하게 대체합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "DynamoDBIndexAndStreamAccess",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetShardIterator",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:DescribeStream",
                "dynamodb:GetRecords",
                "dynamodb:ListStreams"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books/index/*",
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books/stream/*"
            ]
        },
        {
            "Sid": "DynamoDBTableAccess",
            "Effect": "Allow",
            "Action": [
                "dynamodb:BatchGetItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:ConditionCheckItem",
                "dynamodb:PutItem",
                "dynamodb:DescribeTable",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Books"
        },
        {
            "Sid": "DynamoDBDescribeLimitsAccess",
            "Effect": "Allow",
            "Action": "dynamodb:DescribeLimits",
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books",
                "arn:aws:dynamodb:us-west-2:123456789012:table/Books/index/*"
            ]
        }
    ]
}
```

------

모든 AWS 리전에서 이 계정의 모든 DynamoDB 테이블을 포함하도록 이 정책을 확장하려면 리전 및 테이블 이름에 와일드카드(\$1)를 사용합니다. 예:

```
"Resource":[
                "arn:aws:dynamodb:*:123456789012:table/*",
                "arn:aws:dynamodb:*:123456789012:table/*/index/*"
                ]
```

# 동일한 AWS 계정의 다른 DynamoDB 환경에 대한 IAM 정책
<a name="iam-policy-separate-environments"></a>

별도의 환경이 있고 각 환경에서 `ProductCatalog`라는 테이블의 자체 버전을 유지한다고 가정해 보겠습니다. 동일한 AWS 계정에서 2개의 `ProductCatalog` 테이블을 생성하는 경우 권한이 설정되는 방식 때문에 한 환경에서의 작업이 다른 환경에 영향을 줄 수 있습니다. 예를 들어 동시 제어 영역 작업(예:`CreateTable`)의 수에 대한 할당량은 AWS 계정 수준에서 설정됩니다.

따라서 한 환경에서 작업을 수행할 때마다 다른 환경에서 사용 가능한 작업의 수가 감소합니다. 또한 한 환경의 코드가 다른 환경의 테이블에 실수로 액세스할 수 있는 위험도 있습니다.

**참고**  
프로덕션 및 테스트 워크로드를 분리하여 이벤트의 잠재적 ‘영향 범위’를 제어할 수 있으려면 테스트 및 프로덕션 워크로드에 대해 별도의 AWS 계정을 생성하는 것이 좋습니다. 자세한 내용은 [AWS 계정 관리 및 분리](https://docs.aws.amazon.com//wellarchitected/latest/security-pillar/aws-account-management-and-separation.html) 단원을 참조하세요.

또한 Amit과 Alice라는 두 개발자가 `ProductCatalog` 테이블을 테스트 중이라고 가정해 보겠습니다. 개발자가 각각 별도의 AWS 계정을 요구하는 대신 동일한 테스트 AWS 계정을 공유할 수 있습니다. 이 테스트 계정에서 `Alice_ProductCatalog` 및 `Amit_ProductCatalog`와 같이 각 개발자가 작업할 수 있는 동일한 테이블의 복제본을 만들 수 있습니다. 이 경우 테스트 환경용으로 생성한 AWS 계정에서 사용자 Alice 및 Amit을 만들 수 있습니다. 그런 다음 이들 사용자에게 각자가 소유하는 테이블에 대해 DynamoDB 작업을 수행할 수 있는 권한을 부여할 수 있습니다.

이러한 IAM 사용자 권한을 부여하려면 다음 중 하나를 수행할 수 있습니다.
+ 사용자마다 개별 정책을 만들고 각 정책을 사용자에게 개별적으로 연결합니다. 예를 들면, 다음 정책을 사용자 Alice에 연결하여 이 사용자가 `Alice_ProductCatalog` 테이블에서 모든 DynamoDB 작업에 액세스하도록 허용할 수 있습니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllAPIActionsOnAliceTable",
              "Effect": "Allow",
              "Action": [
                "dynamodb:DeleteItem",
                "dynamodb:DescribeContributorInsights",
                "dynamodb:RestoreTableToPointInTime",
                "dynamodb:ListTagsOfResource",
                "dynamodb:CreateTableReplica",
                "dynamodb:UpdateContributorInsights",
                "dynamodb:CreateBackup",
                "dynamodb:DeleteTable",
                "dynamodb:UpdateTableReplicaAutoScaling",
                "dynamodb:UpdateContinuousBackups",
                "dynamodb:TagResource",
                "dynamodb:DescribeTable",
                "dynamodb:GetItem",
                "dynamodb:DescribeContinuousBackups",
                "dynamodb:BatchGetItem",
                "dynamodb:UpdateTimeToLive",
                "dynamodb:BatchWriteItem",
                "dynamodb:ConditionCheckItem",
                "dynamodb:UntagResource",
                "dynamodb:PutItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteTableReplica",
                "dynamodb:DescribeTimeToLive",
                "dynamodb:RestoreTableFromBackup",
                "dynamodb:UpdateTable",
                "dynamodb:DescribeTableReplicaAutoScaling",
                "dynamodb:GetShardIterator",
                "dynamodb:DescribeStream",
                "dynamodb:GetRecords",
                "dynamodb:DescribeLimits",
                "dynamodb:ListStreams"
              ],
              "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Alice_ProductCatalog/*"
          }
      ]
  }
  ```

------

  그런 다음 사용자 Amit에 대해 다른 리소스(`Amit_ProductCatalog` 테이블)를 사용하여 유사한 정책을 만들 수 있습니다.
+ 정책을 개별 사용자에게 연결하는 대신, IAM 정책 변수를 사용하여 단일 정책을 작성하고 이 정책을 그룹에 연결할 수도 있습니다. 이 경우 그룹을 만들어야 하고, 여기서는 Alice와 Amit 두 사용자 모두 해당 그룹에 추가해야 합니다. 다음 예제에서는 `${aws:username}_ProductCatalog` 테이블에서 모든 DynamoDB 작업을 수행할 수 있는 권한을 부여합니다. 정책이 평가될 때 정책 변수 `${aws:username}`은 요청자의 사용자 이름으로 대체됩니다. 예를 들어 Alice가 항목을 추가하라는 요청을 보내는 경우 이 작업은 Alice가 항목을 `Alice_ProductCatalog` 테이블에 추가하는 경우에만 허용됩니다.

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "ActionsOnUserSpecificTable",
              "Effect": "Allow",
              "Action": [
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:GetItem",
                "dynamodb:BatchGetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:ConditionCheckItem"
              ],
              "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_ProductCatalog"
          },
          {
              "Sid": "AdditionalPrivileges",
              "Effect": "Allow",
              "Action": [
                  "dynamodb:ListTables",
                  "dynamodb:DescribeTable",
                  "dynamodb:DescribeContributorInsights"
              ],
              "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/*"
          }
      ]
  }
  ```

------

**참고**  
IAM 정책 변수를 사용할 때는 정책에서 IAM 정책 언어의 `2012-10-17` 버전을 명시적으로 지정해야 합니다. IAM 정책 언어의 기본 버전(`2008-10-17`)은 정책 변수를 지원하지 않습니다.

평소대로 특정 테이블을 리소스로 식별하는 대신, 아래 예제와 같이 와일드카드 문자(\$1)를 사용하여 테이블 이름에 요청자의 사용자 이름이 접두사로 붙은 모든 테이블에 대한 권한을 부여할 수 있습니다.

```
"Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_*"
```

# DynamoDB 예약 용량 구매를 방지하는 IAM 정책
<a name="iam-prevent-purchase-reserved-capacity"></a>

Amazon DynamoDB 예약 용량을 구입할 경우 선납금을 1회 지불하고 일정 기간에 대해 최소 사용량 수준에 맞춰 약정 요금을 지불하므로 상당한 비용 절감을 얻을 수 있습니다. AWS Management Console을 사용하여 예약 용량을 확인하고 구매할 수 있습니다. 하지만 조직의 모든 사용자가 예약 용량을 구매할 수 있도록 하고 싶지 않을 수 있습니다. 예약 용량에 대한 자세한 내용은 [Amazon DynamoDB 요금](https://aws.amazon.com/dynamodb/pricing) 단원을 참조하세요.

DynamoDB는 예약 용량 관리에 대한 액세스 권한을 제어하기 위한 다음과 같은 API 작업을 제공합니다.
+ `dynamodb:DescribeReservedCapacity` - 현재 유효한 예약 용량 구매를 반환합니다.
+ `dynamodb:DescribeReservedCapacityOfferings` - 현재 에서 제공하는 예약 용량 계획에 대한 세부 정보를 반환합니다.AWS
+ `dynamodb:PurchaseReservedCapacityOfferings` - 실제 예약 용량 구매를 수행합니다.

AWS Management Console은 이러한 API 작업을 사용하여 예약 용량 정보를 표시하고 예약 용량을 구매합니다. 이러한 작업은 콘솔을 통해서만 액세스할 수 있으므로 애플리케이션 프로그램에서는 호출할 수 없습니다. 하지만 IAM 권한 정책에서 이들 작업에 대한 액세스를 허용 또는 거부할 수 있습니다.

다음 정책을 사용하면 사용자가 AWS Management Console을 사용하여 예약 용량 구매 및 제품을 조회할 수는 있지만, 새로운 구매는 거부됩니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowReservedCapacityDescriptions",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeReservedCapacity",
                "dynamodb:DescribeReservedCapacityOfferings"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:*"
        },
        {
            "Sid": "DenyReservedCapacityPurchases",
            "Effect": "Deny",
            "Action": "dynamodb:PurchaseReservedCapacityOfferings",
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:*"
        }
    ]
}
```

------

이 정책에서는 와일드카드 문자(\$1)를 사용하여 모두에 대해 설명 권한을 허용하고, 모두에 대해 DynamoDB 예약 용량 구매를 거부합니다.

# DynamoDB 스트림에 대해서만 읽기 액세스 권한을 부여하는 IAM 정책(테이블은 부여하지 않음)
<a name="iam-policy-read-stream-only"></a>

테이블에서 DynamoDB Streams를 활성화하면 테이블 항목의 모든 수정에 대한 정보가 캡처됩니다. 자세한 내용은 [DynamoDB Streams에 대한 변경 데이터 캡처](Streams.md) 섹션을 참조하세요.

때로는 애플리케이션이 DynamoDB 테이블에서 데이터를 읽는 것은 금지하지만 테이블의 스트림에는 액세스하도록 허용하려는 경우도 있을 수 있습니다. 예를 들어, 항목 업데이트가 감지될 때 스트림을 폴링하고 Lambda 함수를 호출한 후 추가 처리를 수행하도록 AWS Lambda를 구성할 수 있습니다.

다음 작업은 DynamoDB Streams에 대한 액세스를 제어하는 데 사용할 수 있습니다.
+ `dynamodb:DescribeStream`
+ `dynamodb:GetRecords`
+ `dynamodb:GetShardIterator`
+ `dynamodb:ListStreams`

다음 예제 정책은 `GameScores`라는 테이블의 스트림에 액세스할 수 있는 권한을 사용자에게 부여합니다. ARN의 와일드카드 문자(\$1)는 해당 테이블과 연결된 모든 스트림과 일치합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessGameScoresStreamOnly",
            "Effect": "Allow",
            "Action": [
                "dynamodb:DescribeStream",
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:ListStreams"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/stream/*"
        }
    ]
}
```

------

이 정책에서는 `GameScores` 테이블 자체가 아니라 해당 테이블의 스트림에 액세스하도록 허용합니다.

# AWS Lambda 함수가 DynamoDB 스트림 레코드에 액세스하도록 허용하는 IAM 정책
<a name="iam-policy-example-lamda-process-dynamodb-streams"></a>

DynamoDB 스트림의 새 이벤트를 기반으로 특정 작업이 수행되기를 원할 경우 이러한 새 이벤트를 통해 트리거되는 AWS Lambda 함수를 작성할 수 있습니다. 이러한 Lambda 함수는 DynamoDB 스트림에서 데이터를 읽을 수 있는 권한을 필요로 합니다. DynamoDB Streams와 Lambda를 함께 사용하는 방법에 대한 자세한 내용은 [DynamoDB Streams 및 AWS Lambda 트리거](Streams.Lambda.md) 단원을 참조하세요.

Lambda에 권한을 부여하려면 Lambda 함수의 IAM 역할(실행 역할이라고도 함)과 연결되는 권한 정책을 사용합니다. 이 정책은 Lambda 함수를 생성할 때 지정합니다.

예를 들어, 다음의 권한 정책을 실행 역할과 연결하여 나열된 DynamoDB Streams 작업을 수행할 수 있는 권한을 Lambda에 부여할 수 있습니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "APIAccessForDynamoDBStreams",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetRecords",
                "dynamodb:GetShardIterator",
                "dynamodb:DescribeStream",
                "dynamodb:ListStreams"
            ],
            "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/GameScores/stream/*"
        }
    ]
}
```

------

자세한 내용은 *AWS Lambda 개발자 안내서*의 [AWS Lambda 권한](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html) 단원을 참조하세요.

# DynamoDB Accelerator(DAX) 클러스터에 대한 읽기 및 쓰기 액세스 권한을 위한 IAM 정책
<a name="iam-policy-example-read-write-dax-access"></a>

다음 정책에서는 DynamoDB Accelerator(DAX)에 대한 읽기, 쓰기, 업데이트 및 삭제 액세스 권한을 허용하지만 연결된 DynamoDB 테이블에 대해서는 허용하지 않습니다. 이 정책을 사용하려면 AWS 리전 이름, 계정 ID, DAX 클러스터 이름을 대체합니다.

**참고**  
이 정책은 DAX 클러스터에 대한 액세스 권한은 부여하지만 연결된 DynamoDB 테이블에 대한 액세스 권한은 부여하지 않습니다. DAX 클러스터가 사용자를 대신해 DynamoDB 테이블에서 이와 같은 작업을 수행하려면 클러스터에 올바른 정책이 있어야 합니다.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AmazonDynamoDBDAXDataOperations",
            "Effect": "Allow",
            "Action": [
                "dax:GetItem",
                "dax:PutItem",
                "dax:ConditionCheckItem",
                "dax:BatchGetItem",
                "dax:BatchWriteItem",
                "dax:DeleteItem",
                "dax:Query",
                "dax:UpdateItem",
                "dax:Scan"
            ],
            "Resource": "arn:aws:dax:eu-west-1:123456789012:cache/MyDAXCluster"
        }
    ]
}
```

------

계정의 모든 AWS 리전에 대한 DAX 액세스 권한을 포함하도록 이 정책을 확장하려면 리전 이름에 와일드카드 문자(\$1)를 사용합니다.

```
"Resource": "arn:aws:dax:*:123456789012:cache/MyDAXCluster"
```