以下已解决的问题允许我在Redshift中卸载,复制,运行查询,创建表格等:Redshift create table not working via Python和Unload to S3 with Python using IAM Role credentials。请注意,即使我通过Redshift成功写入和复制S3,也不依赖于Boto3。
我希望能够在Python(来自cwd)中动态地将文件上传到S3 - 但是我似乎没有找到使用iam_role 'arn:aws:iam:<aws-account-id>:role/<role_name>
而不是如何使用Unable to locate credentials
的文档或示例根据{{3}}访问和密钥。
非常感谢任何帮助。这就是我现在所拥有的,它会引发错误import boto3
#Input parameters for s3 buckets and s3 credentials
bucket_name = ''
bucket_key = ''
filename_for_csv = 'output.csv'
#Moving file to S3
s3 = boto3.resource('s3')
data = open(filename_for_csv, 'rb')
s3.Bucket(bucket_name).put_object(Key=bucket_key, Body=data, ServerSideEncryption='AES256')
:
new_array = array[:, 0:2, 0:2]
new_array.shape
(1, 2, 2)
答案 0 :(得分:0)
如果从EC2实例运行此脚本,请将IAM角色附加到实例。 IAM角色应包含以下策略(除了您已有的策略)。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Action": ["s3:PutObject"],
"Resource": "arn:aws:s3:::examplebucket/*"
}
]
}
如果您未在EC2实例中运行此脚本,则需要使用访问密钥和密钥。
答案 1 :(得分:0)
您将需要AWS IAM访问密钥。
问题在于您需要访问密钥才能调用STS(安全令牌服务),然后可以使用您的角色ARN处理AssumeRole(),然后生成新的临时访问密钥。
但是,如果您有访问密钥,则不需要使用AssumeRole()。
如果您的计算机位于AWS之外,则需要使用访问密钥或Cognito等身份验证/授权服务。
IAM角色专为服务而设计,例如Redshift,EC2等,它们有权使用您的角色ARN呼叫STS以生成新的临时访问密钥。角色不是为在AWS之外调用而设计的(有一些例外,例如Cognito)。
[新评论后编辑]
您有几种解决方案: