amazon-web-services - 如何使用 terraform 在 aws 中配置 IAM 角色?
问题描述
因为我是 terraform 的新手,所以一旦我卡住了将近一天,我想请你帮忙。
当尝试应用 IAC 将 Nginx 服务部署到 AWS 上的 ECS(EC2 启动类型)中时,我面临以下问题:
Error: Error creating IAM Role nginx-iam_role: MalformedPolicyDocument: Has prohibited field Resource status code: 400, request id: 0f1696f4-d86b-4ad1-ba3b-9453f3beff2b
我已经检查了文档并且语法很好。还有什么可能是错的?
在创建 IAM 基础设施的代码段之后:
provider "aws" {
region = "us-east-2"
}
data "aws_iam_policy_document" "nginx-doc-policy" {
statement {
sid = "1"
actions = [
"ec2:*"
]
resources = ["*"]
}
}
resource "aws_iam_role" "nginx-iam_role" {
name = "nginx-iam_role"
path = "/"
assume_role_policy = "${data.aws_iam_policy_document.nginx-doc-policy.json}"
}
resource "aws_iam_group_policy" "nginx-group-policy" {
name = "my_developer_policy"
group = "${aws_iam_group.nginx-iam-group.name}"
policy = "${data.aws_iam_policy_document.nginx-doc-policy.json}"
}
resource "aws_iam_group" "nginx-iam-group" {
name = "nginx-iam-group"
path = "/"
}
resource "aws_iam_user" "nginx-user" {
name = "nginx-user"
path = "/"
}
resource "aws_iam_user_group_membership" "nginx-membership" {
user = "${aws_iam_user.nginx-user.name}"
groups = ["${aws_iam_group.nginx-iam-group.name}"]
}
如果你们需要剩余的代码:https ://github.com/atilasantos/iac-terraform-nginx.git
解决方案
您正在尝试将该aws_iam_policy_document.nginx-doc-policy
策略用作assume_role_policy
不能用作假定角色的策略,该策略需要定义您信任的委托人并希望授予访问权限以承担您正在创建的角色。
假设角色策略可能如下所示,您希望通过实例配置文件向 EC2 实例授予对该角色的访问权限。最后,您可以通过新资源将初始角色作为内联策略附加到角色:
data "aws_iam_policy_document" "instance-assume-role-policy" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["ec2.amazonaws.com"]
}
}
}
resource "aws_iam_role" "nginx-iam_role" {
name = "nginx-iam_role"
path = "/"
assume_role_policy = data.aws_iam_policy_document.instance-assume-role-policy.json
}
resource "aws_iam_role_policy" "role_policy" {
name = "role policy"
role = aws_iam_role.nginx-iam_role.id
policy = data.aws_iam_policy_document.nginx-doc-policy.json
}
除了将策略附加为内联策略之外,您还可以创建 IAM 策略并将其附加到各种 iam 资源。(例如:aws_iam_policy
和aws_iam_role_policy_attachment
角色。)
我们创建了一堆开源IAM 模块(和其他模块)以使 IAM 处理更容易:在 github 上找到它们。但是您可以尝试更多模块。
推荐阅读
- python - 使用 Selenium chrome 驱动程序进行 Python 网页抓取
- java - 如何使用 Firebase 的 Java Admin SDK 在单个位置更新对象而不覆盖其他字段?
- javascript - GraphQL 不允许查询不同的字段
- frameworks - 2020年我应该学习哪个Web开发框架?
- bash - unity cloud build Post-Build 脚本上传到 github 页面
- python - 无法从 kafka 主题读取\写入
- python - 从python中的空列表计算新列表的最快方法
- python - 两者如何组合两列不同的数据框,以使它们具有唯一值?
- python - Xarray:ValueError:维度或多索引级别['lons','lats']不存在
- python - 我正在使用函数开发一个石头、纸、剪刀程序,它总是返回其他情况