Python Boto3不';不要使用配置文件中的密钥

Python Boto3不';不要使用配置文件中的密钥,python,linux,amazon-web-services,environment-variables,boto3,Python,Linux,Amazon Web Services,Environment Variables,Boto3,我希望Boto3从配置文件中获取访问权限和密钥,而不是硬编码。在我的Linux服务器上,我使用值/app/.AWS/CREDENTIALS设置了以下环境变量AWS\u-SHARED\u-CREDENTIALS\u-FILE。在/app/.aws/I中,我放置了一个名为credentials的文件,其中包含以下内容: [default] aws_access_key_id = abcd aws_secret_access_key = abcd 当然,我使用的是实际的关键点,而不是abcd Pyt

我希望Boto3从配置文件中获取访问权限和密钥,而不是硬编码。在我的Linux服务器上,我使用值
/app/.AWS/CREDENTIALS
设置了以下环境变量
AWS\u-SHARED\u-CREDENTIALS\u-FILE
。在/app/.aws/I中,我放置了一个名为credentials的文件,其中包含以下内容:

[default]
aws_access_key_id = abcd
aws_secret_access_key = abcd
当然,我使用的是实际的关键点,而不是abcd

Python:

import boto3
conn = boto3.client('s3',
                    region_name="eu-west-1",
                    endpoint_url="endpoint",
                    aws_access_key_id=aws_access_key_id,
                    aws_secret_access_key=aws_secret_access_key,
                    config=Config(signature_version="s3", s3={'addressing_style': 'path'}))
但是,它说,
名称“aws\u访问\u密钥\u id”未定义
。我怎样才能修好它?谢谢

编辑:


如果您已经创建了带有aws凭据的凭据文件夹,这意味着您在实例化客户端时不需要指定它们。以下方面应起作用:

import boto3

conn = boto3.client('s3',
                region_name="eu-west-1",
                endpoint_url="endpoint",
                config=Config(signature_version="s3", s3={'addressing_style': 'path'}))

如果您已经创建了带有aws凭据的凭据文件夹,这意味着您在实例化客户端时不需要指定它们。以下方面应起作用:

import boto3

conn = boto3.client('s3',
                region_name="eu-west-1",
                endpoint_url="endpoint",
                config=Config(signature_version="s3", s3={'addressing_style': 'path'}))

如果在EC2实例上运行应用程序,还可以为实例分配一个S3角色,并让boto承担该角色。防止您必须在实例中存储密钥

请参阅文档中的“承担角色提供者”部分:

链接到IAM角色:


如果在EC2实例上运行应用程序,还可以为实例分配一个S3角色,并让boto承担该角色。防止您必须在实例中存储密钥

请参阅文档中的“承担角色提供者”部分:

链接到IAM角色:


如果可以避免,请不要在服务器上存储长期有效的凭据。使用IAM角色通过临时凭据()授予权限。感谢您的建议,但我使用的S3服务不是由Amazon托管的。如果可以避免,请不要在服务器上存储长期使用的凭据。使用IAM角色通过临时凭据()授予权限。感谢您的建议,但我使用的S3服务不是由Amazon托管的。