【问题标题】:Creating an AWS Service Role with Terraform使用 Terraform 创建 AWS 服务角色
【发布时间】:2019-11-17 20:54:50
【问题描述】:

我不知道如何使用 Terraform for AWS 配置角色策略。

第一件事:

$ terraform version
Terraform v0.12.0
+ provider.aws v2.18.0

现在我需要创建一个服务角色,据我了解,首先我需要使用aws_iam_role 创建角色并使用aws_iam_role_policy_attachment 附加 CodeDeploy 的 AWSCodeDeployRole 策略。

resource "aws_iam_role" "codedeploy_service_role" {
  name = "CodeDeployServiceRole"
}
resource "aws_iam_role_policy_attachment" "codedeploy_service_role_policy_attach" {
   role       = "${aws_iam_role.codedeploy_service_role.name}"
   policy_arn = "arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole"
}

但它不起作用,因为 aws_iam_role 资源没有必填字段“assume_role_policy”。而“assume_role_policy”字段只接受 JSON 格式的策略字段。我不明白为什么在角色初始化期间不设置策略就无法创建角色。

【问题讨论】:

  • AssumeRole 策略文档是强制性的。这是 AWS 设计的。您可以随时修改它。这与附加到角色的策略不同。 AssumeRole 策略用于指示哪个服务或帐户可以担任此角色。

标签: amazon-web-services terraform amazon-iam


【解决方案1】:

更正我误读了您的问题:

您可以按如下方式创建 iam_policy:

data "aws_iam_policy" "codedeploy_service_policy" {
  arn = "arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole"
}

然后在您的政策附件中:

resource "aws_iam_role_policy_attachment" "codedeploy_service_role_policy_attach" {
   role       = "${aws_iam_role.codedeploy_service_role.name}"
   policy_arn = "${data.aws_iam_policy.codedeploy_service_policy.arn}"
}

具有代入角色策略的 AWS iam 角色(具有信任关系) ** 在 AWS 中创建角色时,您必须提供信任关系(该特定角色将使用的服务)。

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

【讨论】:

  • 谢谢。但是 permissions.json 文件的内容是什么?因为,我正在尝试使用 aws 托管策略,所以我希望 terraform 将此托管策略附加到我的角色,而不是附加在 json 文件中定义的策略。
  • 那么 aws_iam_role 的 assume_role_policy 字段呢?
  • 你是什么意思?该名称可以是您定义的任何名称。
  • 我的意思是,如果您查看我的问题,您会看到 "aws_iam_role" 的代码块。如您所见,它只有“name”属性,还必须有一个assume_role_policy属性,根据terraform.io/docs/providers/aws/r/iam_role.html
  • 因此,在 AWS 中创建角色时,您必须提供信任关系(该特定角色将使用的服务)。所以你需要使用和上面类似的assume_role_policy。
猜你喜欢
  • 2018-07-07
  • 2019-09-08
  • 2020-10-16
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
  • 2021-01-22
  • 2019-10-05
  • 2020-04-29
相关资源
最近更新 更多