Как добавить ту же роль IAM в assume_role_policy с помощью Terraform?

#amazon-web-services #terraform #terraform-provider-aws

#amazon-web-services #terraform #terraform-provider-aws

Вопрос:

Я создаю роль для экземпляра Grafana EC2, чтобы он мог считывать показатели из CloudWatch. Я столкнулся с этой проблемой: https://github.com/grafana/grafana/issues/19173 , и, похоже, мне нужно добавить эти строки в Доверительные отношения, чтобы исправить это.

     {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::[id-removed]:role/grafana",
          "arn:aws:sts::[id-removed]:assumed-role/grafana/GrafanaSession"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  

Итак, мне интересно, как это сделать с помощью Terraform. На данный момент я играю с этой версией сценария terraform:

 provider "aws" {
  region = "eu-west-1"
  version = "~> 2.0"
}

variable "aws_account_id" {
  type = string
  default = "account_id"
}

data "aws_iam_policy_document" "assume_role_policy" {  
  statement {
    actions = ["sts:AssumeRole"]
    principals {
      type        = "Service"
      identifiers = ["ec2.amazonaws.com"]
    }
  }

  statement {
    actions = ["sts:AssumeRole"]

    principals {
      type        = "AWS"
      identifiers = [
          "arn:aws:iam::${var.aws_account_id}:role/grafana",
          "arn:aws:sts::${var.aws_account_id}:assumed-role/grafana/GrafanaSession"
          ]
    }
  }
}

resource "aws_iam_role" "grafana" {
  name               = "grafana"
  assume_role_policy = data.aws_iam_policy_document.assume_role_policy.json
}
  

Сбой с MalformedPolicyDocument: Invalid principal in policy: "AWS":"arn:aws:iam::[id-removed]:role/grafana"

Чтобы заставить это работать, я должен прокомментировать второй блок инструкции aws_iam_policy_document , запустить terraform apply , затем раскомментировать его и снова запустить terraform apply, что не очень удобно для работы, поскольку мы запускаем наши сценарии terraform из GitLab, поэтому это означает, что мы должны фиксировать без предполагаемых ролей, тегов,развертывание, фиксация с предполагаемыми ролями, пометка и повторное развертывание: explode

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

1. Вы уверены, что вам действительно нужна «роль / графана» там? Для меня не имеет смысла разрешать роли принимать себя.

2. Вы не можете добавить несуществующую роль в принципе. Таким образом, вы не можете создать роль и в то же время ссылаться на нее как на принцип, поскольку она еще не существует. Чего вы пытаетесь достичь?

3. @Marcin, я думаю о том, как я могу это сделать с помощью terraform. Возможно ли создать ресурс и обновить его в том же модуле?

4. @bonzaster Я не знаю, как это сделать. Но terraform позволяет запускать любой код (например, aws cli) или вызывать лямбда-функцию. Таким образом, вы всегда можете создать роль правильно, без проблемного оператора iam, а затем использовать local-exect для запуска командной строки aws для обновления роли iam.

5. @Marcin о, хорошая идея, взгляну на нее, большое спасибо!