DynamoDB テーブルで誤削除保護を有効にする方法を教えてください。
データを保護するために、Amazon DynamoDB テーブルで誤削除保護を有効にしたいです。
簡単な説明
DynamoDB テーブルの意図しない削除を防ぐには、削除保護機能を使用します。この機能をオンにすると、テーブルを削除する前に削除を明示的に確認する必要があります。リソースベースのポリシーを使用して DynamoDB テーブルをさらに保護することもできます。
削除保護機能を有効にするには、次のいずれかの方法をとります。
- DynamoDB コンソール
- AWS コマンドラインインターフェイス (AWS CLI)
- AWS SDK
解決策
DynamoDB コンソールを使用して削除保護を有効にする
- AWS マネジメントコンソールにサインインします。
- Amazon DynamoDB コンソールを開きます。
- ナビゲーションペインで、[テーブル] を選択します。
- 誤削除防止機能を有効にするテーブルを選択してから、テーブル名を選択するとテーブルの詳細が開きます。
- [テーブルの詳細] セクションで、[その他の設定] を選択します。
- [削除保護] の設定で、[有効にする] を選択します。
- [保存] を選択します。
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 のオンデマンドバックアップと復元を使用する
関連するコンテンツ
- 質問済み 7年前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 6ヶ月前
- AWS公式更新しました 6ヶ月前
- AWS公式更新しました 2年前