我想创建一个S3存储桶列表,并将访问权限限制为一个用户。该用户只能访问该存储桶,而无权在AWS中执行其他操作。
我是这样创建列表的(存储桶名称在此示例中不是真实的):
// List bucket names as a variable
variable "s3_bucket_name" {
type = "list"
default = [
"myfirstbucket",
"mysecondbucket",
...
]
}
然后我创建一个用户。
// Create a user
resource "aws_iam_user" "aws_aim_users" {
count = "${length(var.s3_bucket_name)}"
name = "${var.s3_bucket_name[count.index]}"
path = "/"
}
然后我创建一个访问密钥。
// Create an access key
resource "aws_iam_access_key" "aws_iam_access_keys" {
count = "${length(var.s3_bucket_name)}"
user = "${var.s3_bucket_name[count.index]}"
// user = "${aws_iam_user.aws_aim_user.name}"
}
现在我创建一个用户策略 //添加用户政策
resource "aws_iam_user_policy" "aws_iam_user_policies" {
// user = "${aws_iam_user.aws_aim_user.name}"
count = "${length(var.s3_bucket_name)}"
name = "${var.s3_bucket_name[count.index]}"
user = "${var.s3_bucket_name[count.index]}"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:GetLifecycleConfiguration",
...
],
"Resource": "${var.s3_bucket_name[count.index].arn}}"
}
]
}
EOF
}
现在,我将创建带有附加用户的存储桶。
resource "aws_s3_bucket" "aws_s3_buckets" {
count = "${length(var.s3_bucket_name)}"
bucket = "${var.s3_bucket_name[count.index]}"
acl = "private"
policy = <<POLICY
{
"Id": "Policy1574607242703",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1574607238413",
"Action": [
"s3:PutObject"
],
"Effect": "Allow",
"Resource": {
"${var.s3_bucket_name[count.index].arn}}"
"${var.s3_bucket_name[count.index].arn}/*}"
},
"Principal": {
"AWS": "${var.s3_bucket_name[count.index]}"
}
}
]
}
POLICY
tags = {
Name = "${var.s3_bucket_name[count.index]}"
Environment = "live"
}
}
我遇到的问题是,它不喜欢使用变量在策略中设置ARN的位置。
我也相信我需要使用user.arn而不是bucket,尽管它们应该具有相同的名称。我在这里做什么错了?
答案 0 :(得分:0)
我认为我发现一些可以帮助您的事情。
存储桶策略资源选项将不会使用存储桶的arn,而是在寻找实际的存储桶名称,因此它看起来像是“ arn:aws:s3 ::: my-bucket”。
我还在您的设置中看到了一些额外的},这也可能会引起问题。
并且terraform的版本为0.12,从而无需使用{$“ resource.thing”},而将其替换为resource.thing。他们有一个有用的terraform 0.12upgrade
命令来运行,可以很好地升级文件。使用terrafor 0.12,他们调整了如何像您一样创建资源。 https://www.hashicorp.com/blog/hashicorp-terraform-0-12-preview-for-and-for-each/