【发布时间】:2020-12-25 17:54:16
【问题描述】:
我是 terraform 的新手。我之前使用的是 terraform v0.12,因为我想在模块之间引入依赖关系,所以我最近开始使用 terraform v0.13。我正在尝试创建一个 IAM 角色并将一些策略附加到创建的角色。但问题出现在对角色的政策依恋上。很少有策略附加到角色,但一些策略会抛出错误,指出不存在此类角色,而其他策略正确附加到角色。我的实现有什么问题吗?
模块.tf
provider "aws" {
region = "ap-southeast-1"
}
#Control Plane role and policies
module "ControlPlane_Role" {
source = "../../templates/IAM/roles"
role_name = var.EKS-master-role
}
module "ControlPlane_Policy1" {
source = "../../templates/IAM/aws_policy"
role_name = var.EKS-master-role
policy_arn = "arn:aws:iam::aws:policy/AmazonEKSClusterPolicy"
depends_on = [module.ControlPlane_Role.role_create]
}
module "ControlPlane_Policy2" {
source = "../../templates/IAM/aws_policy"
role_name = var.EKS-master-role
policy_arn = "arn:aws:iam::aws:policy/AmazonEKSServicePolicy"
depends_on = [module.ControlPlane_Role.role_create]
}
模板/IAM/roles/role.tf
resource "aws_iam_role" "role_create" {
assume_role_policy = data.aws_iam_policy_document.trusted_entity.json
name = var.role_name
}
aws_policy.tf
resource "aws_iam_role_policy_attachment" "aws_policy" {
role = var.role_name
policy_arn = var.policy_arn
}
我将单独传递变量文件,这没有问题。
错误:
Error: Error attaching policy arn:aws:iam::aws:policy/AmazonEKSClusterPolicy to IAM Role EKS-master: NoSuchEntity: The role with name EKS-master cannot be found.
Error attaching policy arn:aws:iam::aws:policy/AmazonEKSServicePolicy to IAM Role EKS-master: NoSuchEntity: The role with name EKS-master cannot be found.
如果我在相同资源上再次运行命令 terraform apply 而不进行任何更改,则会附加策略。
【问题讨论】:
-
重新运行 Terraform 使其成功的事实使我怀疑这是一个不幸的典型 AWS IAM 行为示例,其中更改可能需要几分钟才能在所有区域的所有 AWS 服务中传播。 IAM API 无法确认更改是否已完全传播,因此遗憾的是,有时 Terraform 移动得太快,试图利用它在创建传播到(在本例中为 EKS)之前成功创建的策略。因为这是底层 API 的限制,所以遗憾的是没有任何好的解决方法。
-
是的@MartinAtkins,我同意你的观点。
标签: amazon-web-services terraform amazon-iam