aws autscaling политика доступа api через terraform

Использование группы автомасштабирования aws, которая контролируется сервером, прогнозирует предстоящую нагрузку и масштабируется вверх / вниз в соответствии с ее потребностями. Серверу требуются разрешения на api автомасштабирования с наименьшим количеством необходимых привилегий.

Мои проблемы связаны с ограничением сервера использовать только определенную группу автомасштабирования, определенную для поля ресурса. Все примеры политик, которые я нашел до сих пор, используют только "*" в поле ресурса, что должно означать, что у него есть доступ ко всем группам автомасштабирования, если я не ошибаюсь.

data "aws_iam_policy_document" "default" {
  statement {
    sid    = "S3PolicyStmtNodeAutoscalingApiCalls"
    effect = "Allow"

    actions   = [
      "autoscaling:DescribeAutoScalingGroups",
      "autoscaling:SetDesiredCapacity",
      "autoscaling:TerminateInstanceInAutoScalingGroup"
    ]

    resources = [ var.autoscaling_group_arn ]
  }
}

Реализовано через terraform, это приводит к следующей политике json (группа автомасштабирования arn запутана):

resource "aws_iam_policy" "aws_api_access" {
  arn    = "arn:aws:iam::123456789123:policy/aws-api-access"
  id     = "arn:aws:iam::123456789123:policy/aws-api-access"
  name   = "aws-api-access"
  path   = "/"
  policy = jsonencode({
    Statement = [
      {
        Action   = [
          "autoscaling:TerminateInstanceInAutoScalingGroup",
          "autoscaling:SetDesiredCapacity",
          "autoscaling:DescribeAutoScalingGroups",
        ]
        Effect   = "Allow"
        Resource = "arn:aws:autoscaling:region:acountid:autoScalingGroup:id:autoScalingGroupName/name"
        Sid      = "S3PolicyStmtAutoscalingApiCalls"
      }
    ]
    Version   = "2012-10-17"
  })
}

Ошибка AccessDenied: Пользователь: arn: aws: sts :: id: предположительная роль / имя_роли / идентификатор-экземпляра не авторизован для выполнения: автомасштабирование: DescribeAutoScalingGroups

Пока мне удалось запустить его только с использованием подстановочного знака внутри атрибута ресурса, любые подсказки приветствуются.


person MrNice    schedule 23.04.2020    source источник
comment
Вы получаете сообщение об ошибке при использовании ограниченного ресурса? Если да, можете ли вы это опубликовать?   -  person ydaetskcoR    schedule 23.04.2020
comment
Просмотрите docs.aws.amazon. com / IAM / latest / UserGuide / похоже, что autoscaling:DescribeAutoScalingGroups не может быть ограничен ключом ресурса или условия, но остальные 2 разрешения должны быть в порядке как есть. Я бы разделил их на отдельные утверждения в политике IAM, и тогда я думаю, что это должно сработать.   -  person ydaetskcoR    schedule 23.04.2020
comment
Хороший намек, попробую это! Ошибка AccessDenied: Пользователь: arn: aws: sts :: id: предположительная роль / имя_роли / идентификатор-экземпляра не авторизован для выполнения: автомасштабирование: DescribeAutoScalingGroups   -  person MrNice    schedule 23.04.2020
comment
Да, этому действию нужен ресурс *, но он доступен только для чтения, и в выводе этого вызова не должно быть ничего особенного секрета, поэтому я думаю, вы можете разделить операторы.   -  person ydaetskcoR    schedule 23.04.2020


Ответы (1)


Решение находится в комментариях, разделение автомасштабирования: DescribeAutoScalingGroups от остальных решает проблему, заключающуюся в невозможности указать группу автомасштабирования в поле ресурса.

data "aws_iam_policy_document" "default" {
  statement {
    sid    = "S3PolicyStmtNodeAutoscalingApiCalls"
    effect = "Allow"

    actions   = [
      "autoscaling:SetDesiredCapacity",
      "autoscaling:TerminateInstanceInAutoScalingGroup"
    ]

    resources = [ var.autoscaling_group_arn ]
  }

  statement {
    sid    = "S3PolicyStmtNodeAutoscalingDescribe"
    effect = "Allow"

    actions   = [
      "autoscaling:DescribeAutoScalingGroups"
    ]

   resources = [ "*" ]
  }
}
person MrNice    schedule 23.04.2020
comment
Не могли бы вы отредактировать ответ, чтобы он работал более полно? Комментарии не являются первоклассными, и поэтому не предполагают, что они будут жить так долго, как ответы. Если бы вы могли показать в ответе то, что вы сделали, тогда это было бы намного полезнее для других людей, которые могли столкнуться с той же проблемой, что и вы. - person ydaetskcoR; 23.04.2020