Terraform提供者local-exec - aws cli

3
尝试使用AWS cli在s3存储桶上执行put-public-access-block操作,但遇到问题无法解决。
以下是我的代码:
resource "aws_s3_bucket" "test" {
  bucket = "blah-blah"

  versioning {
    enabled = false
  }

  server_side_encryption_configuration {
    rule {
        apply_server_side_encryption_by_default {
            sse_algorithm = "AES256"
        }
    }
  }

  tags {
    Name = "blah-blah"
  }
}

resource "null_resource" "s3publicpol" {
  provisioner "local-exec" {
    command = "aws s3api put-public-access-block --bucket blah-blah --public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
  }   
}

当我从terraform运行时,我收到以下消息:

调用PutPublicAccessBlock操作时发生错误(AccessDenied):拒绝访问

但是当我尝试运行AWS cli并自己运行上面的命令时,它完美地运行,所以我在AWS中具有权限。

在Terraform本地环境中是否需要执行某些操作?

谢谢 Stephen


你正在使用哪个账户运行terraform?是你自己的账户还是其他账户?如果是其他账户,它是否具有正确的权限? - Jamie
我正在从一个EC2实例上运行这个程序,使用一个角色来假定另一个账户的管理员访问权限,除非与此有关?但是我已经手动切换了角色,并通过管理界面完成了这个操作,AWS的提供商在另一个账户中指定了该角色 - 对于导致这个问题的原因还不太清楚。 - StevieHyperB
你的代码在我使用命令行运行Terraform时有效。我建议你查看一下"假设角色"这个部分。 - kenlukas
谢谢你的关注,我在想是否有一些不明显的问题,比如一个预设的ACL阻止了跨账户访问之类的情况 - 我会回去检查我的权限,至少我知道这应该是可行的! - StevieHyperB
1个回答

0
aws_s3_bucket_public_access_block 资源现在在 Terraform 中原生支持:
resource "aws_s3_bucket_public_access_block" "example" {
  bucket = aws_s3_bucket.example.id

  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接