Làm thế nào để chỉ định thông tin đăng nhập khi kết nối với boto3 S3?


105

Trên boto, tôi đã sử dụng để chỉ định thông tin đăng nhập của mình khi kết nối với S3 theo cách như vậy:

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

Sau đó, tôi có thể sử dụng S3 để thực hiện các thao tác của mình (trong trường hợp của tôi là xóa một đối tượng khỏi một thùng).

Với boto3, tất cả các ví dụ tôi tìm thấy là:

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

Tôi không thể chỉ định thông tin đăng nhập của mình và do đó tất cả các lần thử đều không thành công InvalidAccessKeyIddo lỗi.

Làm cách nào để chỉ định thông tin đăng nhập với boto3?


Câu trả lời này có thể giúp bạn: stackoverflow.com/a/36913771/2681632
Ilja Everilä,

1
Xem phần "Định cấu hình thông tin đăng nhập" trong tài liệu chính thức: boto3.readthedocs.io/en/latest/guide/configuration.html
Mark B,

Câu trả lời:


162

Bạn có thể tạo một phiên :

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

Sau đó, sử dụng phiên đó để nhận tài nguyên S3:

s3 = session.resource('s3')

24
hoạt động, tôi sẽ coi nó như câu trả lời. Tại sao họ không ghi lại điều này như một cách rõ ràng để làm điều đó? !!
Robert Brax,

3
Như đã đề cập trong một chú thích ở trên, đây trên thực tế trong tài liệu hướng dẫn .
Moot

70

Bạn có thể nhận được một clientphiên mới trực tiếp như dưới đây.

 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
Điều này hoạt động để nhận được một ứng dụng khách s3 , nhưng OP lại muốn một tài nguyên s3 thay thế.
Alasdair

Tôi đồng ý với @Alasdair. Tài liệu không chỉ ra cách thực hiện bất kỳ điều gì với khách hàng và bạn cũng vậy, vì vậy tôi không thấy câu trả lời này có liên quan như thế nào.
Cerin

Tôi cố gắng này, nhưng nó mang lại cho tôi "Không thể xác định vị trí thông tin" error..I trước đó đã loại bỏ ~ / .aws thư mục để kiểm tra điều này như tôi biết rằng boto ý muốn nhờ giao diện mặc định cho creds có ...
Prathamesh dhanawade

6

Cái này cũ hơn nhưng đặt cái này ở đây để tôi tham khảo. boto3.resource chỉ đang triển khai Phiên mặc định, bạn có thể chuyển qua chi tiết phiê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

bạn có thể thấy rằng nó chỉ lấy các đối số giống như Boto3.Session

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

Tôi muốn mở rộng câu trả lời của @ JustAGuy. Phương pháp tôi thích là sử dụng AWS CLIđể tạo một tệp cấu hình. Lý do là, với tệp cấu hình, CLIhoặc SDKsẽ tự động tìm thông tin đăng nhập trong ~/.awsthư mục. Và điều tốt là nó AWS CLIđược viết bằng python.

Bạn có thể lấy cli từ pypi nếu bạn chưa có. Dưới đây là các bước để thiết lập cli từ 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]:

Sau đó, bạn có thể truy cập botovà bất kỳ api nào mà không cần phải chỉ định khóa (trừ khi bạn muốn sử dụng thông tin đăng nhập khác).


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.