ala*_*ner 6 amazon-ec2 amazon-web-services terraform
我们有许多 IAM 用户,他们都使用 Terraform 在 EC2 上创建自助服务基础设施。用户不一定为其实例设置密钥,因此很难将实例与特定用户绑定。我意识到我们可以通过 CloudTrail 深入了解哪些用户正在创建实例,但使用当前 IAM 用户名标记实例似乎更简单。
问题是 Terraform 似乎没有公开这一点 - 我可以使用aws_caller_identity
或aws_canonical_user_id
,但它们似乎都返回组织帐户,而不是特定的 IAM 用户名。Terraform 中是否有数据源会返回创建实例的 IAM 用户?
它看起来实际上并没有调用STS GetCallerId 端点,该端点能够提供您需要的信息 - 特别是运行命令的用户的 UserId 和 Arn。aws_caller_identity
相反,它采用更简单的选项,只使用accountid
AWS 客户端已经定义的并简单地返回它。
所以你有几个选择。您可以提出拉取请求,让aws_caller_identity
数据源实际调用 STS GetCallerId 端点,或者您可以使用本地配置程序来标记您的资源。
显然,如果人们编写 Terraform 来直接使用 Terraform 提供的原始资源,那么除了让某些东西杀死任何未标记的东西之外,您无法真正强制执行此操作,但这仍然留下了人们使用其他人的 UserId 或 Arn 标记事物的问题。
相反,如果您有一堆模块,然后人们可以使用这些模块,那么您可以在创建 EC2 实例的模块中做一些丑陋的事情:
resource "aws_instance" "instance" {
ami = "ami-123456"
instance_type = "t2.micro"
tags {
Name = "HelloWorld"
}
lifecycle {
ignore_changes = [ "tags.Owner" ]
}
provisioner "local-exec" {
command = <<EOF
owner=`aws sts get-caller-identity --output text --query 'Arn' | cut -d"/" -f2`
aws ec2 create-tags --resources ${self.id} --tags Key=Owner,Value=$${owner}
EOF
}
}
Run Code Online (Sandbox Code Playgroud)
上面的 Terraform 将照常创建一个 EC2 实例,但随后忽略“Owner”标签。创建实例后,它将运行一个本地 shell 脚本,获取用户的 IAM 账户名称/角色,然后使用该值为实例创建一个“所有者”标签。
归档时间: |
|
查看次数: |
1695 次 |
最近记录: |