如何安全地从aws_iam_policy_attachment升级到aws_ian_role_policy_achmen



资源aws_iam_policy_attachment具有以下警告

警告:aws_iam_policy_attachment资源创建IAM策略的独占附件。在整个AWS帐户中,单个策略所附加的所有用户/角色/组都必须由单个aws_iam_policy_attachment资源声明。这意味着,即使是通过任何其他机制(包括其他Terraform资源(附加了策略的任何用户/角色/组,也会被该资源吊销该附加策略。请考虑aws_iam_role_policy_attachmentaws_iam_user_policy_attachmentaws_iam_group_policy_attachment。这些资源不会强制执行IAM策略的独占附件。

我们从更改了一些代码

resource "aws_iam_policy_attachment" "logs" {
name       = "${var.function_name}-logs"
roles      = [aws_iam_role.lambda.name]
policy_arn = aws_iam_policy.logs[0].arn
}

resource "aws_iam_role_policy_attachment" "logs" {
name       = "${var.function_name}-logs"
role       = aws_iam_role.lambda.name
policy_arn = aws_iam_policy.logs[0].arn
}

上面的更改很简单,但现在terraform想要删除aws_iam_policy_attachment资源并添加aws_iam_role_policy_attachment。以前,当我们使用共享托管IAM资源为模块应用地形时,它将策略从30个不同的IAM角色中分离出来,迫使我们通过查找并重新应用地形模块来重新附加它们。

使用危险性较低的资源aws_iam_role_policy_attachment的安全策略是什么?

我们目前的策略

  1. 将托管IAM策略重新创建为内联策略并添加到角色

  2. 使用AWS控制台手动删除托管策略

    • 使用此CLI命令可能更容易。它只是出现在控制台中。

      aws iam detach-role-policy 
      --role-name my-role-name 
      --policy-arn arn:aws:iam:1234567890:role/logs
      
  3. 从状态中删除坏资源

    • 可能没有必要,因为它已在上一步中删除
    • terraform state rm aws_iam_policy_attachment.logs
  4. 目标应用新的附件

    • target apply -target aws_iam_role_policy_attachment.logs
  5. 卫生检查

    • terraform plan
  6. 从第一步中删除内联策略

关于状态操作的注意事项

每当我要做州手术时,我都会把州变成一个地方州。做我所有的手术。然后运行一个计划,以确保我的更改没有造成任何差异。然后将状态返回到您的propper后端。本文解释了如何做到这一点:

https://medium.com/faun/cleaning-up-a-terraform-state-file-the-right-way-ab509f6e47f3

但至少要做到:terraform state pull > backup.tfstate

任务的状态命令

首先,让地形不再像以前那样追踪terraform state rm aws_iam_policy_attachment.logs

然后只需导入新的关联资源:

terraform import aws_iam_role_policy_attachment.logs lambda-role/arn:aws:iam::xxxxxxxxxxxx:policy/policy-name

每个文档:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment

做一个terraform plan,你应该看不到任何差异。

结论

这允许您不接触实际的AWS配置。你不会在一分钟内删除任何角色或权限。如果你提前备份你的状态,它是安全和可验证的。

相关内容

  • 没有找到相关文章

最新更新