

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

# Menggunakan presigned URLs untuk S3 di Outposts
<a name="S3OutpostsPresignedURL"></a>

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 presigned 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.

## Pembatasan kemampuan URL yang telah ditandatangani
<a name="S3OutpostsPresignedUrlUploadObjectLimitCapabilities"></a>

Kemampuan URL yang telah ditandatangani dibatasi oleh izin pengguna yang membuatnya. Intinya, presigned URLs adalah token pembawa yang memberikan akses kepada mereka yang memilikinya. Oleh karena itu, kami menyarankan agar Anda melindunginya sebagaimana mestinya. 

**AWS Tanda Tangan Versi 4 (SiGv4)**  
Untuk menerapkan perilaku tertentu saat permintaan URL presigned diautentikasi menggunakan AWS Signature Version 4 (SigV4), Anda dapat menggunakan kunci kondisi dalam kebijakan bucket dan kebijakan jalur akses. Misalnya, Anda dapat membuat kebijakan bucket yang menggunakan `s3-outposts:signatureAge` kondisi untuk menolak permintaan URL Amazon S3 pada Outposts yang telah ditetapkan sebelumnya pada objek di `example-outpost-bucket` bucket jika tanda tangan berusia lebih dari 10 menit. Untuk menggunakan contoh ini, ganti *`user input placeholders`*dengan informasi Anda sendiri.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Deny a presigned URL request if the signature is more than 10 minutes old",
            "Effect": "Deny",
            "Principal": {"AWS":"444455556666"},
            "Action": "s3-outposts:*",
            "Resource": "arn:aws:s3-outposts:us-east-1:111122223333:outpost/op-01ac5d28a6a232904/bucket/example-outpost-bucket/object/*",
            "Condition": {
                "NumericGreaterThan": {"s3-outposts:signatureAge": 600000},
                "StringEquals": {"s3-outposts:authType": "REST-QUERY-STRING"}
            }
        }
    ]
}
```

------

Untuk daftar kunci kondisi dan kebijakan contoh tambahan yang dapat Anda gunakan untuk menerapkan perilaku tertentu saat permintaan URL yang telah ditetapkan sebelumnya diautentikasi menggunakan Versi Tanda Tangan 4, lihat. [AWS Kunci kebijakan khusus otentikasi Versi Tanda Tangan 4 (SigV4)](s3-outposts-bucket-policy-s3-sigv4-conditions.md)

**Pembatasan jalur jaringan**  
Jika Anda ingin membatasi penggunaan presigned URLs dan semua S3 pada Outposts akses ke jalur jaringan tertentu, Anda dapat menulis kebijakan yang memerlukan jalur jaringan tertentu. Untuk menetapkan pembatasan pada prinsipal IAM yang membuat panggilan, Anda dapat menggunakan kebijakan berbasis identitas AWS Identity and Access Management (IAM) (misalnya, kebijakan pengguna, grup, atau peran). Untuk menetapkan batasan pada sumber daya S3 pada Outposts, Anda dapat menggunakan kebijakan berbasis sumber daya (misalnya, kebijakan bucket dan titik akses). 

Pembatasan jalur jaringan pada pengguna utama IAM mengharuskan pengguna kredensial tersebut untuk membuat permintaan dari jaringan yang ditentukan. Pembatasan pada bucket atau titik akses mengharuskan semua permintaan ke sumber daya tersebut berasal dari jaringan tertentu. Pembatasan ini juga berlaku di luar skenario URL yang telah ditandatangani sebelumnya.

Kondisi global IAM yang Anda gunakan bergantung pada jenis titik akhir. Jika Anda menggunakan titik akhir publik untuk S3 di Outposts, gunakan `aws:SourceIp`. Jika Anda menggunakan titik akhir VPC untuk S3 di Outposts, gunakan `aws:SourceVpc` atau `aws:SourceVpce`.

Pernyataan kebijakan IAM berikut mengharuskan prinsipal untuk mengakses AWS hanya dari rentang jaringan yang ditentukan. Dengan pernyataan kebijakan ini, semua akses harus berasal dari rentang itu. Hal ini juga termasuk kasus seseorang yang menggunakan URL presigned untuk S3 di Outposts. Untuk menggunakan contoh ini, ganti *`user input placeholders`*dengan informasi Anda sendiri.

```
{
    "Sid": "NetworkRestrictionForIAMPrincipal",
    "Effect": "Deny",
    "Action": "*",
    "Resource": "*",
    "Condition": {
        "NotIpAddressIfExists": {"aws:SourceIp": "IP-address-range"},
        "BoolIfExists": {"aws:ViaAWSService": "false"}
    }
}
```

Untuk contoh kebijakan bucket yang menggunakan kunci kondisi `aws:SourceIP` AWS global untuk membatasi akses ke bucket S3 di Outposts ke rentang jaringan tertentu, lihat. [Mengatur IAM dengan S3 di Outposts](S3OutpostsIAM.md)

## Siapa yang dapat membuat URL yang telah ditandatangani
<a name="S3Outpostswho-presigned-url"></a>

Siapa pun yang memiliki kredensial keamanan yang valid dapat membuat sebuah URL yang telah ditandatangani. Akan tetapi agar pengguna di VPC berhasil mengakses objek, URL presigned harus diciptakan oleh seseorang yang memiliki izin untuk melakukan operasi yang menjadi dasar dari URL presigned tersebut.

Anda dapat menggunakan kredensial berikut untuk membuat URL presigned:
+ **Profil instans IAM**–Valid hingga 6 jam.
+ **AWS Security Token Service**-Berlaku hingga 36 jam saat ditandatangani dengan kredensial permanen, seperti kredensial pengguna root Akun AWS atau pengguna IAM.
+ **Pengguna IAM** - Berlaku hingga 7 hari saat Anda menggunakan AWS Signature Versi 4.

  Untuk menciptakan sebuah URL presigned yang berlaku hingga 7 hari, pertama-tama delegasikan kredensial pengguna IAM (kunci akses dan kunci rahasia) pada SDK yang Anda gunakan. Kemudian, buat URL presigned dengan menggunakan AWS Signature Version 4.

**catatan**  
Jika Anda menciptakan sebuah URL presigned menggunakan token sementara, URL akan kedaluwarsa saat token kedaluwarsa, meskipun Anda membuat URL dengan waktu kedaluwarsa lebih lama.
Karena akses URLs hibah yang telah ditetapkan sebelumnya ke bucket S3 on Outposts Anda kepada siapa pun yang memiliki URL, kami sarankan Anda melindunginya dengan tepat. Untuk informasi selengkapnya tentang melindungi presigned URLs, lihat[Pembatasan kemampuan URL yang telah ditandatangani](#S3OutpostsPresignedUrlUploadObjectLimitCapabilities).

## Kapan S3 di Outposts memeriksa tanggal dan waktu kedaluwarsa dari URL yang telah ditandatangani?
<a name="S3Outpostspresigned-url-when-checked"></a>

Pada saat permintaan HTTP, S3 di Outposts memeriksa tanggal dan waktu kedaluwarsa dari URL yang ditandatangani. Misalnya, jika klien mulai mengunduh file besar segera sebelum waktu kedaluwarsa, pengunduhan berlanjut meskipun waktu kedaluwarsa berlalu selama pengunduhan. Akan tetapi, jika koneksi menurun dan klien mencoba memulai ulang unduhan setelah waktu kedaluwarsa berlalu, pengunduhan gagal.

Untuk informasi selengkapnya tentang menggunakan URL yang telah ditandatangani untuk berbagi atau unggah objek, lihat topik berikut ini.

**Topics**
+ [Pembatasan kemampuan URL yang telah ditandatangani](#S3OutpostsPresignedUrlUploadObjectLimitCapabilities)
+ [Siapa yang dapat membuat URL yang telah ditandatangani](#S3Outpostswho-presigned-url)
+ [Kapan S3 di Outposts memeriksa tanggal dan waktu kedaluwarsa dari URL yang telah ditandatangani?](#S3Outpostspresigned-url-when-checked)
+ [Berbagi objek dengan menggunakan presigned URLs](S3OutpostsShareObjectPresignedURL.md)
+ [Membuat sebuah URL presigned untuk mengunggah sebuah objek ke sebuah S3 di bucket Outposts](S3OutpostsPresignedUrlUploadObject.md)

# Berbagi objek dengan menggunakan presigned URLs
<a name="S3OutpostsShareObjectPresignedURL"></a>

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 presigned 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 (`GET`untuk mengunduh 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.

Pengguna di virtual private cloud (VPC) yang memiliki akses ke URL presigned dapat mengakses objek. Misalnya, jika Anda memiliki video dalam bucket Anda dan bucket maupun objek tersebut bersifat pribadi, Anda dapat membagikan video dengan orang lain dengan membuat URL presigned. Karena akses URLs hibah yang telah ditetapkan sebelumnya ke bucket S3 on Outposts Anda kepada siapa pun yang memiliki URL, kami sarankan Anda melindunginya dengan tepat. URLs Untuk detail selengkapnya tentang melindungi presigned URLs, lihat[Pembatasan kemampuan URL yang telah ditandatangani](S3OutpostsPresignedURL.md#S3OutpostsPresignedUrlUploadObjectLimitCapabilities). 

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](S3OutpostsPresignedURL.md#S3Outpostswho-presigned-url).

Anda dapat membuat URL yang telah ditetapkan sebelumnya untuk berbagi objek di bucket S3 di Outposts dengan menggunakan dan file. AWS SDKs AWS CLI Untuk informasi selengkapnya, lihat contoh berikut ini. 

## Menggunakan AWS SDKs
<a name="S3OutpostsShareObjectPreSignedURLSDK"></a>

Anda dapat menggunakan AWS SDKs untuk menghasilkan URL presigned yang dapat Anda berikan kepada orang lain sehingga mereka dapat mengambil objek. 

**catatan**  
Saat Anda menggunakan AWS SDKs untuk membuat URL yang telah ditetapkan sebelumnya, waktu kedaluwarsa maksimum untuk URL yang telah ditetapkan sebelumnya adalah 7 hari dari waktu pembuatan. 

------
#### [ Java ]

**Example**  
Contoh berikut menampilkan pembuatan URL presigned yang dapat Anda berikan kepada orang lain sehingga mereka dapat mengambil objek dari bucket S3 di Outposts. Untuk informasi selengkapnya, lihat [Menggunakan presigned URLs untuk S3 di Outposts](S3OutpostsPresignedURL.md). Untuk menggunakan contoh ini, ganti *`user input placeholders`*dengan informasi Anda sendiri.  

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.HttpMethod;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;

import java.io.IOException;
import java.net.URL;
import java.time.Instant;

public class GeneratePresignedURL {

    public static void main(String[] args) throws IOException {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String accessPointArn = "*** access point ARN ***";
        String objectKey = "*** object key ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(new ProfileCredentialsProvider())
                    .build();

            // Set the presigned URL to expire after one hour.
            java.util.Date expiration = new java.util.Date();
            long expTimeMillis = Instant.now().toEpochMilli();
            expTimeMillis += 1000 * 60 * 60;
            expiration.setTime(expTimeMillis);

            // Generate the presigned URL.
            System.out.println("Generating pre-signed URL.");
            GeneratePresignedUrlRequest generatePresignedUrlRequest =
                    new GeneratePresignedUrlRequest(accessPointArn, objectKey)
                            .withMethod(HttpMethod.GET)
                            .withExpiration(expiration);
            URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest);

            System.out.println("Pre-Signed URL: " + url.toString());
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process 
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------
#### [ .NET ]

**Example**  
Contoh berikut menampilkan pembuatan URL presigned yang dapat Anda berikan kepada orang lain sehingga mereka dapat mengambil objek dari bucket S3 di Outposts. Untuk informasi selengkapnya, lihat [Menggunakan presigned URLs untuk S3 di Outposts](S3OutpostsPresignedURL.md). Untuk menggunakan contoh ini, ganti *`user input placeholders`*dengan informasi Anda sendiri.   

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;

namespace Amazon.DocSamples.S3
{
    class GenPresignedURLTest
    {
        private const string accessPointArn = "*** access point ARN ***"; 
        private const string objectKey = "*** object key ***";
        // Specify how long the presigned URL lasts, in hours.
        private const double timeoutDuration = 12;
        // Specify your bucket Region (an example Region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;

        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            string urlString = GeneratePreSignedURL(timeoutDuration);
        }
        static string GeneratePreSignedURL(double duration)
        {
            string urlString = "";
            try
            {
                GetPreSignedUrlRequest request1 = new GetPreSignedUrlRequest
                {
                    BucketName = accessPointArn,
                    Key = objectKey,
                    Expires = DateTime.UtcNow.AddHours(duration)
                };
                urlString = s3Client.GetPreSignedURL(request1);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            return urlString;
        }
    }
}
```

------
#### [ Python ]

Contoh berikut menampilkan pembuatan URL presigned untuk berbagi objek dengan menggunakan SDK untuk Python (Boto3). Sebagai contoh, gunakan klien Boto3 dan `generate_presigned_url` fungsi untuk menghasilkan URL presigned yang memungkinkan Anda untuk `GET` objek.

```
import boto3
    url = boto3.client('s3').generate_presigned_url(
    ClientMethod='get_object', 
    Params={'Bucket': 'ACCESS_POINT_ARN', 'Key': 'OBJECT_KEY'},
    ExpiresIn=3600)
```

Untuk informasi lebih lanjut tentang penggunaan SDK untuk Python (Boto3) untuk menghasilkan URL yang telah ditandatangani sebelumnya, lihat [Python](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.generate_presigned_url) di *Referensi API AWS SDK for Python (Boto) *.

------

## Menggunakan AWS CLI
<a name="S3OutpostsShareObjectPresignedCLI"></a>

 AWS CLI Perintah contoh berikut menghasilkan URL presigned untuk bucket S3 pada Outposts. Untuk menggunakan contoh ini, ganti *`user input placeholders`*dengan informasi Anda sendiri.

**catatan**  
Saat Anda menggunakan AWS CLI untuk membuat URL yang telah ditetapkan sebelumnya, waktu kedaluwarsa maksimum untuk URL yang telah ditetapkan sebelumnya adalah 7 hari dari waktu pembuatan. 

```
aws s3 presign s3://arn:aws:s3-outposts:us-east-1:111122223333:outpost/op-01ac5d28a6a232904/accesspoint/example-outpost-access-point/mydoc.txt --expires-in 604800
```

Untuk informasi selengkapnya, lihat [presign](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3/presign.html) dalam *Referensi AWS CLI Perintah*.

# Membuat sebuah URL presigned untuk mengunggah sebuah objek ke sebuah S3 di bucket Outposts
<a name="S3OutpostsPresignedUrlUploadObject"></a>

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, lihat[Pembatasan kemampuan URL yang telah ditandatangani](S3OutpostsPresignedURL.md#S3OutpostsPresignedUrlUploadObjectLimitCapabilities). 

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](S3OutpostsPresignedURL.md#S3Outpostswho-presigned-url).

## Menggunakan AWS SDKs untuk menghasilkan URL presigned untuk S3 pada operasi objek Outposts
<a name="s3-outposts-presigned-urls-upload-examples"></a>

------
#### [ 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](S3OutpostsPresignedURL.md).   

```
    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](S3OutpostsPresignedURL.md). 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()
```

------