Связанная с сервисом роль AWS для таблиц DynamoDB и автоматического масштабирования глобальных вторичных индексов

Согласно документации здесь есть связанная с сервисом роль для автоматического масштабирования Dynamodb — AWSServiceRoleForApplicationAutoScaling_DynamoDBTable. Политика разрешений ролей позволяет автомасштабированию приложений выполнять следующие действия на всех ресурсах:

Action: dynamodb:DescribeTable
Action: dynamodb:UpdateTable
Action: cloudwatch:DeleteAlarms
Action: cloudwatch:DescribeAlarms
Action: cloudwatch:PutMetricAlarm

что переводится как (из здесь ),

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
              "dynamodb:DescribeTable",
              "dynamodb:UpdateTable",
              "cloudwatch:DeleteAlarms",
              "cloudwatch:DescribeAlarms",
              "cloudwatch:PutMetricAlarm"
            ],
            "Resource": "*"
        }
    ]
}

Так, например, когда политика используется, как показано ниже,

  TableLiveProductsReadScalableTarget:
    Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
    Properties:
      MaxCapacity: !Ref TableLiveProductsReadMaxCap
      MinCapacity: !Ref TableLiveProductsReadMinCap
      ResourceId: !Sub "table/${TableLiveProducts}"
      RoleARN: !Sub  arn:aws:iam::${AWS::AccountId}:role/aws-service-role/dynamodb.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_DynamoDBTable
      ScalableDimension: 'dynamodb:table:ReadCapacityUnits'
      ServiceNamespace: dynamodb

с точки зрения безопасности можно ли предположить, что, поскольку роль может быть принята только dynamodb.application-autoscaling.amazonaws.com, нет проблем с разрешением на обновление ALL таблиц, удаление ALL аварийных сигналов и т. д.?

В чем причина запроса такого разрешения с подстановочными знаками здесь (а также во многих связанных с сервисами ролях, созданных AWS)?


person Jimson Kannanthara James    schedule 05.03.2021    source источник
comment
Что касается подстановочного знака, вы говорите о подстановочном знаке ресурса в политике, которая у вас есть здесь.   -  person Kirk    schedule 06.03.2021
comment
Да, здесь беспокоит "Resource": "*".   -  person Jimson Kannanthara James    schedule 06.03.2021


Ответы (1)


Они должны быть наиболее общими для вашей учетной записи. Таким образом, одна роль покрывает каждый стол за вас. Поскольку принцип dynamodb.application-autoscaling.amazonaws.com, никакая другая служба или пользователь/роль IAM не могут использовать эти разрешения.

Вместо этого вы можете указать свою роль с более тонкой настройкой. Итак, чтобы ограничить разрешения только одной таблицей, вы можете сделать:

  MyDynamoDBRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'               
        Statement:
          - Effect: Allow
            Principal: {'Service': ['dynamodb.application-autoscaling.amazonaws.com']}
            Action: ['sts:AssumeRole']  
      Path: '/'  
      Policies:
        - PolicyName: DynamoDBScaling
          PolicyDocument: !Sub |
            {
                "Version": "2012-10-17",
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Action": [
                            "dynamodb:DescribeTable",
                            "dynamodb:UpdateTable"
                        ],
                        "Resource": "${TableLiveProducts.Arn}"
                    },
                    {
                        "Effect": "Allow",
                        "Action": [
                            "cloudwatch:PutMetricAlarm",
                            "cloudwatch:DescribeAlarms",
                            "cloudwatch:DeleteAlarms"
                        ],
                        "Resource": "*"
                    }
                ]
            }        


  TableLiveProductsReadScalableTarget:
    Type: 'AWS::ApplicationAutoScaling::ScalableTarget'
    Properties:
      MaxCapacity: !Ref TableLiveProductsReadMaxCap
      MinCapacity: !Ref TableLiveProductsReadMinCap
      ResourceId: !Sub "table/${TableLiveProducts}"
      RoleARN: !GetAtt MyDynamoDBRole.Arn
      ScalableDimension: 'dynamodb:table:ReadCapacityUnits'
      ServiceNamespace: dynamodb

person Marcin    schedule 06.03.2021