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

Posted

技术标签:

【中文标题】如何使用 Terraform 创建没有代入角色策略的 AWS IAM 角色?【英文标题】:How To Use Terraform To Create an AWS IAM Role with No Assume Role Policy? 【发布时间】:2020-04-25 23:48:18 【问题描述】:

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

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

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

    设置assume_role_policy = "" 设置assume_role_policy = "" 创建一个空的data aws_iam_policy_document,并将assume_role_policy设置为文档的json结果。

如果空的承担角色策略不是解决方案,那么如何使用适用于 MediaConvert 的 terraform 创建 IAM 角色?

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

【问题讨论】:

【参考方案1】:

您似乎对需要在何处定义承担角色策略感到困惑。策略本身不使用它,而是由角色使用它来确定允许哪些服务或帐户使用该角色。

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

您为此承担的角色策略应如下所示:


  "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 Gateway 执行任何操作。您可能希望选择为角色提供更细粒度的权限,或者您可能只是很高兴 MediaConvert 不会做任何您不希望它做的事情。

【讨论】:

祝福你。祝福你。

以上是关于如何使用 Terraform 创建没有代入角色策略的 AWS IAM 角色?的主要内容,如果未能解决你的问题,请参考以下文章

如何自动切换角色策略(Terraform)

使用 terraform 创建 IAM 角色并将其附加到 EC2

terraform:有没有办法动态创建 iam 策略语句?

Terraform:将 AWS 托管策略附加到角色的正确方法?

Terraform 和 AWS:修改现有策略

仅在不存在时如何创建 terraform 资源