En boto, solía especificar mis credenciales cuando me conectaba a S3 de esta manera:
import boto
from boto.s3.connection import Key, S3Connection
S3 = S3Connection( settings.AWS_SERVER_PUBLIC_KEY, settings.AWS_SERVER_SECRET_KEY )
Luego podría usar S3 para realizar mis operaciones (en mi caso, eliminar un objeto de un depósito).
Con boto3 todos los ejemplos que encontré son los siguientes:
import boto3
S3 = boto3.resource( 's3' )
S3.Object( bucket_name, key_name ).delete()
No pude especificar mis credenciales y, por lo tanto, todos los intentos fallan con InvalidAccessKeyId
error.
¿Cómo puedo especificar las credenciales con boto3?
python
amazon-web-services
amazon-s3
boto3
Robert Brax
fuente
fuente
Respuestas:
Puedes crear una sesión :
import boto3 session = boto3.Session( aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY, aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY, )
Luego use esa sesión para obtener un recurso S3:
s3 = session.resource('s3')
fuente
Puede obtener una
client
nueva sesión directamente como a continuación.s3_client = boto3.client('s3', aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY, aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY, region_name=REGION_NAME )
fuente
Esto es más antiguo, pero también lo coloco aquí para mi referencia. boto3.resource está implementando la sesión predeterminada, puede pasar a través de los detalles de la sesión boto3.resource.
Help on function resource in module boto3: resource(*args, **kwargs) Create a resource service client by name using the default session. See :py:meth:`boto3.session.Session.resource`.
https://github.com/boto/boto3/blob/86392b5ca26da57ce6a776365a52d3cab8487d60/boto3/session.py#L265
puede ver que solo toma los mismos argumentos que Boto3.
import boto3 S3 = boto3.resource('s3', region_name='us-west-2', aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY, aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY) S3.Object( bucket_name, key_name ).delete()
fuente
Me gustaría ampliar la respuesta de @ JustAGuy. El método que prefiero es usar
AWS CLI
para crear un archivo de configuración. La razón es que, con el archivo de configuración, elCLI
oSDK
buscará automáticamente las credenciales en la~/.aws
carpeta. Y lo bueno es queAWS CLI
está escrito en python.Puede obtener cli de pypi si aún no lo tiene. Estos son los pasos para configurar cli desde la terminal
$> pip install awscli #can add user flag $> aws configure AWS Access Key ID [****************ABCD]:[enter your key here] AWS Secret Access Key [****************xyz]:[enter your secret key here] Default region name [us-west-2]:[enter your region here] Default output format [None]:
Después de esto, puede acceder a
boto
cualquiera de las api sin tener que especificar claves (a menos que desee usar una credencial diferente).fuente
Hay numerosas formas de almacenar credenciales sin dejar de usar boto3.resource (). Yo mismo estoy usando el método AWS CLI. Funciona perfectamente.
https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html?fbclid=IwAR2LlrS4O2gYH6xAF4QDVIH2Q2tzfF_VZ6loM3XfXsPAOR4qA-pX_qAILys
fuente