Boto3 S3'e bağlanırken kimlik bilgileri nasıl belirlenir?


106

Boto'da S3'e şu şekilde bağlanırken kimlik bilgilerimi belirtiyordum:

import boto
from boto.s3.connection import Key, S3Connection
S3 = S3Connection( settings.AWS_SERVER_PUBLIC_KEY, settings.AWS_SERVER_SECRET_KEY )

Daha sonra işlemlerimi gerçekleştirmek için S3'ü kullanabilirim (benim durumumda bir nesneyi bir kovadan silme).

Boto3 ile bulduğum tüm örnekler şöyle:

import boto3
S3 = boto3.resource( 's3' )
S3.Object( bucket_name, key_name ).delete()

Kimlik bilgilerimi belirtemedim ve bu nedenle tüm girişimler hata vererek başarısız oldu InvalidAccessKeyId.

Boto3 ile kimlik bilgilerini nasıl belirleyebilirim?


Bu cevap size yardımcı olabilir: stackoverflow.com/a/36913771/2681632
— Ilja Everilä

1
Resmi belgelerdeki "Kimlik Bilgilerini Yapılandırma" bölümüne bakın: boto3.readthedocs.io/en/latest/guide/configuration.html
— Mark B

Yanıtlar:


163

Bir oturum oluşturabilirsiniz :

import boto3
session = boto3.Session(
    aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY,
    aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY,
)

Ardından bir S3 kaynağı almak için bu oturumu kullanın:

s3 = session.resource('s3')

24
çalışır, cevap olarak alacağım. Neden bunu yapmanın açık yolu olarak belgelemiyorlar? !!
— Robert Brax

3
Yukarıda yorumunda belirtildiği gibi bu olduğunu aslında belgelerinde .
— Farazi

71

clientDoğrudan aşağıdaki gibi yeni bir oturum alabilirsiniz .

 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
                      )

9
Bu bir s3 istemcisi almak için işe yarar , ancak OP bunun yerine bir s3 kaynağı istedi.
— Alasdair

@Alasdair'e katılıyorum. Dokümanlar müşteriyle nasıl bir şey yapılacağını göstermiyor ve siz de göstermiyor, bu yüzden bu cevabın ne kadar alakalı olduğunu anlamıyorum.
— Cerin

Bunu denedim ama bana "Kimlik bilgileri bulunamıyor" hatası veriyor ... Daha önce bunu test etmek için ~ / .aws klasörünü kaldırmıştım çünkü boto'nun varsayılan olarak orada
— kredileri arayacağını biliyorum

8

Bu daha eski ama bunu benim referansım için buraya yerleştiriyorum. boto3.resource sadece varsayılan Oturumu uygulamaktır, boto3.resource oturum detaylarını geçebilirsiniz.

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

Boto3 ile aynı argümanları aldığını görebilirsiniz.

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()

5

@ JustAGuy'un cevabını genişletmek istiyorum. Tercih ettiğim yöntem, AWS CLIbir yapılandırma dosyası oluşturmak için kullanmaktır . Bunun nedeni, yapılandırma dosyasında CLIveya öğesinin klasörde SDKkimlik bilgilerini otomatik olarak ~/.awsaramasıdır. Ve iyi olan şey AWS CLIpython ile yazılmış olmasıdır.

Zaten sahip değilseniz, pypi'den cli alabilirsiniz. İşte terminalden cli kurmak için adımlar

$> 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]:

Bundan sonra boto, anahtarları belirtmek zorunda kalmadan api'ye ve herhangi birine erişebilirsiniz (farklı bir kimlik bilgisi kullanmak istemediğiniz sürece).


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.