使用 Terraform 创建 AWS 服务角色

Era*_*ray 6 amazon-web-services amazon-iam terraform

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

首先要做的事情是:

$ terraform version
Terraform v0.12.0
+ provider.aws v2.18.0
Run Code Online (Sandbox Code Playgroud)

现在我需要创建一个服务角色,据我了解,首先我需要使用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"
}
Run Code Online (Sandbox Code Playgroud)

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

Pub*_*ana 7

我误读了你的问题,更正一下:

您可以创建一个 iam_policy,如下所示:

data "aws_iam_policy" "codedeploy_service_policy" {
  arn = "arn:aws:iam::aws:policy/service-role/AWSCodeDeployRole"
}
Run Code Online (Sandbox Code Playgroud)

然后在您的保单附件中:

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}"
}
Run Code Online (Sandbox Code Playgroud)

具有代入角色策略(具有信任关系)的 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
}
Run Code Online (Sandbox Code Playgroud)