Применение одной и той же политики IAM к нескольким ролям IAM - PullRequest
0 голосов
/ 06 мая 2020

У меня есть 2 роли IAM для разных лямбда-выражений, и я хочу, чтобы у них обеих были одинаковые разрешения IAM.

Как я могу сделать это, не дублируя описания политик IAM, что весьма подвержено ошибкам.

В приведенном ниже коде у меня есть 2 ресурса роли IAM и 2 ресурса политики. Я знаю, что у меня не будет единственной политики, которую они могут использовать, но, может быть, я мог бы хотя бы поместить JSON тело политики в какую-нибудь повторно используемую переменную?

resource "aws_iam_role" "lambda1" {
    name = "L1-LambdaRole"

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


resource "aws_iam_role" "lambda2" {
    name = "L2-LambdaRole"

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




resource "aws_iam_role_policy" "l1_dynamodb_policy" {
    name = "Allow_DynamoDb"
    role = "${aws_iam_role.lambda1.id}"

    policy = <<EOF
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "dynamodb:DescribeTable",
                    "dynamodb:BatchWriteItem"

                ],
                "Resource": [
                    "${aws_dynamodb_table.audtiTable.arn}"
                ]
            }
        ]
    }
    EOF
    }

resource "aws_iam_role_policy" "l2_dynamodb_policy" {
    name = "Allow_DynamoDb"
    role = "${aws_iam_role.lambda2.id}"

    policy = <<EOF
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "dynamodb:DescribeTable",
                    "dynamodb:BatchWriteItem"

                ],
                "Resource": [
                    "${aws_dynamodb_table.audtiTable.arn}"
                ]
            }
        ]
    }
    EOF
    }

1 Ответ

1 голос
/ 06 мая 2020

Вы можете определить политику как customer managed policy, что означает, что у нее есть собственный ARN, а затем вы можете прикрепить ее к ролям, используя этот ARN.

Я не очень хорошо знаком с Terraform, но это выглядит нравится: https://www.terraform.io/docs/providers/aws/r/iam_policy_attachment.html

...