DynamoDB グローバルテーブルのセキュリティ - Amazon DynamoDB

DynamoDB グローバルテーブルのセキュリティ

グローバルテーブルレプリカは DynamoDB テーブルであるため、AWS Identity and Access Management (IAM) ID ポリシーやリソースベースのポリシーなど、単一リージョンテーブルに対して行うレプリカへのアクセスを制御するのと同じ方法を使用します。

このトピックでは、IAM アクセス許可と AWS Key Management Service (AWS KMS) 暗号化を使用して DynamoDB グローバルテーブルを保護する方法について説明します。クロスリージョンレプリケーションと自動スケーリングを許可するサービスリンクロール (SLR)、グローバルテーブル の作成、更新、削除に必要な IAM アクセス許可、マルチリージョンの最終的な一貫性 (MREC) テーブルとマルチリージョンの強力な整合性 (MRSC) テーブルの違いについて説明します。また、クロスリージョンレプリケーションを安全に管理するための AWS KMS 暗号化キーについても説明します。

グローバルテーブルのサービスリンクロール

DynamoDB グローバルテーブルは、クロスリージョンレプリケーションと自動スケーリング機能を管理するために、サービスリンクロール (SLR) に依存しています。

これらのロールは、AWS アカウントごとに 1 回だけ設定する必要があります。作成後、同じロールがアカウント内のすべてのグローバルテーブルに機能します。サービスリンクロールの詳細については、「IAM ユーザーガイド」の「サービスリンクロールの使用」を参照してください。

レプリケーションサービスにリンクされたロール

最初のグローバルテーブルを作成するとき、Amazon DynamoDB によって、AWSServiceRoleForDynamoDBReplication サービスリンクロール (SLR) が自動的に作成されます。このロールは、クロスリージョンレプリケーションを管理します。

リソースベースのポリシーをレプリカに適用する際は、AWSServiceRoleForDynamoDBReplicationPolicy で定義されている SLR プリンシパルへのアクセス許可を拒否しないでください。拒否すると、レプリケーションが中断されます。必要な SLR アクセス許可を拒否すると、影響を受けるレプリカとの間のレプリケーションは停止し、レプリカテーブルのステータスは「REPLICATION_NOT_AUTHORIZED」に変わります。

  • マルチリージョンの結果整合性 (MREC) のグローバルテーブルについて、レプリカが 20 時間以上「REPLICATION_NOT_AUTHORIZED」ステータスのままである場合、レプリカは 1 つのリージョンの DynamoDB テーブルに変換され、元に戻せなくなります。

  • マルチリージョンの強力な整合性 (MRSC) のグローバルテーブルの場合、必要なアクセス許可を拒否すると、書き込みおよび強力な整合性のある読み込みオペレーションが AccessDeniedException になります。レプリカが 7 日以上「REPLICATION_NOT_AUTHORIZED」ステータスのままである場合、レプリカは永続的にアクセスできなくなり、書き込みオペレーションと強力な整合性のある読み込みオペレーションはエラーで失敗し続けます。レプリカの削除などの一部の管理オペレーションは成功します。

自動スケーリングサービスにリンクされたロール

プロビジョンドキャパシティモードのグローバルテーブルを設定する場合は、グローバルテーブルに自動スケーリングを設定する必要があります。DynamoDB 自動スケーリングは、AWS Application Auto Scaling Service を使用して、グローバルテーブルレプリカのプロビジョニングされたスループットキャパシティを動的に調整します。Application Auto Scaling サービスは、AWSServiceRoleForApplicationAutoScaling_DynamoDBTable という名前のサービスにリンクされたロール (SLR) を作成します。このサービスにリンクされたロールは、DynamoDB テーブルの自動スケーリングを初めて設定するときに、AWS アカウントで自動的に作成されます。これにより、Application Auto Scaling はプロビジョニングされたテーブル容量を管理でき、CloudWatch アラームを作成できます。

リソースベースのポリシーをレプリカに適用する際は、AWSApplicationAutoscalingDynamoDBTablePolicy で定義されている Application Auto Scaling SLR プリンシパルへのアクセス許可を拒否しないでください。拒否すると、自動スケーリング機能が中断されます。

サービスにリンクされたロールの IAM ポリシーの例

以下の条件の IAM ポリシーは、DynamoDB レプリケーション SLR および AWS 自動スケーリング SLR に必要なアクセス許可には影響しません。この条件は、レプリケーションや自動スケーリングが意図せずに中断されないように、制限の広いポリシーに追加できます。

次の例は、サービスにリンクされたロールプリンシパルを拒否ステートメントから除外する方法を示しています。

"Condition": { "StringNotEquals": { "aws:PrincipalArn": [ "arn:aws::iam::111122223333:role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication", "arn:aws::iam::111122223333:role/aws-service-role/dynamodb.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable" ] } }

グローバルテーブルで AWS IAM を使用する方法

次のセクションでは、さまざまなグローバルテーブルのオペレーションに必要なアクセス許可について説明し、ユーザーとアプリケーションに適切なアクセスを設定するのに役立つポリシーの例を示します。

注記

説明されているすべてのアクセス許可は、影響を受けるリージョンの特定のテーブルリソース ARN に適用する必要があります。テーブルリソース ARN は arn:aws:dynamodb:region:account-id:table/table-name の形式に従います。ここでは、実際のリージョン、アカウント ID、テーブル名の値を指定する必要があります。

グローバルテーブルの作成とレプリカの追加

DynamoDB グローバルテーブルは、マルチリージョンの結果整合性 (MREC) およびマルチリージョンの強力な整合性 (MRSC) の 2 つの整合性モードをサポートしています。MREC グローバルテーブルは、任意の数のリージョンにまたがって複数のレプリカを持つことができ、結果整合性を提供します。MRSC グローバルテーブルは、3 つのリージョン (3 つのレプリカまたは 2 つのレプリカと 1 つの監視) のみを必要とし、目標復旧時点 (RPO) との強力な整合性を提供します。

グローバルテーブルの作成に必要なアクセス許可は、監視の有無にかかわらず、グローバルテーブルを作成するかどうかによって異なります。

グローバルテーブルを作成するためのアクセス許可

次のアクセス許可は、最初のグローバルテーブルの作成と、後でレプリカを追加するために必要です。これらのアクセス許可は、マルチリージョンの結果整合性 (MREC) とマルチリージョンの強力な整合性 (MRSC) の両方のグローバルテーブルに適用されます。

  • グローバルテーブルには、DynamoDB が AWSServiceRoleForDynamoDBReplication サービスリンクロール (SLR) を通じて管理するクロスリージョンレプリケーションが必要です。次のアクセス許可により、DynamoDB はグローバルテーブルを初めて作成するときに、このロールを自動的に作成できます。

    • iam:CreateServiceLinkedRole

  • UpdateTable API を使用してグローバルテーブルを作成するか、レプリカを追加するには、ソーステーブルリソースに対して次のアクセス許可が必要です。

    • dynamodb:UpdateTable

  • レプリカを追加するには、そのリージョンのテーブルリソースに対して次のアクセス許可が必要です。

    • dynamodb:CreateTable

    • dynamodb:CreateTableReplica

    • dynamodb:Query

    • dynamodb:Scan

    • dynamodb:UpdateItem

    • dynamodb:PutItem

    • dynamodb:GetItem

    • dynamodb:DeleteItem

    • dynamodb:BatchWriteItem

監視を使用した MRSC グローバルテーブルの追加アクセス許可

監視リージョンを使用してマルチリージョンの強力な整合性 (MRSC) グローバルテーブルを作成する場合、すべての参加リージョン (レプリカリージョンと監視リージョンの両方を含む) のテーブルリソースに対して次のアクセス許可が必要です。

  • dynamodb:CreateGlobalTableWitness

グローバルテーブルの作成のための IAM ポリシーの例

次のアイデンティティベースのポリシーでは、必要な DynamoDB レプリケーションのサービスリンクロールの作成など、3 つのリージョンにまたがって「users」という名前の MREC または MRSC グローバルテーブルを作成できます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowCreatingUsersGlobalTable", "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:CreateTableReplica", "dynamodb:UpdateTable", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem", "dynamodb:PutItem", "dynamodb:GetItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": [ "arn:aws:dynamodb:us-east-1:123456789012:table/users", "arn:aws:dynamodb:us-east-2:123456789012:table/users", "arn:aws:dynamodb:us-west-2:123456789012:table/users" ] }, { "Sid": "AllowCreatingSLR", "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole" ], "Resource": [ "arn:aws:iam::123456789012:role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication" ] } ] }

次のアイデンティティベースのポリシーでは、必要な DynamoDB レプリケーションサービスリンクロールの作成など、aws:RequestedRegion 条件キーを使用して、特定のリージョン間で DynamoDB グローバルテーブルのレプリカを作成できます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowAddingReplicasToSourceTable", "Effect": "Allow", "Action": [ "dynamodb:UpdateTable" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": [ "us-east-1" ] } } }, { "Sid": "AllowCreatingReplicas", "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:CreateTableReplica", "dynamodb:UpdateTable", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem", "dynamodb:PutItem", "dynamodb:GetItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": [ "us-east-2", "us-west-2" ] } } }, { "Sid": "AllowCreatingSLR", "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole" ], "Resource": [ "arn:aws:iam::123456789012:role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication" ] } ] }

次のアイデンティティベースのポリシーでは、us-east-1 と us-east-2 のレプリカと us-west-2 の監視のある「users」という名前の DynamoDB MRSC グローバルテーブルを作成できます。これには、必要な DynamoDB レプリケーションサービスリンクロールの作成が含まれます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowCreatingUsersGlobalTableWithWitness", "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:CreateTableReplica", "dynamodb:CreateGlobalTableWitness", "dynamodb:UpdateTable", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem", "dynamodb:PutItem", "dynamodb:GetItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": [ "arn:aws:dynamodb:us-east-1:123456789012:table/users", "arn:aws:dynamodb:us-east-2:123456789012:table/users" ] }, { "Sid": "AllowCreatingSLR", "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole" ], "Resource": [ "arn:aws:iam::123456789012:role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication" ] } ] }

このアイデンティティベースのポリシーでは、必要な DynamoDB レプリケーションサービスリンクロールの作成など、aws:RequestedRegion 条件キーとすべてのリージョン間で制限されていない監視の作成を使用して、特定のリージョン間で MRSC グローバルテーブルとレプリカを作成できます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowCreatingReplicas", "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:CreateTableReplica", "dynamodb:UpdateTable", "dynamodb:Query", "dynamodb:Scan", "dynamodb:UpdateItem", "dynamodb:PutItem", "dynamodb:GetItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": [ "us-east-1", "us-east-2" ] } } }, { "Sid": "AllowCreatingWitness", "Effect": "Allow", "Action": [ "dynamodb:CreateGlobalTableWitness" ], "Resource": "*" }, { "Sid": "AllowCreatingSLR", "Effect": "Allow", "Action": [ "iam:CreateServiceLinkedRole" ], "Resource": [ "arn:aws:iam::123456789012:role/aws-service-role/replication.dynamodb.amazonaws.com/AWSServiceRoleForDynamoDBReplication" ] } ] }

グローバルテーブルの更新

UpdateTable API を使用して既存のグローバルテーブルのレプリカ設定を変更するには、API コールを行うリージョンのテーブルリソースに対して次のアクセス許可が必要です。

  • dynamodb:UpdateTable

自動スケーリングポリシーや有効期限設定など、他のグローバルテーブル設定も更新できます。これらの追加の更新オペレーションには、次のアクセス許可が必要です。

  • UpdateTableReplicaAutoScaling API を使用してレプリカの自動スケーリングポリシーを更新するには、レプリカを含むすべてのリージョンのテーブルリソースに対して、次のアクセス許可が必要です。

    • application-autoscaling:DeleteScalingPolicy

    • application-autoscaling:DeleteScheduledAction

    • application-autoscaling:DeregisterScalableTarget

    • application-autoscaling:DescribeScalableTargets

    • application-autoscaling:DescribeScalingActivities

    • application-autoscaling:DescribeScalingPolicies

    • application-autoscaling:DescribeScheduledActions

    • application-autoscaling:PutScalingPolicy

    • application-autoscaling:PutScheduledAction

    • application-autoscaling:RegisterScalableTarget

  • UpdateTimeToLive API を使用して有効期限設定を更新するには、レプリカを含むすべてのリージョンのテーブルリソースに対して次のアクセス許可が必要です。

    • dynamodb:UpdateTimeToLive

    有効期限 (TTL) は、マルチリージョンの結果整合性 (MREC) で設定されたグローバルテーブルでのみサポートされることに注意してください。グローバルテーブルの仕組みに関する詳細については、「DynamoDB グローバルテーブルの仕組み」を参照してください。

グローバルテーブルとレプリカの削除

グローバルテーブルを削除するには、すべてのレプリカを削除する必要があります。このオペレーションに必要なアクセス許可は、監視リージョンの有無にかかわらず、グローバルテーブルを削除するかどうかによって異なります。

グローバルテーブルとレプリカを削除するアクセス許可

個々のレプリカを削除したり、グローバルテーブルを完全に削除したりするには、次のアクセス許可が必要です。グローバルテーブル設定を削除すると、異なるリージョンのテーブル間のレプリケーション関係のみが削除されます。最後に残っているリージョンの基盤となる DynamoDB テーブルは削除されません。最後のリージョンのテーブルは、同じデータと設定を持つ標準の DynamoDB テーブルとして引き続き存在し続けます。これらのアクセス許可は、マルチリージョンの結果整合性 (MREC) とマルチリージョンの強力な整合性 (MRSC) の両方のグローバルテーブルに適用されます。

  • UpdateTable API を使用して既存のグローバルテーブルからレプリカを削除するには、API コールを行う元のリージョンのテーブルリソースに対して次のアクセス許可が必要です。

    • dynamodb:UpdateTable

  • レプリカを削除する各リージョンのテーブルリソースには、次のアクセス許可が必要です。

    • dynamodb:DeleteTable

    • dynamodb:DeleteTableReplica

監視を使用した MRSC グローバルテーブルの追加アクセス許可

監視を使用するマルチリージョンの強力な整合性 (MRSC) グローバルテーブルを削除する場合、すべての参加リージョン (レプリカリージョンと監視リージョンの両方を含む) のテーブルリソースに対して次のアクセス許可が必要です。

  • dynamodb:DeleteGlobalTableWitness

グローバルテーブルレプリカを削除する IAM ポリシーの例

このアイデンティティベースのポリシーでは、「users」という名前の DynamoDB グローバルテーブルとそのレプリカを 3 つのリージョン間で削除できます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:UpdateTable", "dynamodb:DeleteTable", "dynamodb:DeleteTableReplica" ], "Resource": [ "arn:aws:dynamodb:us-east-1:123456789012:table/users", "arn:aws:dynamodb:us-east-2:123456789012:table/users", "arn:aws:dynamodb:us-west-2:123456789012:table/users" ] } ] }

このアイデンティティベースのポリシーでは、「users」という名前の MRSC グローバルテーブルのレプリカと監視を削除できます。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:UpdateTable", "dynamodb:DeleteTable", "dynamodb:DeleteTableReplica", "dynamodb:DeleteGlobalTableWitness" ], "Resource": [ "arn:aws:dynamodb:us-east-1:123456789012:table/users", "arn:aws:dynamodb:us-east-2:123456789012:table/users" ] } ] }

グローバルテーブルで AWS KMS を使用する方法

すべての DynamoDB テーブルと同様に、グローバルテーブルレプリカは常に AWS Key Management Service (AWS KMS) に保存されている暗号化キーを使用して保管中のデータを暗号化します。

グローバルテーブル内のすべてのレプリカは、同じタイプの KMS キー (AWS 所有キー、AWS マネージドキー、またはカスタマーマネージドキー) で設定する必要があります。

重要

DynamoDB では、レプリカを削除するには、レプリカの暗号化キーにアクセスする必要があります。レプリカの暗号化に使用されるカスタマーマネージドキーを無効化または削除する場合、まずレプリカを削除し、残りのレプリカのいずれかのテーブルステータスが「ACTIVE」に変わるのを待ってから、キーを無効化または削除する必要があります。

マルチリージョンの結果整合性 (MREC) 用に設定されたグローバルテーブルの場合、レプリカの暗号化に使用されるカスタマーマネージドキーへの DynamoDB のアクセスを無効化または取り消すと、レプリカとの間のレプリケーションは停止し、レプリカのステータスは「INACCESSIBLE_ENCRYPTION_CREDENTIALS」に変わります。MREC グローバルテーブルのレプリカが 20 時間以上「INACCESSIBLE_ENCRYPTION_CREDENTIALS」ステータスのままである場合、レプリカは単一リージョンの DynamoDB テーブルに変換され、元に戻せなくなります。

マルチリージョンの強力な整合性 (MRSC) 用に設定されたグローバルテーブルの場合、レプリカの暗号化に使用されるカスタマーマネージドキーへの DynamoDB のアクセスを無効化または取り消すと、レプリカとの間のレプリケーションは停止し、レプリカへの書き込みまたは強力な整合性のある読み込みを実行しようとするとエラーが返され、レプリカのステータスは「INACCESSIBLE_ENCRYPTION_CREDENTIALS」に変わります。MRSC グローバルテーブルのレプリカが 7 日以上「INACCESSIBLE_ENCRYPTION_CREDENTIALS」ステータスのままである場合、取り消された特定のアクセス許可に応じて、レプリカはアーカイブされるか、永続的にアクセスできなくなります。