Создание ресурса aws_api_gateway_account возвращает исключение AccessDeniedException

#terraform #aws-api-gateway #terraform-provider-aws

#terraform #aws-api-gateway #terraform-provider-aws

Вопрос:

В моем скрипте terraform у меня есть следующий ресурс —

 resource "aws_api_gateway_account" "demo" {
  cloudwatch_role_arn = var.apigw_cloudwatch_role_arn
}
  

На этапе применения я вижу следующую ошибку —

 2020/09/21 20:20:48 [ERROR] <root>: eval: *terraform.EvalApplyPost, err: Updating API Gateway Account failed: AccessDeniedException: 
    status code: 403, request id: abb0662e-ead2-4d95-b987-7d889088a5ef
  

Существует ли конкретное разрешение, которое необходимо привязать к роли, чтобы избавиться от этой ошибки?

Ответ №1:

Столкнулся с той же проблемой, что и @bdev03, мне потребовалось 2 дня, чтобы определить отсутствующее разрешение «iam: PassRole», будьте так добры, если terraform сможет указать на это, надеюсь, это поможет.

Комментарии:

1. Где вы определяете iam:PassRole?

2. @dataviews роли IAM или пользователю IAM, который используется terraform, потребуется это разрешение.

Ответ №2:

Поскольку ни этот поток (пока), ни официальная документация не очень хорошо справляются с решением этой проблемы… Минимальные политики, необходимые для этого действия:

 {
  "Sid": "AllowPassingTheRoleToApiGateway",
  "Effect": "Allow",
  "Action": "iam:PassRole",
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "iam:PassedToService": ["apigateway.amazonaws.com"]
    }
  }
}
  
 {
  "Sid": "AllowAPIGatewayUpdate",
  "Effect": "Allow",
  "Action": [
      "apigateway:UpdateRestApiPolicy",
      "apigateway:PATCH",
      "apigateway:GET"
  ],
  "Resource": "*"
}
  

Ответ №3:

Я не тестировал, но я считаю, что для роли требуется то, что показано ниже. Смотрите больше контекста в источнике: Раздел «Чтобы включить журналы CloudWatch» на https://docs.aws.amazon.com/apigateway/latest/developerguide/stages.html

Для обычных сценариев приложений роль IAM может присоединять управляемую политику AmazonAPIGatewayPushToCloudWatchLogs, которая содержит следующее утверждение политики доступа:

{ «Версия»: «2012-10-17», «Оператор»: [ { «Эффект»: «Разрешить», «Действие»: [ «журналы: CreateLogGroup», «журналы:CreateLogStream», «журналы: DescribeLogGroups», «журналы: DescribeLogStreams», «журналы: PutLogEvents», «журналы:GetLogEvents», «журналы:FilterLogEvents» ], «Ресурс»: «*» } ] }

Роль IAM также должна содержать следующее утверждение о доверительных отношениях:

{ «Версия»: «2012-10-17», «Оператор»: [ { «Sid»: «», «Эффект»: «Разрешить», «Принципал»: { «Сервис»: «apigateway.amazonaws.com » }, «Действие»: «sts: AssumeRole» } ] }