Share the joy
1. Create an iam role. During creating the iam role, define IAM assume role policy. Assume policy tells who can assume this iam role.
2. Define IAM Policy. Attach IAM policy to this role.
In aws UI, the assume policy will be shown as Trust relationships tab, The normal IAM policy is shown as in Permissions tab.
Below is an example how to use terraform to create role with IAM assume policy, and IAM role policy:
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}" }