Boto3错误:botocore.exceptions.NoCredentialsError:无法找到凭据

问题描述 投票:60回答:9

当我只是运行以下代码时,我总是得到这个错误。

s3 = boto3.resource('s3')
    bucket_name = "python-sdk-sample-%s" % uuid.uuid4()
    print("Creating new bucket with name:", bucket_name)
    s3.create_bucket(Bucket=bucket_name)

我保存了我的凭据文件

C:\Users\myname\.aws\credentials,Boto应该从那里读取我的凭据。

我的设置错了吗?

这是boto3.set_stream_logger('botocore', level='DEBUG')的输出。

2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Skipping environment variable credential check because profile name was explicitly set.
2015-10-24 14:22:28,761 botocore.credentials [DEBUG] Looking for credentials via: env
2015-10-24 14:22:28,773 botocore.credentials [DEBUG] Looking for credentials via: shared-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: config-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: ec2-credentials-file
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: boto-config
2015-10-24 14:22:28,774 botocore.credentials [DEBUG] Looking for credentials via: iam-role
boto boto3
9个回答
72
投票

尝试手动指定键

    s3 = boto3.resource('s3',
         aws_access_key_id=ACCESS_ID,
         aws_secret_access_key= ACCESS_KEY)

为了安全起见,请确保您不直接在代码中包含ACCESS_ID和ACCESS_KEY。考虑使用环境配置并按照@Tiger_Mike的建议将它们注入代码中。

对于Prod环境,请考虑使用旋转访问键:https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey


0
投票

我也有同样的问题,可以通过在主目录中创建配置和凭证文件来解决。下面显示了我为解决此问题所采取的步骤。

创建配置文件:

touch ~/.aws/config

在那个文件中我进入了该地区

[default]
region = us-west-2

然后创建凭证文件:

touch ~/.aws/credentials

然后输入您的凭据

[Profile1]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX 
aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

设置完所有这些,然后我的python文件连接桶。运行此文件将列出所有内容。

import boto3
import os

os.environ['AWS_PROFILE'] = "Profile1"
os.environ['AWS_DEFAULT_REGION'] = "us-west-2"

s3 = boto3.client('s3', region_name='us-west-2')
print("[INFO:] Connecting to cloud")

# Retrieves all regions/endpoints that work with S3

response = s3.list_buckets()
print('Regions:', response)

您还可以参考以下链接:


40
投票

我有同样的问题,发现我的~/.aws/credentials文件的格式是错误的。

它使用包含以下内容的文件:

[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY

请注意,配置文件名称必须为“[default]”。一些官方文档引用了名为“[credentials]”的配置文件,该配置文件对我不起作用。


21
投票

如果您正在寻找替代方法,请尝试使用AmazonCLI添加您的凭据

从终端类型: -

aws configure

然后填写您的密钥和区域。


10
投票

确保Unix中的〜/ .aws / credentials文件如下所示:

[MyProfile1]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

[MyProfile2]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

你的Python脚本应该是这样的,它会起作用:

from __future__ import print_function
import boto3
import os

os.environ['AWS_PROFILE'] = "MyProfile1"
os.environ['AWS_DEFAULT_REGION'] = "us-east-1"

ec2 = boto3.client('ec2')

# Retrieves all regions/endpoints that work with EC2
response = ec2.describe_regions()
print('Regions:', response['Regions'])

资料来源:https://boto3.readthedocs.io/en/latest/guide/configuration.html#interactive-configuration


4
投票

这些说明适用于具有AWS单个用户配置文件的Windows计算机。确保您的~/.aws/credentials文件看起来像这样

[profile_name]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey

我必须将AWS_DEFAULT_PROFILEenvironment变量设置为您的凭据中找到的profile_name。 然后我的python能够连接。例如来自here

import boto3

# Let's use Amazon S3
s3 = boto3.resource('s3')

# Print out bucket names
for bucket in s3.buckets.all():
    print(bucket.name)

2
投票

我在一家大公司工作并遇到同样的错误,但需要一个不同的工作。我的问题与代理设置有关。我设置了代理服务器,所以我需要将no_proxy设置为白名单AWS,然后才能让所有工作正常运行。如果你不想用os设置搞砸你的Python代码,你也可以在你的bash脚本中设置它。

蟒蛇:

import os
os.environ["NO_PROXY"] = "s3.amazonaws.com"

击:

no_proxy = "s3.amazonaws.com"

0
投票

boto3正在寻找文件夹中的凭据

C:\ProgramData\Anaconda3\envs\tensorflow\Lib\site-packages\botocore\.aws

您应该在此文件夹credentialsconfig中保存两个文件。

您可能想要查看boto3在this link中搜索凭据的一般顺序。查看配置凭据子标题下的内容。


0
投票

如果您确定正确配置了aws,只需确保项目用户可以从./aws读取或只是以root身份运行项目


0
投票

如果你在~/.aws/credentials有多个aws配置文件,比如...

[Profile 1]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************
[Profile 2]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************

遵循两个步骤:

  1. 使用终端中的export AWS_DEFAULT_PROFILE=Profile 1命令将您想要用作默认值。
  2. 确保在使用boto3的同一终端中运行以上命令,或者打开编辑器。[了解以下场景]

场景:

  • 如果你有两个终端打开叫做t1t2
  • 并且您在t1中运行export命令并打开JupyterLab或t2中的任何其他命令,您将获得NoCredentialsError:无法找到凭据错误。

解:

  • t1中运行export命令,然后打开JupyterLab或来自同一终端t1的任何其他命令。
© www.soinside.com 2019 - 2024. All rights reserved.