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.