我正在尝试创建一个阻止CloudFormation删除表的AWS角色。例如,我按如下方式创建了我的表:
UsersDynamoDBTable:
Type: AWS::DynamoDB::Table
Description: Users DynamoDB Table
Properties:
AttributeDefinitions:
- AttributeName: hashKey
AttributeType: S
- AttributeName: rangeKey
AttributeType: S
KeySchema:
- AttributeName: hashKey
KeyType: HASH
- AttributeName: rangeKey
KeyType: RANGE
BillingMode: PAY_PER_REQUEST
GlobalSecondaryIndexes:
- IndexName: index-rangeKey
KeySchema:
- AttributeName: rangeKey
KeyType: HASH
- AttributeName: hashKey
KeyType: RANGE
Projection:
ProjectionType: ALL
现在假设开发意外删除了此行并更新堆栈。这样,表及其所有数据都将被删除。因此,我想创建一个角色来防止 CloudFormation 删除 DynamoDB 表。我的第一次尝试是创建下面的角色,但没有奏效。
PreventCloudFormationDeleteTableIAMRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- cloudformation.amazonaws.com
Action:
- sts:AssumeRole
Policies:
- PolicyName: PreventTableDeletePolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Deny
Action:
- dynamodb:DeleteTable
Resource:
- !Join
- '/'
- - !Join [':', ['arn:aws:dynamodb', !Sub '${AWS::Region}', '*', 'table']]
- !Join ['', [!Sub '${StackName}', '*']]
我是否缺少某些角色配置?
谢谢。
RETAIN
DeletionPolicy
来防止在删除堆栈或从模板中删除表时删除表。此外,新UpdateReplacePolicy
将阻止 CloudFormation 在由于主键更改而需要删除表时删除表。
考虑到角色已正确附加到调用用户/委托人,该联接中的策略 Arn 是否可能与表 Arn 不匹配?
此外,请考虑保留资源,而不是拒绝操作:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html
DynamoDB 推出了一项新功能:删除保护,无论任何 AWS 身份和访问管理 (IAM) 权限策略是否允许删除表,都会禁用表删除。
更多内容:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html?icmpid=docs_console_unmapped#WorkingWithTables.Basics.DeletionProtection