如何为我的 DynamoDB 表开启意外删除保护?

2 分钟阅读
0

我想为我的 Amazon DynamoDB 表开启意外删除保护以保护我的数据。

简短描述

为了帮助防止意外删除 DynamoDB 表,您可以使用删除保护功能。启用此功能后,必须明确给出删除确认,然后才能删除表。您还可以使用基于资源的策略为 DynamoDB 表提供额外保护。

要开启删除保护,请使用以下方法之一:

  • DynamoDB 控制台
  • AWS 命令行界面 (AWS CLI)
  • AWS SDK

解决方法

使用 DynamoDB 控制台开启删除保护

  1. 登录到 AWS 管理控制台
  2. 打开 Amazon DynamoDB 控制台
  3. 在导航窗格中,选择 Tables(表)。
  4. 选择要启用意外删除保护的表,然后选择表名称以打开表详细信息。
  5. Table details(表详细信息)部分中,选择 Additional Settings(其他设置)。
  6. Deletion protection(删除保护)下,选择 Turn On(开启)设置。
  7. 选择 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 操作,因为服务控制策略中已明确拒绝。”

相关信息

对 DynamoDB 使用按需备份和恢复

Amazon DynamoDB 中的安全性与合规性

使用 DynamoDB 进行设计和架构的最佳实践

AWS 官方
AWS 官方已更新 5 个月前
没有评论