alt*_*-f4 5 amazon-web-services terraform
我的目标是能够设置一个 IAM 角色,该角色可以承担某个 IAM 用户的角色。创建角色后,我想稍后再回来修改这个角色,添加外部ID以建立信任关系。让我用一个例子来说明:
假设我想创建角色:
resource "aws_iam_role" "happy_role" {
name = "happy-role"
assume_role_policy = data.aws_iam_policy_document.happy_assume_rule_policy.json
}
Run Code Online (Sandbox Code Playgroud)
我们还假设它happy_assume_role_policy
看起来像这样:
data "aws_iam_policy_document" "happy_assume_role_policy" {
statement {
effect = "Allow"
actions = ["sts:AssumeRole"]
principals {
type = "AWS"
identifiers = [var.some_iam_user_arn]
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我将使用创建的角色来创建外部集成。但是,一旦创建完该集成,我想返回到最初创建的角色并修改其假定的角色策略。所以现在我想向假设角色策略添加一个条件,使其看起来像:
data "aws_iam_policy_document" "happy_assume_role_policy" {
statement {
effect = "Allow"
actions = ["sts:AssumeRole"]
principals {
type = "AWS"
identifiers = [var.snowflake_iam_user_arn]
}
condition {
test = "StringEquals"
values = [some_integration.integration.external_id]
variable = "sts:ExternalId"
}
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我的工作流程应该是这样的:
编辑:我所说的“整合”是指这样的事情。创建集成后,就会输出一个 ID,然后我需要获取该 ID 并将其反馈给我最初创建的假设角色。每次我添加新的集成时都会发生这种情况。
我首先尝试创建两个 IAM 角色,一个用于管理集成创建,另一个用于管理集成本身。运行时没有出现循环引用错误;但是,我无法建立从存储到数据库的连接,因为创建和管理集成需要相同的 IAM 角色。
这就是我最终所做的(在我看来,仍然不适合接受的方式)。我创建了一个角色(有目标),例如:
resource "aws_iam_role" "happy_role" {
name = "happy-role"
assume_role_policy = data.aws_iam_policy_document.basic_policy.json
}
Run Code Online (Sandbox Code Playgroud)
并使用了基本的承担角色策略(无条件)。然后在下一次运行中,我申请了(没有目标)并且它起作用了。
归档时间: |
|
查看次数: |
2266 次 |
最近记录: |