如何为我的 DynamoDB 表开启意外删除保护?
我想为我的 Amazon DynamoDB 表开启意外删除保护以保护我的数据。
简短描述
为了帮助防止意外删除 DynamoDB 表,您可以使用删除保护功能。启用此功能后,必须明确给出删除确认,然后才能删除表。您还可以使用基于资源的策略为 DynamoDB 表提供额外保护。
要开启删除保护,请使用以下方法之一:
- DynamoDB 控制台
- AWS 命令行界面 (AWS CLI)
- AWS SDK
解决方法
使用 DynamoDB 控制台开启删除保护
- 登录到 AWS 管理控制台。
- 打开 Amazon DynamoDB 控制台。
- 在导航窗格中,选择 Tables(表)。
- 选择要启用意外删除保护的表,然后选择表名称以打开表详细信息。
- 在 Table details(表详细信息)部分中,选择 Additional Settings(其他设置)。
- 在 Deletion protection(删除保护)下,选择 Turn On(开启)设置。
- 选择 Save(保存)。
使用 AWS CLI 开启删除保护
要使用 AWS CLI 为 DynamoDB 表开启删除保护,请运行以下命令:
aws dynamodb update-table \ --table-name my-table \ --deletion-protection-enabled
**注意:**将 my-table 替换为您的 DynamoDB 表的名称。
使用 AWS SDK 开启删除保护
您还可以使用 AWS SDK 以编程方式开启删除保护。以下示例使用适用于 Python 的 AWS SDK (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 表级别附加一个示例策略。在以下示例中,策略中包括明确拒绝除 Admin 以外的所有 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 无权对资源 arn:aws:dynamodb:us-east-1:xxxx:table/donotdeletetable 执行 dynamodb:DeleteTable 操作,因为基于资源的策略中已明确拒绝。”
服务控制策略
AWS Organizations 可以使用服务控制策略 (SCP) 和基于属性的访问控制 (ABAC) 来限制组织层面的删除表操作。您可以配置 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 无权对资源 arn:aws:dynamodb:us-east-1:xxxx:table/donotdeletetablewithtags 执行 dynamodb:DeleteTable 操作,因为服务控制策略中已明确拒绝。”
相关信息
相关内容
- AWS 官方已更新 24 天前
- AWS 官方已更新 4 个月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前