Cuando simplemente ejecuto el siguiente código, siempre aparece 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.
¿Está mal mi configuración?
Aquí está el resultado 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
boto3.set_stream_logger('botocore', level='DEBUG')
antes de su código? Mostrará dónde está buscando las credenciales.HOME
para que apunteC:\Users\myname
o configureAWS_SHARED_CREDENTIALS_FILE
para que apunte directamente a su archivo de credenciales.botocore.exceptions.NoRegionError: You must specify a region.
* mi archivo de configuración ↓ se encuentra en la misma carpeta que mis credentails.[default] ap-northeast-1
Respuestas:
intente especificar claves manualmente
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 de producción, considere el uso de claves de acceso rotativas: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey
fuente
.env
archivo (no confirmado) sería ideal y sería mejor que tener que elegir desde una~/.aws/
carpeta.Tuve el mismo problema y descubrí que el formato de mi
~/.aws/credentials
archivo era incorrecto.Funcionó con un archivo que contiene:
Tenga en cuenta que el nombre del perfil debe ser "
[default]
". Alguna documentación oficial hace referencia a un perfil llamado "[credentials]
", que no me funcionó.fuente
aws configure
también funciona si tiene instalado aws-cliSi está buscando una forma alternativa, intente agregar sus credenciales usando AmazonCLI
del tipo de terminal: -
luego complete sus claves y región.
fuente
Asegúrese de que su archivo ~ / .aws / credentials en Unix tenga este aspecto:
Su secuencia de comandos de Python debería verse así y funcionará:
Fuente: https://boto3.readthedocs.io/en/latest/guide/configuration.html#interactive-configuration .
fuente
output = json
normalmente se coloca en el~/.aws/config
en una[profile MyProfile1]
sección. Es posible que no funcione si se especifica en elcredentials
archivo.Estas instrucciones son para máquinas Windows con un perfil de usuario único para AWS. Asegúrese de que su
~/.aws/credentials
archivo se vea asíTuve que configurar la
AWS_DEFAULT_PROFILE
variable de entorno paraprofile_name
encontrarla en sus credenciales.Entonces mi python pudo conectarse. por ejemplo, desde aquí
fuente
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:
Y en ese archivo entré a la región
Luego crea el archivo de credenciales:
Luego ingrese sus credenciales
Después de configurar todos estos, luego mi archivo de Python para conectar el depósito. Ejecutar este archivo mostrará una lista de todos los contenidos.
También puede consultar los siguientes enlaces:
fuente
del tipo de terminal: -
luego complete sus claves y región.
después de esto, haga el siguiente paso, use cualquier entorno. Puede tener varias claves dependiendo de su cuenta. Puede gestionar varios entornos o claves
fuente
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, por lo que necesitaba configurar mi no_proxy para incluir AWS en la lista blanca antes de poder 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:
Intento:
Editar: Lo anterior asume una región S3 del este de EE. UU. Para otras regiones: use s3. [Region] .amazonaws.com donde region es algo como us-east-1 o us-west-2
fuente
no_proxy
para169.254.169.254
que el cliente de AWS pudiera acceder al servicio de metadatos para encontrar el perfil de la instancia.El boto3 busca las credenciales en la carpeta como
Debería guardar dos archivos en esta carpeta
credentials
yconfig
.Es posible que desee consultar el orden general en el que boto3 busca las credenciales en este enlace . Busque en el subtítulo Configuración de credenciales .
fuente
Si está seguro de haber configurado correctamente sus AWS, solo asegúrese de que el usuario del proyecto pueda leer desde ./aws o simplemente ejecute su proyecto como root
fuente
Si tiene varios perfiles de AWS en
~/.aws/credentials
like ...Siga dos pasos:
Haga uno que desee usar como predeterminado usando el
export AWS_DEFAULT_PROFILE=Profile 1
comando en la terminal.Asegúrese de ejecutar el comando anterior en la misma terminal desde donde usa boto3 o abre un editor. [Comprenda el siguiente escenario]
Guión:
t1
yt2
.t1
y abre JupyterLab o cualquier otro det2
, obtendrá NoCredentialsError: No se puede localizar el error de credenciales .Solución:
t1
y luego abra JupyterLab o cualquier otro desde la misma terminalt1
.fuente
Cree un objeto de cliente S3 con sus credenciales
Siempre es bueno obtener credenciales del entorno del sistema operativo
fuente