Как определить «accept_role_policy» в терраформе?

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

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 server-role: MalformedPolicyDocument: политика AssumeRole может указывать только действия STS AssumeRole. код состояния: 400, идентификатор запроса: 55f1bfaf-a121-11e9-acaf-bb57d635757b

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

Видимо я не могу сложить все эти sqs:* и s3:* в одном месте. Как это сделать в терраформе?


person Anthony Kong    schedule 08.07.2019    source источник


Ответы (1)


вы запутались с политикой IAM и политикой роли IAM. Попробуйте, как показано ниже. Он создаст профиль 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}"
}
person RyanKim    schedule 08.07.2019
comment
Большое спасибо за ответ. Я думаю, что у меня все еще есть большой пробел в знаниях в этой области. например я впервые узнаю о aws_iam_instance_profile - person Anthony Kong; 08.07.2019