example create cli aws python amazon-web-services amazon-s3 boto boto3

create - boto3 python upload to s3



Amazon AWS Cognito y Python Boto3 para establecer la conexión de AWS y subir el archivo a Bucket (3)

Intento usar el servicio cognito de AWS para autenticar y cargar un archivo. Se me ha proporcionado mi regionType, identityPool, AWS account ID y UnAuthRole. También sé los nombres del cubo de producción y desarrollo.

Creo que estoy configurando la clave de acceso de AWS y la clave secreta de AWS ... Quiero autenticarme con cognito y usar los resultados para permitirme hacer una lista de depósitos y luego subir un archivo.

¿Qué estoy haciendo mal? ¿Cómo puedo usar el ID cognito para establecer una conexión S3?

Aquí está mi código y el error resultante:

#!/usr/bin/python import boto3 import boto #boto.set_stream_logger(''foo'') import json client = boto3.client(''cognito-identity'',''us-east-1'') resp = client.get_id(AccountId=''<ACCNTID>'',IdentityPoolId=''<IDPOOLID>'') print "/nIdentity ID: %s"%(resp[''IdentityId'']) print "/nRequest ID: %s"%(resp[''ResponseMetadata''][''RequestId'']) resp = client.get_open_id_token(IdentityId=resp[''IdentityId'']) token = resp[''Token''] print "/nToken: %s"%(token) print "/nIdentity ID: %s"%(resp[''IdentityId'']) resp = client.get_credentials_for_identity(IdentityId=resp[''IdentityId'']) secretKey = resp[''Credentials''][''SecretKey''] accessKey = resp[''Credentials''][''AccessKeyId''] print "/nSecretKey: %s"%(secretKey) print "/nAccessKey ID: %s"%(accessKey) print resp conn = boto.connect_s3(aws_access_key_id=accessKey,aws_secret_access_key=secretKey,debug=0) print "/nConnection: %s"%(conn) for bucket in conn.get_all_buckets(): print bucket.name

Error:

Traceback (most recent call last): File "./test.py", line 32, in <module> for bucket in conn.get_all_buckets(): File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 440, in get_all_buckets response.status, response.reason, body) boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden <?xml version="1.0" encoding="UTF-8"?> <Error><Code>InvalidAccessKeyId</Code><Message>The AWS Access Key Id you provided does not exist in our records.</Message><AWSAccessKeyId>ASIAILXMPZEMJAVZN7TQ</AWSAccessKeyId><RequestId>10631ACFF95610DD</RequestId><HostId>PGWDRBmhLjjv8Ast8v6kVHOG3xR8erJRV2ob3/2RmqHXwrg8HCZV578YsNLaoL24Hknr+nh033U=</HostId></Error>

Este código iOS correspondiente funciona bien:

AWSCognitoCredentialsProvider *credentialsProvider = [AWSCognitoCredentialsProvider credentialsWithRegionType:awsCognitoRegionType accountId:awsAccountId identityPoolId:awsCognitoIdentityPool unauthRoleArn:unauthRoleArn authRoleArn:nil]; AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:awsCognitoRegionType credentialsProvider:credentialsProvider]; .... AWSS3TransferManagerUploadRequest *uploadRequest = [AWSS3TransferManagerUploadRequest new]; uploadRequest.bucket = [ELEEnvironment currentEnvironment].userDataS3Bucket; uploadRequest.key = key; uploadRequest.body = uploadFileURL; [[self uploadTask:uploadRequest] continueWithExecutor:[BFExecutor mainThreadExecutor]...

¡Gracias por cualquier ayuda!


Esta pregunta es realmente inválida porque la autenticación falló no al crear una sesión sino al intentar enumerar los segmentos.

Cargar y descargar desde un segmento específico funciona bien con el código anterior, pero no la lista de todos los segmentos.

# Upload a new file data = open(''test.jpg'', ''rb'') s3.Bucket(''mybucket'').put_object(Key=''test.jpg'', Body=data) # S3 Object obj = s3.Object(bucket_name=''mybucket'', key=''test.jpg'') response = obj.get() data = response[''Body''].read() print len(data)


Este es tu error:

File "./test.py", line 32, in <module> bucket = conn.get_bucket("elektradevbucket")

Esta es su parte del código que hace referencia al depósito:

bucket = conn.get_bucket("testbucket") '''''' s3 = boto3.resource(''s3'') for bucket in s3.buckets.all(): print(bucket.name) s3.Bucket(''testbucket'')

¿Estás seguro de que estás ejecutando o llamando al script correcto?

Mejor, -italiano


PhilBot, no sé por qué tu muestra de código original se conecta a s3 usando boto (a diferencia de boto3). El código se conecta a cognito usando boto3. A partir de ahora, boto3 es estable y probablemente ya no haya muchas razones para usar boto. (Tal vez cuando originalmente publicaste tu pregunta, boto3 no era tan estable como lo es hoy).

Cuando traté de usar tu código para conectarte a kinesis con boto3, no funcionó; tuve que pasar la respuesta ["Credentials"] ["SessionToken"] como aws_session_token a la función client ().