Terraform-如何取消通过控制台进行编辑的功能?

Terraform-如何取消通过控制台进行编辑的功能?,terraform,Terraform,我在terraform文档中查找了这个问题的解决方案,但没有找到任何东西。我有一个问题,我的AWS帐户有1000个EC2、SQS队列、SNS主题、dynamo表格和大量其他东西。有些东西是由terraform管理的,有些则不是。我希望能够使给定的地形资源无法通过控制台进行编辑。理想凝结的简单示例如下: resource "aws_sns_topic" "my_topic" { name = "my_topic_name" is_console_configurable = false }

我在terraform文档中查找了这个问题的解决方案,但没有找到任何东西。我有一个问题,我的AWS帐户有1000个EC2、SQS队列、SNS主题、dynamo表格和大量其他东西。有些东西是由terraform管理的,有些则不是。我希望能够使给定的地形资源无法通过控制台进行编辑。理想凝结的简单示例如下:

resource "aws_sns_topic" "my_topic" {
  name = "my_topic_name"
  is_console_configurable = false
}
这样做可能吗?或者,解决这个问题的最佳方式是什么


提前感谢

Terraform本身无法直接控制AWS控制台允许或不允许的内容

我认为,为了获得这样的效果,您需要使用非常精细的IAM策略,以便您的团队用于登录AWS控制台的凭据无法对Terraform管理的对象进行更改。然后,您将使用不同的凭据来运行Terraform,Terraform具有必要的访问权限

不过,以如此精细的细节协调政策将是复杂的。我认为与您在示例中展示的内容最接近的是一个包含“Deny”语句的IAM策略,然后您将其与所有与具有AWS控制台访问权限的用户相关联的主体相关联

resource "aws_sns_topic" "my_topic" {
  name = "my_topic_name"
}

resource "aws_iam_policy" "disable_sns_console" {
  name = "SNS Topic Disable Console"
  # ...

  policy = jsonencode({
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Deny",
        "Resource": aws_sns_topic.my_topic.arn,
      },
    ]
  })
}
您需要找到一些合适的IAM用户、角色或组对象来附加此策略,并确保用于控制台访问的每个凭据都与授予此策略的任何对象相关联


这种“默认允许,拒绝特定对象”策略很棘手,因为如果设置不正确,它将“失败打开”。但是,如果您的目标更多的是激发良好的行为,而不是实现一个绝对正确的安全层,那么这种妥协可能是合理的。

Terraform本身无法直接控制AWS控制台允许或不允许的内容

我认为,为了获得这样的效果,您需要使用非常精细的IAM策略,以便您的团队用于登录AWS控制台的凭据无法对Terraform管理的对象进行更改。然后,您将使用不同的凭据来运行Terraform,Terraform具有必要的访问权限

不过,以如此精细的细节协调政策将是复杂的。我认为与您在示例中展示的内容最接近的是一个包含“Deny”语句的IAM策略,然后您将其与所有与具有AWS控制台访问权限的用户相关联的主体相关联

resource "aws_sns_topic" "my_topic" {
  name = "my_topic_name"
}

resource "aws_iam_policy" "disable_sns_console" {
  name = "SNS Topic Disable Console"
  # ...

  policy = jsonencode({
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Deny",
        "Resource": aws_sns_topic.my_topic.arn,
      },
    ]
  })
}
您需要找到一些合适的IAM用户、角色或组对象来附加此策略,并确保用于控制台访问的每个凭据都与授予此策略的任何对象相关联

这种“默认允许,拒绝特定对象”策略很棘手,因为如果设置不正确,它将“失败打开”。然而,如果您的目标更多的是激发良好的行为,而不是实现一个绝对正确的安全层,那么这种妥协也许是合理的