通过 terraform 创建 IAM 用户并在 S3 存储桶中上传密钥和访问密钥

Posted

技术标签:

【中文标题】通过 terraform 创建 IAM 用户并在 S3 存储桶中上传密钥和访问密钥【英文标题】:Creating IAM user via terraform and upload the secret key and access key in S3 bucket 【发布时间】:2022-01-12 07:31:25 【问题描述】:

我编写了一个 terraform 代码来创建 IAM 用户,我的要求是将访问密钥和秘密密钥存储在 S3 存储桶中。我尝试通过 s3 cli 命令实现相同的功能,但没有太大帮助。任何建议将不胜感激

【问题讨论】:

到目前为止你尝试过什么?在不知道的情况下,我们只能猜测您还没有尝试过什么。 我尝试通过 s3 copy cli 命令,但没有太大帮助 您可以尝试两种方法,一种使用“local_exec”,另一种使用“aws_s3_bucket_object”资源。确保您了解其中的区别 更正我错了,密钥和访问密钥需要存储在文件中,然后使用本地 exec 和 aws s3 cp 命令上传或通过 terraform 路由并通过 aws_s3_bucket_object 上传 【参考方案1】:

我想指出,如果配置不正确,将令牌存储在 s3 中可能会很危险。

确保您了解 AWS 中的策略和 s3 中的访问控制的工作原理!。 https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html

除此之外,这就是我想出的:

# The user to which we will grant access to s3
resource "aws_iam_user" "user" 
  name          = "s3-user"
  path          = "/"


# Create the access key
resource "aws_iam_access_key" "key" 
  user = aws_iam_user.user.name


# Create the bucket for storing tokens
resource "aws_s3_bucket" "token" 
  bucket = "my_token_bucket"
  acl    = "private"


# Create the object inside the token bucket
resource "aws_s3_bucket_object" "tokens" 
  bucket                 = aws_s3_bucket.token.id
  key                    = "keys.txt"
  server_side_encryption = "AES256"
  content_type = "text/plain"
  content = <<EOF
access_id: $aws_iam_access_key.key.id
access_secret: $aws_iam_access_key.key.secret
EOF

我还没有测试过。

【讨论】:

我已经使用这种方式来实现我的要求,并稍作改动。这绝对能更好地满足我的要求。【参考方案2】:

你可以使用 loca-exec 来执行命令:

resource "null_resource" "s3_copy" 
  provisioner "local-exec" 
    command = "aws s3 cp keys.txt s3://bucket/keys "
  

【讨论】:

以上是关于通过 terraform 创建 IAM 用户并在 S3 存储桶中上传密钥和访问密钥的主要内容,如果未能解决你的问题,请参考以下文章

GCP 为每个项目和 Terraform 预定义 IAM 角色

如何使用 terraform 创建具有访问权限和密钥的 AWS IAM 服务账户

使用 Terraform 创建 GCP 自定义 IAM 角色

terraform:有没有办法动态创建 iam 策略语句?

使用 terraform 创建 IAM 角色并将其附加到 EC2

如何使用 Terraform 创建没有代入角色策略的 AWS IAM 角色?