You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform中如何确定Data JSON的Principal类型与标识符

解答:Terraform IAM策略中Principal类型与标识符的判断及ARN定义

首先,你要转换的JSON内联策略中的Principal包含两种类型:Service和AWS,对应Terraform的principals块需要分别定义,下面针对你的问题逐一说明:

1. 如何判断该Principal属于AWS类型?

  • AWS类型的Principal代表AWS身份实体,包括IAM用户、IAM角色、AWS账号、IAM组等,这类实体的标识符通常是ARN(亚马逊资源名称)或者AWS账号ID。
  • 看你原始JSON中的"AWS"键,其值是两个ARN变量,这就对应Terraform中type = "AWS"的principals块——只要Principal的取值是IAM身份的ARN/账号ID,就属于AWS类型。

2. 如何确定类型为S3?

  • 这里的S3是AWS服务主体,属于Terraform中的Service类型。这类Principal是AWS托管的服务身份,用于让AWS服务(比如S3)代表你执行操作。
  • 原始JSON中的"Service"键对应Terraform的type = "Service",其标识符是特定服务的主体名称(格式通常是服务名.amazonaws.com,比如s3.amazonaws.com),只要Principal的取值是AWS服务的官方主体名称,就属于Service类型。

3. 如何定义${local.eks_op_role_arn}、${local.eks_ng_role_arn}即ARN?

Terraform中的local变量通过locals块定义,有几种常见方式:

方式1:引用当前配置中创建的IAM角色ARN

如果这两个EKS角色是在当前Terraform代码里创建的,直接引用资源的arn属性即可:

# 示例:创建EKS操作角色
resource "aws_iam_role" "eks_op_role" {
  name = "eks-op-role"
  # 其他角色配置(信任策略、权限等)
}

# 创建EKS节点组角色
resource "aws_iam_role" "eks_ng_role" {
  name = "eks-ng-role"
  # 其他角色配置
}

# 定义local变量
locals {
  eks_op_role_arn = aws_iam_role.eks_op_role.arn
  eks_ng_role_arn = aws_iam_role.eks_ng_role.arn
}

方式2:直接硬编码外部ARN

如果角色是在当前配置外创建的(比如控制台手动创建),直接把ARN字符串赋值给local变量:

locals {
  eks_op_role_arn = "arn:aws:iam::123456789012:role/eks-op-role"
  eks_ng_role_arn = "arn:aws:iam::123456789012:role/eks-ng-role"
}

方式3:通过数据源获取已有角色ARN

如果需要动态获取AWS中已存在的角色,可以用data "aws_iam_role"数据源:

data "aws_iam_role" "eks_op_role" {
  name = "eks-op-role"
}

data "aws_iam_role" "eks_ng_role" {
  name = "eks-ng-role"
}

locals {
  eks_op_role_arn = data.aws_iam_role.eks_op_role.arn
  eks_ng_role_arn = data.aws_iam_role.eks_ng_role.arn
}

最后,你的完整Terraform principals配置应该是两个principals块的组合:

principals {
  type        = "Service"
  identifiers = ["s3.amazonaws.com"]
}

principals {
  type        = "AWS"
  identifiers = [
    local.eks_op_role_arn,
    local.eks_ng_role_arn
  ]
}

内容的提问来源于stack exchange,提问作者Kanika Singla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 00:33:22