Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Membuat sebuah URL presigned untuk mengunggah sebuah objek ke sebuah S3 di bucket Outposts
Untuk memberikan akses terbatas waktu ke objek yang disimpan secara lokal di Outpost tanpa memperbarui kebijakan bucket, Anda dapat menggunakan URL yang telah ditetapkan sebelumnya. Dengan presigned URLs, Anda sebagai pemilik bucket dapat berbagi objek dengan individu di virtual private cloud (VPC) Anda atau memberi mereka kemampuan untuk mengunggah atau menghapus objek.
Saat Anda membuat URL yang telah ditetapkan sebelumnya dengan menggunakan AWS SDKs atau AWS Command Line Interface (AWS CLI), Anda mengaitkan URL dengan tindakan tertentu. Anda juga memberikan akses terbatas waktu ke URL yang telah ditetapkan sebelumnya dengan memilih waktu kedaluwarsa kustom yang bisa serendah 1 detik dan setinggi 7 hari. Saat Anda membagikan URL yang telah ditandatangani, individu di VPC dapat melakukan tindakan yang disertakan dalam URL seolah-olah mereka adalah pengguna yang memublikasikan sendiri. Ketika URL mencapai waktu kedaluwarsa, URL kedaluwarsa dan tidak lagi berfungsi.
Saat Anda membuat sebuah URL yang telah ditandatangani, Anda harus memberikan kredensial keamanan Anda, lalu menentukan berikut ini:
-
Titik akses Amazon Resource Name (ARN) untuk Amazon S3 di bucket Outposts
-
Kunci objek
-
Metode HTTP (PUT
untuk mengunggah objek)
-
Tanggal dan waktu kedaluwarsa
Sebuah URL presigned hanya berlaku selama durasi yang telah ditentukan. Artinya, Anda harus memulai tindakan yang diizinkan oleh URL sebelum tanggal dan waktu kedaluwarsa. Anda dapat menggunakan sebuah URL presigned berkali-kali, hingga tanggal dan waktu kedaluwarsa. Jika Anda membuat URL yang telah ditandatangani menggunakan token sementara, maka URL akan kedaluwarsa saat token kedaluwarsa, meskipun jika Anda membuat URL dengan waktu kedaluwarsa yang lebih lama.
Jika tindakan yang diizinkan oleh sebuah URL presigned terdiri dari beberapa langkah, seperti unggahan multipart, Anda harus memulai semua langkah sebelum waktu kedaluwarsa. Jika S3 di Outposts mencoba memulai langkah dengan URL yang kedaluwarsa, Anda menerima kesalahan.
Pengguna di virtual private cloud (VPC) yang memiliki akses ke URL presigned dapat mengunggah objek. Misalnya, pengguna di VPC yang memiliki akses ke URL yang telah ditetapkan sebelumnya dapat mengunggah objek ke bucket Anda. Karena URLs akses yang diberikan sebelumnya ke bucket S3 on Outposts Anda kepada pengguna mana pun di VPC yang memiliki akses ke URL yang telah ditetapkan sebelumnya, sebaiknya Anda melindunginya dengan tepat. URLs Untuk detail selengkapnya tentang melindungi presigned URLs, lihatPembatasan kemampuan URL yang telah ditandatangani.
Siapa pun yang memiliki kredensial keamanan yang valid dapat membuat sebuah URL yang telah ditandatangani. Akan tetapi, URL presigned harus dibuat oleh seseorang yang memiliki izin untuk melakukan operasi yang menjadi dasar URL presigned. Untuk informasi selengkapnya, lihat Siapa yang dapat membuat URL yang telah ditandatangani.
Menggunakan AWS SDKs untuk menghasilkan URL presigned untuk S3 pada operasi objek Outposts
- Java
-
- SDK untuk Java 2.x
-
Contoh ini menunjukkan cara menghasilkan sebuah URL presigned yang dapat digunakan untuk mengunggah sebuah objek ke sebuah bucket S3 di Outposts selama 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
-
- SDK untuk Python (Boto3)
-
Contoh ini menunjukkan cara membuat URL presigned yang dapat melakukan tindakan S3 on Outposts untuk waktu yang terbatas. Untuk informasi selengkapnya, lihat Menggunakan presigned URLs untuk S3 di Outposts. Untuk membuat permintaan dengan URL, 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()