Membuat presigned URL untuk mengunggah objek ke S3 di bucket Outposts - Amazon S3 di Outposts

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Membuat presigned URL untuk mengunggah objek ke S3 di bucket Outposts

Untuk memberikan akses terbatas waktu ke objek yang disimpan secara lokal di Outpost tanpa memperbarui kebijakan bucket, Anda dapat menggunakan presigned. URL Dengan presignedURLs, Anda sebagai pemilik bucket dapat berbagi objek dengan individu di virtual private cloud (VPC) atau memberi mereka kemampuan untuk mengunggah atau menghapus objek.

Saat Anda membuat presigned URL dengan menggunakan AWS SDKs or the AWS Command Line Interface (AWS CLI), Anda mengaitkannya URL dengan tindakan tertentu. Anda juga memberikan akses terbatas waktu ke presigned URL dengan memilih waktu kedaluwarsa kustom yang bisa serendah 1 detik dan setinggi 7 hari. Saat Anda membagikan presignedURL, individu di dalam VPC dapat melakukan tindakan yang disematkan di dalam URL seolah-olah mereka adalah pengguna penandatanganan asli. Ketika URL mencapai waktu kedaluwarsa, URL kedaluwarsa dan tidak lagi berfungsi.

Saat membuat presignedURL, Anda harus memberikan kredensi keamanan Anda, lalu tentukan yang berikut ini:

  • Titik akses Nama Sumber Daya Amazon (ARN) untuk bucket Amazon S3 di Outposts

  • Kunci objek

  • HTTPMetode (PUTuntuk mengunggah objek)

  • Tanggal dan waktu kedaluwarsa

Presigned URL hanya berlaku untuk durasi yang ditentukan. Artinya, Anda harus memulai tindakan yang diizinkan URL sebelum tanggal dan waktu kedaluwarsa. Anda dapat menggunakan presigned URL beberapa kali, hingga tanggal kedaluwarsa dan waktu. Jika Anda membuat presigned URL dengan menggunakan token sementara, maka token akan URL kedaluwarsa saat token kedaluwarsa, bahkan jika Anda membuatnya URL dengan waktu kedaluwarsa nanti.

Jika tindakan yang diizinkan oleh presigned URL terdiri dari beberapa langkah, seperti unggahan multibagian, Anda harus memulai semua langkah sebelum waktu kedaluwarsa. Jika S3 di Outposts mencoba memulai langkah dengan URL kedaluwarsa, Anda menerima kesalahan.

Pengguna di cloud pribadi virtual (VPC) yang memiliki akses ke presigned URL dapat mengunggah objek. Misalnya, pengguna VPC yang memiliki akses ke presigned URL dapat mengunggah objek ke bucket Anda. Karena akses URLs hibah yang telah ditetapkan sebelumnya ke bucket S3 on Outposts Anda kepada pengguna mana pun VPC yang memiliki akses ke presignedURL, sebaiknya Anda melindunginya dengan tepat. URLs Untuk detail selengkapnya tentang melindungi presignedURLs, lihatMembatasi kemampuan yang telah ditentukan sebelumnya URL.

Siapa pun yang memiliki kredensi keamanan yang valid dapat membuat presigned. URL Namun, presigned URL harus dibuat oleh seseorang yang memiliki izin untuk melakukan operasi yang menjadi dasar presignedURL. Untuk informasi selengkapnya, lihat Siapa yang bisa membuat presigned URL.

Menggunakan AWS SDKs untuk menghasilkan presigned URL untuk S3 pada operasi objek Outposts

Java
SDKuntuk Java 2.x

Contoh ini menunjukkan cara membuat presigned URL yang dapat Anda gunakan untuk mengunggah objek ke bucket S3 di Outposts untuk waktu yang terbatas. Untuk informasi selengkapnya, lihat Menggunakan presigned URLs untuk S3 di Outposts.

public static void signBucket(S3Presigner presigner, String outpostAccessPointArn, String keyName) { try { PutObjectRequest objectRequest = PutObjectRequest.builder() .bucket(accessPointArn) .key(keyName) .contentType("text/plain") .build(); PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder() .signatureDuration(Duration.ofMinutes(10)) .putObjectRequest(objectRequest) .build(); PresignedPutObjectRequest presignedRequest = presigner.presignPutObject(presignRequest); String myURL = presignedRequest.url().toString(); System.out.println("Presigned URL to upload a file to: " +myURL); System.out.println("Which HTTP method must be used when uploading a file: " + presignedRequest.httpRequest().method()); // Upload content to the S3 on Outposts bucket by using this URL. URL url = presignedRequest.url(); // Create the connection and use it to upload the new object by using the presigned URL. HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setRequestProperty("Content-Type","text/plain"); connection.setRequestMethod("PUT"); OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream()); out.write("This text was uploaded as an object by using a presigned URL."); out.close(); connection.getResponseCode(); System.out.println("HTTP response code is " + connection.getResponseCode()); } catch (S3Exception e) { e.getStackTrace(); } catch (IOException e) { e.getStackTrace(); } }
Python
SDKuntuk Python (Boto3)

Contoh ini menunjukkan cara menghasilkan presigned URL yang dapat melakukan tindakan S3 pada Outposts untuk waktu yang terbatas. Untuk informasi selengkapnya, lihat Menggunakan presigned URLs untuk S3 di Outposts. Untuk membuat permintaan denganURL, gunakan Requests paket.

import argparse import logging import boto3 from botocore.exceptions import ClientError import requests logger = logging.getLogger(__name__) def generate_presigned_url(s3_client, client_method, method_parameters, expires_in): """ Generate a presigned S3 on Outposts URL that can be used to perform an action. :param s3_client: A Boto3 Amazon S3 client. :param client_method: The name of the client method that the URL performs. :param method_parameters: The parameters of the specified client method. :param expires_in: The number of seconds that the presigned URL is valid for. :return: The presigned URL. """ try: url = s3_client.generate_presigned_url( ClientMethod=client_method, Params=method_parameters, ExpiresIn=expires_in ) logger.info("Got presigned URL: %s", url) except ClientError: logger.exception( "Couldn't get a presigned URL for client method '%s'.", client_method) raise return url def usage_demo(): logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') print('-'*88) print("Welcome to the Amazon S3 on Outposts presigned URL demo.") print('-'*88) parser = argparse.ArgumentParser() parser.add_argument('accessPointArn', help="The name of the S3 on Outposts access point ARN.") parser.add_argument( 'key', help="For a GET operation, the key of the object in S3 on Outposts. For a " "PUT operation, the name of a file to upload.") parser.add_argument( 'action', choices=('get', 'put'), help="The action to perform.") args = parser.parse_args() s3_client = boto3.client('s3') client_action = 'get_object' if args.action == 'get' else 'put_object' url = generate_presigned_url( s3_client, client_action, {'Bucket': args.accessPointArn, 'Key': args.key}, 1000) print("Using the Requests package to send a request to the URL.") response = None if args.action == 'get': response = requests.get(url) elif args.action == 'put': print("Putting data to the URL.") try: with open(args.key, 'r') as object_file: object_text = object_file.read() response = requests.put(url, data=object_text) except FileNotFoundError: print(f"Couldn't find {args.key}. For a PUT operation, the key must be the " f"name of a file that exists on your computer.") if response is not None: print("Got response:") print(f"Status: {response.status_code}") print(response.text) print('-'*88) if __name__ == '__main__': usage_demo()