#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 о, хорошая идея, взгляну на нее, большое спасибо!