gpt4 book ai didi

amazon-web-services - 如何从其 ARN 中获取 AWS 角色的友好名称?

转载 作者:行者123 更新时间:2023-12-05 00:43:40 28 4
gpt4 key购买 nike

我正在尝试将策略附加到 Terraform 中的 IAM 角色。我只知道角色的 ARN 编号,而不知道它的“友好名称”。但策略附件功能要求我使用友好名称,而不是 ARN 编号。

如果我已有 ARN 编号,如何获取 IAM 角色的友好名称?

这是我目前所拥有的——它给了我“ValidationError:roleName 的指定值无效。它必须只包含字母数字字符和/或以下内容:+=,.@_-”。我相信这是因为我使用的是角色名称的 ARN 编号,而不是友好的角色名称。

resource "aws_iam_role_policy_attachment" "my-policy-attachment" {
role = "arn:aws:iam::my_user_account_id:role/my_role_name"
policy_arn = aws_iam_policy.my_policy.arn
}

谢谢!

最佳答案

“友好名称”只是 ARN 的最后一部分。

因此,对于 arn:aws:iam::my_user_account_id:role/my_role_name,友好名称将为 my_role_name。您可以像这样使用 split 来使用 Terraform 天真地解决这个问题:

resource "aws_iam_role_policy_attachment" "my-policy-attachment" {
role = split("/", "arn:aws:iam::my_user_account_id:role/my_role_name")[1]
policy_arn = aws_iam_policy.my_policy.arn
}

或者,也许更好,像这样:

variable "role_arn" {}

locals {
role_friendly_name = split("/", var.role_arn)[1]
}

resource "aws_iam_role_policy_attachment" "my-policy-attachment" {
role = local.role_friendly_name
policy_arn = aws_iam_policy.my_policy.arn
}

这适用于这种情况,但您可能还需要考虑其中也有路径前缀的角色。然后,这将为您提供一个看起来更像 arn:aws:iam::123456789012:role/service-role/AWSBackupDefaultServiceRole 的 ARN,因此上面将返回 service-role .

在某些语言中,您可以使用负索引来访问列表末尾的内容,但 Terraform/HCL2 目前不允许这样做(请参阅 this feature request )。因此,我们也需要使用 length function:

variable "role_arn" {}

locals {
role_split = split("/", var.role_arn)[1]
role_friendly_name = local.role_split[length(local.role_split) - 1]
}

resource "aws_iam_role_policy_attachment" "my-policy-attachment" {
role = local.role_friendly_name
policy_arn = aws_iam_policy.my_policy.arn
}

关于amazon-web-services - 如何从其 ARN 中获取 AWS 角色的友好名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69002676/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com