aws - botocore
Error de Boto3: botocore.exceptions.NoCredentialsError: no se pueden encontrar las credenciales (10)
Asegúrese de que su archivo ~ / .aws / credentials en Unix tenga este aspecto:
[MyProfile1]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey
[MyProfile2]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey
Su script Python debería verse así, y funcionará:
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''])
Fuente: https://boto3.readthedocs.io/en/latest/guide/configuration.html#interactive-configuration .
Cuando simplemente ejecuto el siguiente código, siempre recibo este error.
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)
He guardado mi archivo de credenciales en
C:/Users/myname/.aws/credentials
, desde donde Boto debería leer mis credenciales.
¿Mi configuración es incorrecta?
Aquí está la salida de
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
El boto3 está buscando las credenciales en la carpeta como
C:/ProgramData/Anaconda3/envs/tensorflow/Lib/site-packages/botocore/.aws
Debe guardar dos archivos en esta carpeta
credentials
y
config
.
Es posible que desee consultar el orden general en el que boto3 busca credenciales en este enlace . Mire debajo del subtítulo Configuración de credenciales .
Estas instrucciones son para máquinas Windows con un único perfil de usuario para AWS.
Asegúrese de que su archivo
~/.aws/credentials
vea así
[profile_name]
aws_access_key_id = yourAccessId
aws_secret_access_key = yourSecretKey
Tuve que establecer la variable de entorno
AWS_DEFAULT_PROFILE
que se encuentra en sus credenciales.
Entonces mi python pudo conectarse.
por ejemplo desde
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)
Si está buscando una forma alternativa, intente agregar sus credenciales con AmazonCLI
desde el tipo de terminal: -
aws configure
luego complete sus claves y región.
Si está seguro de configurar sus aws correctamente, solo asegúrese de que el usuario del proyecto pueda leer ./aws o simplemente ejecutar su proyecto como root
Si tiene
múltiples perfiles aws
en
~/.aws/credentials
como ...
[Profile 1] aws_access_key_id = ******************* aws_secret_access_key = ****************************************** [Profile 2] aws_access_key_id = ******************* aws_secret_access_key = ******************************************
Sigue dos pasos:
-
Haga uno que quiera usar como predeterminado usando
export AWS_DEFAULT_PROFILE=Profile 1
en el terminal. -
Asegúrese de ejecutar el comando anterior en la misma terminal desde donde usa boto3 o abra un editor. [Comprenda el siguiente escenario]
Guión:
-
Si tiene dos terminales abiertas llamadas
t1
yt2
. -
Y ejecuta el comando de exportación en
t1
y abre JupyterLab o cualquier otro desdet2
, obtendrá NoCredentialsError: no se puede encontrar el error de credenciales .
Solución:
-
Ejecute el comando de exportación en
t1
y luego abra JupyterLab o cualquier otro desde el mismo terminalt1
.
También tuve el mismo problema, se puede resolver creando un archivo de configuración y credenciales en el directorio de inicio. A continuación se muestran los pasos que hice para resolver este problema.
Crea un archivo de configuración:
C:/ProgramData/Anaconda3/envs/tensorflow/Lib/site-packages/botocore/.aws
Y en ese archivo ingresé a la región
[Profile 1]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************
[Profile 2]
aws_access_key_id = *******************
aws_secret_access_key = ******************************************
Luego cree el archivo de credencial:
touch ~/.aws/credentials
Luego ingrese sus credenciales
[Profile1] aws_access_key_id = XXXXXXXXXXXXXXXXXXXX aws_secret_access_key = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
Después de configurar todo esto, luego mi archivo python para conectar el cubo. Ejecutar este archivo enumerará todos los contenidos.
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)
También puede consultar los siguientes enlaces:
Trabajo para una gran corporación y encontré este mismo error, pero necesitaba una solución diferente. Mi problema estaba relacionado con la configuración del proxy. Tenía mi proxy configurado, así que necesitaba configurar mi no_proxy para incluir en la lista blanca AWS antes de que pudiera hacer que todo funcionara. También puede configurarlo en su script bash si no desea enturbiar su código Python con la configuración del sistema operativo.
Pitón:
import os
os.environ["NO_PROXY"] = "s3.amazonaws.com"
Golpetazo:
no_proxy = "s3.amazonaws.com"
Tuve el mismo problema y descubrí que el formato de mi archivo
~/.aws/credentials
era incorrecto.
Funcionó con un archivo que contiene:
[default]
aws_access_key_id=XXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYYYYYYYYYYYYY
Tenga en cuenta que el nombre del perfil debe ser "
[default]
".
Algunos documentos oficiales hacen referencia a un perfil llamado "
[credentials]
", que no funcionó para mí.
intente especificar claves manualmente
s3 = boto3.resource(''s3'',
aws_access_key_id=ACCESS_ID,
aws_secret_access_key= ACCESS_KEY)
Asegúrese de no incluir su ACCESS_ID y ACCESS_KEY en el código directamente por cuestiones de seguridad. Considere usar configuraciones de entorno e inyectarlas en el código como lo sugiere @Tiger_Mike.
Para entornos Prod, considere usar teclas de acceso giratorias: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey