如何使用 Terraform 创建没有代入角色策略的 AWS IAM 角色?

How To Use Terraform To Create an AWS IAM Role with No Assume Role Policy?

使用 AWS MediaConvert 时,说明提供了一个 sample IAM policy 没有承担角色的部分。同样,在 AWS IAM 控制台中创建默认 MediaConvert 角色时,生成的 IAM 角色也没有信任策略。

在 Terraform 中,如何 create an IAM role 使用空 assume_role_policy 参数?

我尝试了以下解决方案,但出现了各种错误:

  1. 设置assume_role_policy = ""
  2. 设置assume_role_policy = "{}"
  3. 创建一个空 data aws_iam_policy_document 并将 assume_role_policy 设置为文档的 json 结果。

如果空代入角色策略不是解决方案,那么我该如何使用适合 MediaConvert 的 Terraform 创建 IAM 角色?

提前感谢您的考虑和回复。

您似乎对需要定义代入角色策略的位置感到困惑。策略本身不使用它,而是由角色使用它来确定允许哪些服务或帐户使用该角色。

该角色需要 assume_role_policy 以允许 mediaconvert 服务能够承担该角色。之后,角色可以使用附加到角色的 policy/policies 提供的任何权限(作为托管策略或内联)。

您的代入角色策略应该如下所示:

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

您创建角色和策略的 Terraform 代码将如下所示:

data "aws_iam_policy_document" "mediaconvert_assume_role_policy" {
  statement {
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = ["mediaconvert.amazonaws.com"]
    }
  }
}

resource "aws_iam_role" "mediaconvert" {
  name               = "example"
  path               = "/system/"
  assume_role_policy = data.aws_iam_policy_document.mediaconvert_assume_role_policy.json
}

resource "aws_iam_role_policy_attachment" "mediaconvert_s3" {
  role       = aws_iam_role.mediaconvert.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
}

resource "aws_iam_role_policy_attachment" "mediaconvert_api_gateway" {
  role       = aws_iam_role.mediaconvert.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonAPIGatewayInvokeFullAccess"
}

这将创建一个可以由 MediaConvert 服务承担的角色,然后允许 MediaConvert 服务使用 S3 或 API 网关执行任何操作。您可能想要选择为角色提供更细粒度的权限,或者您可能只是高兴 MediaConvert 不会做任何您不希望它做的事情。