S3 复制命令给出错误 + 如何从复制命令中删除密钥

Posted

技术标签:

【中文标题】S3 复制命令给出错误 + 如何从复制命令中删除密钥【英文标题】:S3 copy command gives error + how to take away secret keys from copy command 【发布时间】:2015-12-15 13:10:19 【问题描述】:

为什么我的 S3 复制命令到 redshift 会出现此错误?这是复制命令:

COPY dbtablename from 's3://rcname/foldername/file.csv CREDENTIALS 'aws_access_key_id=xxxxxxx;aws_secret_access_key=yyyyyyy/zzzz' CSV IGNOREHEADER 1;

我的错误是:

psycopg2.ProgrammingError: syntax error at or near "aws_access_key_id"
LINE 1: ...rcname/foldername/file.csv CREDENTIALS 'aws_access...

我有第二个问题:如何从我的复制命令中删除密钥。我正在使用 python 并且与 S3 的关系我使用 Boto3 和 AWS CLI Keyring 来加密我的密钥,所以我不必将密钥放在我的代码中

现在我想对复制命令 (redshift) 做同样的事情。但我找不到一个好的选择。有人知道怎么做吗?

【问题讨论】:

【参考方案1】:

如果您已经设置了 aws cli 并按照http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html 中的步骤操作,那么您的主目录中将有两个文件已经拥有凭据:

~/.aws/config

~/.aws/credentials

您可以在 python 中使用 boto 从这些文件中访问 aws_access_key_idaws_secret_access_key

具体来说,

import boto
from boto import ec2
ec2 = boto.ec2.connect_to_region('us-west-2', profile_name='default')

access_key = ec2.gs_access_key_id
secret_key = ec2.gs_secret_access_key

现在可以直接在代码中插入这些键:

query = '''
COPY dbtablename 
from 's3://rcname/foldername/file.csv' 
CREDENTIALS 
'aws_access_key_id=access_key;aws_secret_access_key=secret_key'
CSV
IGNOREHEADER 1;
'''.format(access_key=access_key,secret_key=secret_key)

请参阅https://blogs.aws.amazon.com/security/post/Tx3D6U6WSFGOK2H/A-New-and-Standardized-Way-to-Manage-Credentials-in-the-AWS-SDKs,了解如何使用其他语言执行此操作的示例。

【讨论】:

它有效。但我仍然收到错误“psycopg2.ProgrammingError: syntax error at or near "aws_access_key_id" LINE 1: ...rcname/foldername/file.csv CREDENTIALS 'aws_access..." 错误是一样的,只是现在在第 5 行,因为我之前在 1 行上编写了查询:psycopg2.ProgrammingError: syntax error at or near "aws_access_key_id" LINE 5: 'aws_access_key_id=xxxxxx;aws_secret_access_ke ... ^ 我们都缺少围绕 s3 路径的引号。我编辑了它;立即尝试。

以上是关于S3 复制命令给出错误 + 如何从复制命令中删除密钥的主要内容,如果未能解决你的问题,请参考以下文章

S3cmd mv 命令在复制后不删除源文件

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

S3 中复制命令中的访问凭据错误

将文件从 GCS 复制到 AWS S3 时如何设置 acl?

来自 S3 的 Redshift 复制命令有效,但没有上传数据

将 csv 文件从 s3 复制到 redshift 的问题