php - Amazon Athena“打开 Hive 拆分时出错”访问被拒绝错误
问题描述
我正在尝试从 PHP 代码在 Amazon Athena 中运行查询:
$client = Aws\Athena\AthenaClient::factory(array(
'version' => 'latest',
'region' => 'us-east-1',
'credentials' => array(
'key' => '<KEY>',
'secret' => '<SECRET>'
)
));
$result1 = $client->StartQueryExecution(array(
'QueryExecutionContext' => array('Database' => 'default'),
'QueryString' => "select * from logs where date between TIMESTAMP '2020-02-27 00:00:00' and TIMESTAMP '2020-02-27 23:59:59' limit 100",
'ResultConfiguration' => array(
'EncryptionConfiguration' => array('EncryptionOption'=> 'SSE_S3'),
'OutputLocation' => 's3://bucket_name/temp'
)
));
并得到这个错误:
打开 Hive 拆分 s3:///data-mining/logs/2019/07/12/07/Log-6-2019-07-12-07-35-01-a1c6d0a9-27e5-458b-b72a-8942a6d2b261.parquet 时出错(偏移量 = 0,长度 = 756977):com.amazonaws.services.s3.model.AmazonS3Exception:访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求 ID:4A00D465F919D8AB;S3 扩展请求 ID: ...),S3 扩展请求 ID:...(路径:s3://<bucket_name>/data-mining/logs/2019/07/12/07/Log-6-2019-07-12-07- 35-01-a1c6d0a9-27e5-458b-b72a-8942a6d2b261.parquet
我可以确认这些:
- 来自 Athena 控制台(使用 root 用户)的相同查询可以毫无问题地运行
- 我从具有权限的用户执行查询:
AmazonAthenaFullAccess
和AmazonS3FullAccess
解决方案
确保您使用的 IAM 策略与执行查询的用户关联,该查询允许对与 parquet 文件关联的 KMS 密钥进行操作。即使存储桶可能正在使用 SSE_S3,文件也可能已经使用 KMS 加密。
像这样的政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:DescribeKey",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:"region":"account":key/"keyid"
]
}
]
}
推荐阅读
- java - 如何用间谍替换现有的bean
- php - 调用未定义函数 sqlsrv_connect - 驱动程序已安装在 php7.2 - Wamp 3.1.7
- django - 无法将 smtp 详细信息的 .env 文件连接到 django
- javascript - window.postMessage 在角度 Onint 函数中多次触发
- batch-file - 使用批处理文件从文件末尾的文本文件行中搜索字符串
- python - 如何在django中过滤今天和昨天日期的订单?
- android - 带有 Volley 的 HTTP Post 获取 NullPointerException:尝试从字段 'byte[] cablb' 读取
- html - 优先选择更具体的选择
- docker - Kubernetes 访问硬件(设备插件?)
- wordpress - 在特定页面上禁用 Elementor