AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

DynamoDB テーブルで誤削除保護を有効にする方法を教えてください。

所要時間2分
0

データを保護するために、Amazon DynamoDB テーブルで誤削除保護を有効にしたいです。

簡単な説明

DynamoDB テーブルの意図しない削除を防ぐには、削除保護機能を使用します。この機能をオンにすると、テーブルを削除する前に削除を明示的に確認する必要があります。リソースベースのポリシーを使用して DynamoDB テーブルをさらに保護することもできます。

削除保護機能を有効にするには、次のいずれかの方法をとります。

  • DynamoDB コンソール
  • AWS コマンドラインインターフェイス (AWS CLI)
  • AWS SDK

解決策

DynamoDB コンソールを使用して削除保護を有効にする

  1. AWS マネジメントコンソールにサインインします。
  2. Amazon DynamoDB コンソールを開きます。
  3. ナビゲーションペインで、[テーブル] を選択します。
  4. 誤削除防止機能を有効にするテーブルを選択してから、テーブル名を選択するとテーブルの詳細が開きます。
  5. [テーブルの詳細] セクションで、[その他の設定] を選択します。
  6. [削除保護] の設定で、[有効にする] を選択します。
  7. [保存] を選択します。

AWS CLI を使用して削除保護を有効にする

AWS CLI を使用して DynamoDB テーブルの削除保護を有効にするには、次のコマンドを実行します。

aws dynamodb update-table \
    --table-name my-table \
    --deletion-protection-enabled

注: my-table は、お使いの DynamoDB テーブルの名前に置き換えてください。

AWS SDK を使用して削除保護を有効にする

AWS SDK を使用して、削除保護をプログラムで有効にすることもできます。次の例では、AWS SDK for Python (Boto3) を使用しています。

import boto3

# Create a DynamoDB client
dynamodb = boto3.client('dynamodb')

# Set the table name
table_name = 'my-table'

# Enable delete protection
try:
    response = dynamodb.update_table(
        TableName=table_name,
        DeletionProtectionEnabled=True
    )
    print(f'Delete protection enabled for table {table_name}')
except Exception as e:
    print(f'Error enabling delete protection: {e}')

注: 'my-table' は、お使いの DynamoDB テーブルの名前に置き換えてください。

テーブルを削除しようとすると、次のエラーメッセージが表示されます。

「DeleteTable 操作の呼び出し時にエラーが発生しました (ValidationException): リソースの削除に対する保護が設定されているため、削除できません。最初に削除保護を無効にしてください。」

注: テーブルを正常に削除するには、削除保護を無効にする必要があります。

その他のベストプラクティス

DynamoDB テーブルを誤って削除しないようにさらに保護するには、以下のベストプラクティスを確認してください。

リソースベースのポリシーを使用する

リソースベースのポリシーを使用して、リソースにアクセスし、許可されるアクションを定義する AWS Identity and Access Management (IAM) プリンシパルを指定します。リソースベースのポリシーを作成するときに、DynamoDB テーブルレベルでサンプルポリシーをアタッチします。次の例でのポリシーには、管理者を除くすべての IAM エンティティに対し、dynamodb:DeleteTable アクションの明示的な拒否が含まれています。フルアクセス許可を持つ IAM エンティティがテーブルを削除しようとしても、アクションは拒否されます。

リソースベースのポリシーの例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Statement1",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "dynamodb:DeleteTable"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:xxxxx:table/donotdeletetable"
      ],
      "Condition": {
        "ForAnyValue:ArnNotEquals": {
          "aws:PrincipalArn": "arn:aws:iam::xxxxx:role/Admin"
        }
      }
    }
  ]
}

エラーメッセージの例

「テーブルの削除リクエストで問題が発生しました。ユーザー arn:aws:sts::xxxxx:assumed-role/dynamodbfullaccessrole/database-admin は、dynamodb:DeleteTable を リソース arn:aws:dynamodb:us-east-1:xxxx:table/donotdeletetable に対して実行する権限がありません。リソースベースのポリシーで明示的に拒否されています。」

サービスコントロールポリシー

AWS Organizations は、属性ベースのアクセス制御 (ABAC) を持つサービスコントロールポリシー (SCP) を使用して、テーブル削除操作を組織レベルで制限できます。SCP ポリシーを設定すると、キーと値のペアでタグ付けされたテーブル (production など) をユーザーが削除できないようにすることができます。この設定では、テーブルを削除する前に、関連するタグを削除する必要があります。この設定を行うことで、管理者は誤削除のリスクを組織全体で軽減できます。

ABAC を使用した SCP の例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Statement1",
      "Effect": "Deny",
      "Action": [
        "dynamodb:DeleteTable"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:xxxxx:table/donotdeletetable"
      ],
      "Condition": {
        "ForAnyValue:StringEqualsIfExists": {
          "aws:ResourceTag/environment": "production"
        }
      }
    }
  ]
}

エラーメッセージの例

「テーブルの削除リクエストで問題が発生しました。ユーザー arn:aws:sts::xxxx:assumed-role/Admin/dbadmin は、dynamodb:DeleteTable をリソース arn:aws:dynamodb:us-east-1:xxxx:table/donotdeletetablewithtags に対して実行する権限がありません。サービスコントロールポリシーで明示的に拒否されています。」

関連情報

DynamoDB のオンデマンドバックアップと復元を使用する

Amazon DynamoDB のセキュリティとコンプライアンス

DynamoDB を使用した設計とアーキテクトのベストプラクティス

AWS公式
AWS公式更新しました 6ヶ月前