Как определить 'accept_role_policy' в Terraform? - PullRequest
0 голосов
/ 08 июля 2019

Вот мое определение aws_iam_role в terraform

resource "aws_iam_role" "server_role" {
  name = "server-role"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "sts:AssumeEnvironment",
        "sqs:ChangeMessageVisibility",
        "sqs:ReceiveMessage",
        "sqs:SendMessage",
        "s3:GetObject*",
        "s3:ListBucket*",
        "s3:PutBucket*",
        "s3:PutObject*"
      ],
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF

но я получаю эту ошибку при попытке запустить terraform plan:

Ошибка: ошибка при применении плана:

Произошла 1 ошибка (и):

  • aws_iam_role.server_role: 1 произошла ошибка:

  • aws_iam_role.server_role: Ошибка создания роли сервера IAM Role: MalformedPolicyDocument: политика AssumeRole может указать только действия STS AssumeRole. код состояния: 400, идентификатор запроса: 55f1bfaf-a121-11e9-acaf-bb57d635757b

Я хочу разрешить серверу читать / записывать сегменты S3 и читать / записывать очереди SQS.

Очевидно, я не могу добавить все эти sqs:* и s3:* в одном месте. Как я могу сделать это в terraform?

1 Ответ

2 голосов
/ 08 июля 2019

вы запутались в IAM Policy и IAM берут на себя роль Policy. Попробуйте как ниже. Он создаст профиль IAM для EC2, и вы сможете прикрепить его к своим экземплярам EC2.

resource "aws_iam_role" "server_role" {
  name = "server-role"

  path = "/"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
}

resource "aws_iam_policy" "server_policy" {
  name        = "server_policy"
  path        = "/"
  description = "TBD"

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "sqs:ChangeMessageVisibility",
        "sqs:ReceiveMessage",
        "sqs:SendMessage",
        "s3:GetObject*",
        "s3:ListBucket*",
        "s3:PutBucket*",
        "s3:PutObject*"
      ],
      "Resource": [
          "*"
      ]
      ,
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}

resource "aws_iam_role_policy_attachment" "server_policy" {
  role       = "${aws_iam_role.server_role.name}"
  policy_arn = "${aws_iam_policy.server_policy.arn}"
}

resource "aws_iam_instance_profile" "server" {
  name = "server_profile"
  role = "${aws_iam_role.server_role.name}"
}
...