【问题标题】:How to attach existing privacy policy to IAM role via Terraform如何通过 Terraform 将现有隐私政策附加到 IAM 角色
【发布时间】:2021-10-21 05:32:13
【问题描述】:

我需要通过 Terraform 创建一个新的 IAM 角色。该角色应该有一个在 AWS (AmazonSSMFullAccess) 中预定义的策略,但我找不到任何地方应该如何添加已经创建的策略。 代码模板应如下所示:

    resource "aws_iam_role" "role" {
      name                 = var.name
      assume_role_policy   = var.assume_role_policy
      max_session_duration = var.max_session_duration
      description          = var.description
    }
    
    resource "aws_iam_role_policy_attachment" "attach_policy" {
      policy_arn = var.policy_to_attach
      role       = aws_iam_role.role.name
    }

【问题讨论】:

    标签: amazon-web-services terraform amazon-iam


    【解决方案1】:

    对于现有的 aws 策略,您可以直接从控制台复制其 arn。然后只需将 arn 粘贴为 policy_arn 参数。在你的情况下:

    resource "aws_iam_role_policy_attachment" "attach_policy" {
        policy_arn = "arn:aws:iam::aws:policy/AmazonSSMFullAccess"
        role       = aws_iam_role.role.name
    }
    

    为了更安全,您可以先使用a datasource 导入策略:

    data "aws_iam_policy" "example" {
        arn = "arn:aws:iam::aws:policy/AmazonSSMFullAccess"
    }
    resource "aws_iam_role_policy_attachment" "attach_policy" {
        policy_arn = data.aws_iam_policy.example.arn
        role       = aws_iam_role.role.name
    }
    

    编辑:数据源也可以通过名称召唤:

    data "aws_iam_policy" "test" {
      name = "AmazonSSMFullAccess"
    }
    

    正如 cmets 中所说,数据源将有助于在 terraform 尝试执行其他任何操作之前检查您是否可以找到并阅读给定的策略。

    【讨论】:

    • 当您通过 ARN 引用该数据源然后将输出 ARN 用于资源时,该数据源有何帮助?
    • 首先,如果您愿意,可以使用策略名称(将 name 传递给数据源,而不是 arn)。但更重要的是,这将使 terraform 检查策略是否确实存在,并且可以找到。如果您在名称中打错字、策略不再存在或您无权访问它,那么在此早期阶段让 terraform 失败通常会很有帮助。作为一般经验法则:为您打算使用的每个外部资源使用数据源,无论它是一个帐户、一个策略......等等
    猜你喜欢
    • 2018-01-11
    • 2017-05-17
    • 2021-03-01
    • 2020-10-31
    • 1970-01-01
    • 2021-11-07
    • 2021-04-29
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多