我们可以使用复制命令使用访问密钥和秘密密钥将数据从 S3 加载到红移表中吗(不使用 IAM 角色)

Posted

技术标签:

【中文标题】我们可以使用复制命令使用访问密钥和秘密密钥将数据从 S3 加载到红移表中吗(不使用 IAM 角色)【英文标题】:Can we use copy command to load data into redshift table from S3 using access key and secret key (Without with IAM Role) 【发布时间】:2020-05-21 16:00:11 【问题描述】:

我需要将数据从 S3 加载到 Redshift 表中。 S3 中的文件采用 Parquet 格式。我没有 IAM 政策,但有 S3 访问密钥和秘密密钥。

注意事项:Redshift 和 S3 位于两个不同的 AWS 账户中,但这些账户位于同一区域。

我尝试过的:

copy abc from 's3://us-publish-prod/customer/r_cust_geo_funcl_terr_addr_elig/' 
credentials 'aws_access_key_id=XXXXXXXXX;aws_secret_access_key=XXXXXXXXXXX'
FORMAT AS PARQUET;

Error: Invalid operation: COPY from this file format only accepts IAM_ROLE credentials 

提前致谢。

【问题讨论】:

【参考方案1】:

根据COPY from columnar data formats - Amazon Redshift,似乎从 Parquet 格式加载数据需要使用 IAM 角色而不是 IAM 凭证:

COPY 命令凭证必须使用 AWS Identity and Access Management (IAM) 角色作为IAM_ROLE 参数或CREDENTIALS 参数的参数提供。

这意味着使用以下任一:

CREDENTIALS 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name'

因此,您需要使用 IAM 角色,即使文件存储在您自己的 AWS 账户中也是如此。

因此,您需要:

请您的管理员在具有 Amazon Redshift 的账户中创建一个 IAM 角色,并有权在包含源数据的 S3 存储桶上使用 GetObjectListBucket(在另一个账户中) 要求“其他”账户的管理员将 IAM 角色添加到存储文件的存储桶策略,以便 IAM 角色具有 GetObjectListBucket 权限(很可能与他们授予您的 IAM 用户的相同) 授权 Redshift 集群使用 IAM 角色 修改您的 COPY 命令以使用 IAM 角色而不是凭证

见:Authorizing Amazon Redshift to access other AWS services on your behalf

【讨论】:

以上是关于我们可以使用复制命令使用访问密钥和秘密密钥将数据从 S3 加载到红移表中吗(不使用 IAM 角色)的主要内容,如果未能解决你的问题,请参考以下文章

使用boto3,从整个文件夹或文件从一个s3存储桶复制到同一区域的另一个文件夹时,如何提供访问密钥和秘密访问密钥?

尝试加载 Redshift 样本,从 S3 复制时拒绝访问

将文件从 S3 存储桶复制到 Google Cloud Storage

如何创建新的亚马逊AWS访问密钥

允许搜寻器访问其他帐户中的Amazon S3存储桶

带/不带访问密钥和秘密访问密钥的 AWS Cognito InitiateAuth