1
votes

Im trying to setup a redshift cluster and an IAM role that will have access to the cluster. I am using terraform for this. According the documentation I need to create a Service role and attach the AmazonS3ReadOnlyAccess policy to it. I have the following config in my terraform script:

resource "aws_iam_role" "my_admin_role" {
  name = "my-role"
  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*",
        "redshift:*"
      ],
      "Resource": "*"
    }
  ]
}
EOF
}

However this gives me an error:

Errors:

  * aws_iam_role.my_admin_role: "assume_role_policy": required field is not set
  * aws_iam_role.my_admin_role: : invalid or unknown key: policy

How do I setup a service role for redshift ?

1

1 Answers

0
votes

You mix the resources aws_iam_role and aws_iam_role_policy

Sample usage of resource aws_iam_role

resource "aws_iam_role" "test_role" {
  name = "test_role"

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

Sample usage of resource aws_iam_role_policy

resource "aws_iam_role_policy" "test_policy" {
  name = "test_policy"
  role = "${aws_iam_role.test_role.id}"

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "ec2:Describe*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
EOF
}