Запрет AWS CloudFormation для удаления DynamoDB с помощью IAM

Я пытаюсь создать роль AWS, которая не позволяет CloudFormation удалить таблицу. Например, я создал свою таблицу следующим образом:

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}', '*']]

Я что-то пропустил?

Спасибо.

3 ответа

Решение

Вы можете использовать DeletionPolicy из RETAIN чтобы предотвратить удаление таблицы при удалении стека или удалении таблицы из шаблона. Также новый UpdateReplacePolicy не позволит CloudFormation удалить таблицу, когда это потребуется, из-за изменений первичного ключа.

Учитывая, что роль должным образом привязана к вызывающему пользователю / принципалу, возможно ли, что политика Arn из этого объединения не соответствует таблице Arn?

Также рассмотрите возможность сохранения ресурса вместо отказа в операции: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html

DynamoDB запустила новую функцию: защиту от удаления, которая отключает удаление таблицы независимо от того, разрешают ли какие-либо политики разрешений AWS Identity and Access Management (IAM) удаление таблицы.

Подробнее:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.Basics.html?icmpid=docs_console_unmapped#WorkingWithTables.Basics.DeletionProtection .

Другие вопросы по тегам