如何在 terraform 语句中启用 s3 复制存储桶权限
Posted
技术标签:
【中文标题】如何在 terraform 语句中启用 s3 复制存储桶权限【英文标题】:How to enable s3 Copy Bucket Permissions in Terraform statement 【发布时间】:2022-01-07 11:23:58 【问题描述】:我的目标是将数据从一组 s3 存储桶复制到主日志记录帐户存储桶中。每次我尝试执行:
aws s3 cp s3://sub-account-cloudtrail s3://master-acccount-cloudtrail --profile=admin;
我明白了
(AccessDenied) when calling the CopyObject operation: Access Denied`
我看过这篇文章: How to fix AccessDenied calling CopyObject
我正在尝试将存储桶权限添加到 terraform data aws_iam_policy_document
。声明是这样写的
data aws_iam_policy_document s3
version = "2012-10-17"
statement
sid = "CopyOobjectPermissions"
effect = "Allow"
principals
type = "AWS"
identifiers = ["arn:aws:iam::$data.aws_caller_identity.current.account_id:role/ops-mgmt-admin"]
actions = ["s3:GetObject","s3:PutObject","s3:PutObjectAcl"]
resources = ["$aws_s3_bucket.nfcisbenchmark_cloudtrail.arn/*"]
statement
sid = "CopyBucketPermissions"
actions = ["s3:ListBucket"]
effect = "Allow"
principals
type = "AWS"
identifiers = ["arn:aws:iam::$data.aws_caller_identity.current.account_id:role/ops-mgmt-admin"]
resources = ["$aws_s3_bucket.nfcisbenchmark_cloudtrail.arn/*"]
我的目标是限制从子账户到主账户的角色的权限。我的具体问题是需要添加哪些权限才能启用复制权限?
预期: Terraform 计划运行成功
实际:
│ Error: Error putting S3 policy: MalformedPolicy: Action does not apply to any resource(s) in statement
对此的任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:有两点要提:
-
在您的第二条语句中,资源错误,这就是您收到
MalformedPolicy
错误的原因。应该是:
resources = [aws_s3_bucket.nfcisbenchmark_cloudtrail.arn]
-
小心
identifier
。在这一点上,我不确定您的存储桶是否在不同的帐户中。如果是,则标识符中的account_id
应引用源帐户。 data.aws_caller_identity.current.account_id
返回 Terraform 进行身份验证的帐户 ID,通常是您正在部署资源的帐户(目标帐户)。如果您不进行跨帐户复制,那么应该没问题。
此外,在跨账户访问的情况下,ops-mgmt-admin
角色应该应用一个策略,该策略允许访问获取/列出/上传对象到 S3 存储桶。
【讨论】:
以上是关于如何在 terraform 语句中启用 s3 复制存储桶权限的主要内容,如果未能解决你的问题,请参考以下文章
启用 S3 存储桶对象级别事件到 CloudTrail 跟踪并将对象级别事件转发到 terraform 中的 CloudWatch 日志组?
需要通过 Terraform 在 AWS RDS 中启用备份复制功能
如何在 Terraform 变量中连接 S3 存储桶名称并将其传递给主 tf 文件