我可以创建一个阻止所有非加密上传但允许 Athena 数据库引擎写入非加密文件的 s3 存储桶策略吗?

Can I create an s3 bucket policy that blocks all non-encrypted uploads, but allows Athena DB engine to write a non-encrypted file?

我有一个阻止所有未加密上传的 s3 存储桶策略。 Athena 需要使用这个桶。当使用 athena 的服务是 运行 时,一切正常。 但是,当 Athena DB 初始化时,它会在 s3 存储桶中创建并删除一个文件。 像这样的东西:18b21651-f514-481a-aa62-ef26db73c6c0.txt 和数据库的描述。

由于此文本文件未加密,我收到拒绝访问错误。但是我无法控制雅典娜加密这个文件

我正在寻找允许以未加密方式上传此文件但所有其他文件都必须加密的政策。

我不确定 principle 用于此策略,因为我无法使用调用 Athena 的服务正在使用的 IAM_ROLE。什么是'native'雅典娜role/user?

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "deny unencrypted object upload",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::bucketname/*",
            "Condition": {
                "StringNotEquals": {
                    "s3:x-amz-server-side-encryption": "aws:kms"
                }
            }
        }
    ]
}

观察到错误:

aws_athena_database.main: reason: Access denied when writing to location: s3://bucketname/36dc88f0-a7b7-4956-95c9-062a8ac46d5f.txt

使用 NotPrincipal 键使 Athena 从您的 "Deny" 政策中豁免:

{
    "Sid": "deny unencrypted object upload",
    "Effect": "Deny",
    "Principal": "*",
    "NotPrincipal": "athena.amazonaws.com",
    "Action": "s3:PutObject",
    "Resource": "arn:aws:s3:::bucketname/*",
    "Condition": {
        "StringNotEquals": {
            "s3:x-amz-server-side-encryption": "aws:kms"
        }
    }
}