Ошибка создания пошаговых функций. Нет прав на выполнение предоставленной роли - PullRequest
1 голос
/ 09 мая 2020

У меня ошибка при создании пошаговых функций с помощью terraform:

Error: Error creating Step Function State Machine: AccessDeniedException: Neither the global service principal states.amazonaws.com, nor the regional one is authorized to assume the provided role.

Я пробовал добавить блок depends_on в ресурс aws_sfn_state_machine, но это не помогает. Но если я создаю роль отдельно от пошаговой функции, а затем устанавливаю role_arn в ресурсе aws_sfn_state_machine, все работает. Почему?

Ответы [ 2 ]

1 голос
/ 12 мая 2020

Сообщение об ошибке, которым вы поделились, похоже, предполагает, что политика предполагаемой роли для данной роли не включает ни одного из принципалов службы, используемых Step Functions. Для роли потребуется политика предполагаемой роли, в которой этот сервис указан как один из разрешенных принципалов:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "states.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}

В Terraform мы обычно устанавливаем это как аргумент ресурса aws_iam_role:

resource "aws_iam_role" "example" {
  name = "stepfunctions"

  assume_role_policy = jsonencode({
    "Version": "2012-10-17",
    "Statement": [
      {
        "Action": "sts:AssumeRole",
        "Principal": {
          "Service": "states.amazonaws.com"
        },
        "Effect": "Allow",
        "Sid": ""
      }
    ]
  })
}

Затем мы можем ссылаться на ARN этой роли в ресурсе aws_sfn_state_machine, который автоматически создаст зависимость, чтобы гарантировать, что Terraform не будет пытаться создать пошаговую функцию, пока не создаст роль:

resource "aws_sfn_state_machine" "example" {
  name     = "my-state-machine"
  role_arn = aws_iam_role.example.arn

  # ...
}

К сожалению, из-за внутренней конструкции AWS IAM иногда может пройти несколько минут после создания объекта IAM, прежде чем этот объект станет полностью функциональным. API AWS не предоставляет какой-либо полностью надежный способ определить, когда участник IAM является полностью работоспособным после изменения настроек, поэтому провайдер Terraform AWS часто прилагает все усилия для опроса о завершении, но не всегда может гарантировать, что .

Если вы по-прежнему видите указанную вами ошибку в конфигурации, подобной приведенной выше, я бы посоветовал подождать 10 минут после того, как вы увидите ошибку, и попробуйте снова запустить terraform apply ( без уничтожив роль и воссоздав ее), чтобы посмотреть, работает ли она. Конечно, необходимость дважды запускать Terraform, чтобы получить желаемый ответ, далеко не удобно, но, по крайней мере, выявление отложенной согласованности как причины позволит избежать тратить время на исследование других возможных проблем.

0 голосов
/ 09 мая 2020

Depends_on, вероятно, ссылается на то, что ресурс A должен быть создан, если ресурс B также будет создан. Он не применяет роль к конечному автомату. role_arn - явная настройка для конечного автомата для использования этой конкретной роли.

https://www.terraform.io/docs/configuration/resources.html#depends_on -explicit-resource-dependencies

...