【问题标题】:How to get ARN of an IAM role如何获取 IAM 角色的 ARN
【发布时间】:2022-01-15 08:24:30
【问题描述】:

我正在我的 main.tf 中创建 2 个我将同时创建的 IAM 角色。第一个是 main_role,第二个是 Backend_role。Backend_role 信任 main_role 承担其角色,而 main_role 还需要指定承担 Backend_role 的策略。我有 2 个问题 1...如何在main_role的资源策略部分引用Backend_role的ARN。 2...如何在Backend_role的assume_role_policy资源部分引用main_role的ARN

main.tf

resource "aws_iam_role" "main_role" {
  name = var.role_name

}

resource "aws_iam_role_policy" "main_policy"{
  name = "sts-assume-roles"
  role = aws_iam_role.main_role.id

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement":[
    {
      "Sid":"",
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": [
        ${How do i reference the ARN of the Backend_role}
}

resource "aws_iam_role" "Backend_role" {
  name = var.bakend_role_name

  assume_role_policy = <<EOF
{
  "Version":"2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "AWS":"How do i reference the ARN of main_role"
    },
    "Action": "sts:AssumeRole",
    "Condition": {}
  }
}
EOF 
}

【问题讨论】:

    标签: terraform


    【解决方案1】:

    角色 ARN 的格式始终为 arn:aws:iam::{account number}:role/{role name}

    如果您要创建两个相互引用的角色,则应模板化 ARNS,而不是直接引用资源。这避免了循环引用。

    您可以这样获取您的帐号:

    data "aws_caller_identity" "current" {}
    

    您可以像这样将其模板化:

    "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/${var.my_role_name}"
    

    您可能还需要清理该代码 - 第一个语句中的

    【讨论】:

    • 所以我不能使用“aws_iam_role.main_role.arn”和“aws_iam_role.backend_role.arn”?
    • 您可以在后端使用它,但如果主要角色随后将后端引用为aws_iam_role.Backend_role.arn,则您有一个循环引用。主角色要到后台才能建,后台要到主角色才能建。
    • 很抱歉我的问题不清楚。我的问题是。我可以在主要角色中使用 aws_iam_role.Backend_role.arn 吗?我可以在后端角色中使用 aws_iam_role.main_role.arn 吗?跨度>
    • 你不能同时使用。
    • 如果一个引用另一个,它不是循环引用。为了一致性起见,最好将 arn 模板化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2021-10-17
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多