具有多个凭据的 COPY 命令 JSONPaths

COPY Command JSONPaths w/ Multiple Credentials

有没有办法提供多个凭据或指定 Redshift COPYs3:// 路径以外的其他内容来加载 JSONPaths 文件?

我对不受我控制的存储桶具有只读访问权限,在此示例中为 someone_elses_bucket。 Redshift 的文档指出 JSON 的唯一 2 个选项是 'auto' 或 s3 路径:

COPY example
FROM 's3://someone_elses_bucket/data' 
CREDENTIALS 'aws_access_key_id=someone_elses_bucket_foo;aws_secret_access_key=someone_elses_bucket_bar' 
DATEFORMAT AS 'auto' 
TRUNCATECOLUMNS 
JSON 's3://my_bucket/redshift_json.json' GZIP;

因为我无权访问 someone_elses_bucket,所以我不得不将 JSONPaths 文件放入我的帐户中。但是我收到 S3ServiceException:Access Denied,Status 403,Error AccessDenied 错误。我存储桶中的文件对 public 打开。要么我做错了什么,要么 COPY 在另一个账户上使用我的 IAM 角色来限制我的访问。无论如何,我无法提供 JSONPaths 文件,因此无法摄取我的格式化数据。 auto 无效。

这是我的存储桶策略,允许访问我在“someone_elses_bucket”上的帐户(此示例中替换了帐号):

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "Example permissions",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::123456789:user/jerdak"
        },
        "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my_bucket"
        ]
    }
]
}

不,您不能在一个 COPY 命令中提供超过 1 个 AWS 凭证。无论您提供什么凭证,Redshift 都会使用它来访问 JSONPaths 文件和 S3 数据。

我能想到的选项:

  • 您是否通过 IAM 用户访问 someone_elses_bucket?如果是这样,请为该 IAM 用户提供对您的存储桶的读取访问权限,并在 COPY 命令中使用其凭证。
  • 运行 一个预处理步骤,用于将数据从 someone_elses_bucket 复制到您的数据,然后 COPY 使用您自己的 AWS 凭证。