You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将Parquet格式数据从S3复制到Redshift的问题求助

Redshift COPY Parquet文件时出现Spectrum 403 AccessDenied错误

问题场景

尝试将Parquet格式数据从S3复制到Redshift,Unload步骤执行正常,但Copy步骤触发权限错误。相关执行代码如下:

Unload 执行代码

-- Part 1: Unload
SET search_path TO my_schema_from;

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table 
(
  column1   VARCHAR
);

INSERT INTO my_table (column1) VALUES ('abc');

UNLOAD ('SELECT * FROM my_table') TO 's3://my_bucket/my_table_' 
CREDENTIALS 'aws_iam_role=arn:aws:iam::my_role' 
FORMAT AS PARQUET
ALLOWOVERWRITE
MANIFEST;

Copy 执行代码

-- Part 2: Copy
SET search_path TO my_schema_to;

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table 
(
  column1   VARCHAR
);

COPY my_table 
FROM 's3://my_bucket/my_table_manifest' 
CREDENTIALS 'aws_iam_role=arn:aws:iam::my_role' 
FORMAT AS PARQUET
MANIFEST;

错误信息

-----------------------------------------------
error:  Spectrum Scan Error
code:      15007
context:   Forbidden: HTTP response error code: 403 Message: AccessDenied Access Denied

已知前置信息

  • IAM角色已关联AmazonS3FullAccess权限
  • 使用CSV格式时,S3与Redshift间的Unload/Copy流程可正常执行
  • 已尝试为IAM角色添加Glue相关权限,问题未解决
  • 需保留S3上的Parquet格式文件供其他流程使用

解决方案

1. 检查S3存储桶策略

即使IAM角色拥有S3全权限,存储桶的桶策略可能限制了Redshift的访问权限。确保桶策略明确允许关联的IAM角色访问存储桶及对象:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/my_role"
      },
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::my_bucket",
        "arn:aws:s3:::my_bucket/*"
      ]
    }
  ]
}

2. 确认IAM角色的信任关系

确保IAM角色的信任策略允许Redshift服务承担该角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "redshift.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

3. 修正COPY命令中的Manifest文件路径

Unload生成的Manifest文件默认命名规则为[前缀]_000.manifest(比如my_table_000.manifest),而非my_table_manifest。登录S3控制台确认Manifest文件的准确路径后,修正COPY命令:

COPY my_table 
FROM 's3://my_bucket/my_table_000.manifest' 
CREDENTIALS 'aws_iam_role=arn:aws:iam::my_role' 
FORMAT AS PARQUET
MANIFEST;

4. 检查S3存储桶的对象锁定/版本控制

如果S3桶启用了对象锁定或版本控制,可能会干扰Redshift读取Parquet文件的权限,可临时关闭该功能测试是否解决问题。

5. 验证Parquet文件的所有者权限

若Unload生成的Parquet文件由其他AWS账户或角色创建,需确保当前IAM角色拥有读取这些对象的权限。可通过S3控制台查看文件所有者,确认权限配置正确。


内容的提问来源于stack exchange,提问作者Sam Gilbert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:10:59