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

时间:2019-09-17 22:57:23

标签: amazon-s3 encryption amazon-iam amazon-athena

我有一个s3存储桶策略,该策略可阻止所有未加密的上传。 雅典娜需要使用这个存储桶。并且,当使用雅典娜的服务正在运行时,一切都将正常运行。 但是,初始化Athena DB时,它将在s3存储桶中创建文件并将其删除。 像这样的内容:18b21651-f514-481a-aa62-ef26db73c6c0.txt,其中包含DB的描述。

由于该文本文件未加密,因此出现访问拒绝错误。但是我无法控制Athena对该文件进行加密。

我正在寻找一项政策,允许该文件未经加密地上传,但是所有其他文件都必须加密。

由于无法使用调用Athena的服务正在使用的IAM_ROLE,因此我不确定该策略使用什么principle。什么是“本机”雅典娜角色/用户?

{
    "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

1 个答案:

答案 0 :(得分:2)

使用NotPrincipal键将雅典娜从您的“拒绝”政策中免除:

{
    "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"
        }
    }
}