With the following Terraform and aws provider
Terraform v1.1.8
on linux_amd64
Installed hashicorp/aws v4.10.0
And the following code
# S3 Bucket Policy
data "aws_iam_policy_document" "lambda-bucket" {
statement {
effect = "Allow"
actions = [
"s3:*",
]
principals {
type = "AWS"
identifiers = [
"arn:aws:iam::${var.account_ids.account_1}:role/Teamcity-fullaccess",
"arn:aws:iam::${var.account_ids.account_2}:role/teamcity-poweruser"
]
}
resources = [
aws_s3_bucket.lambda-bucket.arn,
"${aws_s3_bucket.lambda-bucket.arn}/*",
]
}
}
# Bucket
resource "aws_s3_bucket" "lambda-bucket" {
bucket = "lambdas-${terraform.workspace}"
tags = merge(var.default_tags, local.env_tag, {
Name = "lambdas-${terraform.workspace}"
})
}
resource "aws_s3_bucket_versioning" "lambda-bucket" {
bucket = aws_s3_bucket.lambda-bucket.bucket
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "lambda-bucket" {
bucket = aws_s3_bucket.lambda-bucket.bucket
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
resource "aws_s3_bucket_acl" "lambda-bucket" {
bucket = aws_s3_bucket.lambda-bucket.bucket
acl = "private"
}
resource "aws_s3_bucket_policy" "lambda-bucket" {
bucket = aws_s3_bucket.lambda-bucket.id
policy = data.aws_iam_policy_document.lambda-bucket.json
}
I keep getting a notifications saying objects have changed outside of Terraform, which is not true AFAIK
# aws_s3_bucket.lambda-bucket has changed
~ resource "aws_s3_bucket" "lambda-bucket" {
id = "lambdas-dev1"
~ policy = jsonencode(
~ {
~ Statement = [
~ {
~ Principal = {
~ AWS = [
- "arn:aws:iam::xxxx:role/Teamcity-fullaccess",
"arn:aws:iam::yyyy:role/teamcity-poweruser",
+ "arn:aws:iam::xxxx:role/Teamcity-fullaccess",
]
}
# (3 unchanged elements hidden)
},
]
# (1 unchanged element hidden)
}
)
tags = {
"Environment" = "dev1"
"Name" = "lambdas-dev1"
"Terraform" = "True"
}
# (11 unchanged attributes hidden)
# (3 unchanged blocks hidden)
}
If it worth something, here's my account ids vars
# Account IDs
account_ids = {
"account_1" = "xxxx",
"account_2" = "yyyy"
}
Do I miss something here?