当我简单地运行下面的代码时,我总是得到这个错误。

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\证书,从那里Boto应该读我的证书。

我的设置错了吗?

下面是boto3的输出。set_stream_logger (botocore,级别=“调试”)。

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

当前回答

使用凭证创建S3客户端对象

AWS_S3_CREDS = {
    "aws_access_key_id":"your access key", # os.getenv("AWS_ACCESS_KEY")
    "aws_secret_access_key":"your aws secret key" # os.getenv("AWS_SECRET_KEY")
}
s3_client = boto3.client('s3',**AWS_S3_CREDS)

从os环境中获取凭证总是好的

在终端中执行以下命令设置环境变量

如果是Linux或MAC

$ export AWS_ACCESS_KEY="aws_access_key"
$ export AWS_SECRET_KEY="aws_secret_key"

如果窗户

c:System\> set AWS_ACCESS_KEY="aws_access_key"
c:System\> set AWS_SECRET_KEY="aws_secret_key"

其他回答

对于MLflow,如果不能写入AWS3/MinIO数据湖,则调用MLflow .log_artifact()将引发此错误。

原因是没有在你的python env中设置凭据(就像这两个env变量一样):

os.environ['DATA_AWS_ACCESS_KEY_ID'] = 'login'
os.environ['DATA_AWS_SECRET_ACCESS_KEY'] = 'password'

注意,您也可以使用minio客户端直接访问MLflow构件(除了MLflow的连接外,还需要一个到数据湖的单独连接)。这个客户端可以像这样启动:

minio_client_mlflow = minio.Minio(os.environ['MLFLOW_S3_ENDPOINT_URL'].split('://')[1],
                    access_key=os.environ['AWS_ACCESS_KEY_ID'],
                    secret_key=os.environ['AWS_SECRET_ACCESS_KEY'],
                    secure=False)

如果在~/中有多个aws配置文件。aws /凭证等……

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

遵循两个步骤:

在终端中使用export AWS_DEFAULT_PROFILE=Profile 1命令创建一个您想使用的默认值。 请确保在使用boto3或打开编辑器的同一终端上运行上述命令。[理解以下场景]

场景:

如果有两个终端,分别是t1和t2。 然后在t1中运行export命令,然后从t2中打开JupyterLab或任何其他命令,您将得到NoCredentialsError: Unable to locate credentials错误。

解决方案:

在t1中运行export命令,然后从同一终端t1打开JupyterLab或任何其他命令。

如果您正在寻找另一种方法,请尝试使用 AmazonCLI

终端类型:-

aws configure

然后填写密钥和区域。

boto3在文件夹中查找凭据,例如

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

您应该在这个文件夹中保存两个文件凭证和配置。

您可能希望查看boto3在此链接中搜索凭据的一般顺序。在配置凭据子标题下查看。

如果使用AWS

在我的情况下,我必须在IAM角色中添加以下策略,以允许ec2实例读取ec2标记。这将消除“无法定位凭据”错误 :

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": "ec2:DescribeTags",
        "Resource": "*"
    }
  ]
}