本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用預先簽章來共用物件 URLs
若要在不更新儲存貯體政策的情況下,授予對儲存在 Outpost 本機上的物件有時間限制的存取權,您可以使用預先簽章的 URL。使用預先簽章的 URLs,作為儲存貯體擁有者,您可以與虛擬私有雲端 (VPC) 中的個人共用物件,或授予他們上傳或刪除物件的能力。
當您使用 AWS SDKs或 AWS Command Line Interface (AWS CLI) URL 建立預先簽章的 時,您可以將 URL與特定動作建立關聯。您也可以選擇自訂過期時間,該時間可以低至 1 秒,最高可達 7 天,URL以授予預先簽章的時間限制存取權。當您共用預先簽署的 時URL, 中的個人VPC可以執行內嵌在 中的動作URL,就像他們是原始簽署使用者一樣。當 URL達到其到期時間時, 會URL過期且不再運作。
建立預先簽章的 時URL,您必須提供安全憑證,然後指定下列項目:
預先簽章僅在指定的持續時間URL內有效。也就是說,您必須在過期日期和時間URL之前啟動 允許的 動作。您可以使用多次預先簽章URL,直到過期日期和時間為止。如果您URL使用臨時權杖建立預先簽章,則 會在權杖過期時URL過期,即使您建立的 URL具有較晚的過期時間。
虛擬私有雲端 (VPC) 中有權存取預先簽章的使用者URL可以存取 物件。例如,如果您的儲存貯體中有影片,而且儲存貯體和物件都是私有的,則可以透過產生預先簽章的 與他人共用影片URL。由於預先簽章會將 S3 on Outposts 儲存貯體的存取權URLs授予擁有 的任何人URL,因此建議您URLs妥善保護這些儲存貯體。如需保護預先簽章 的詳細資訊URLs,請參閱 限制預先簽章URL功能。
任何具有有效安全憑證的人員都可以建立預先簽章的 URL。不過,預先簽章URL必須由有權執行預先簽章URL所根據之操作的人員建立。如需詳細資訊,請參閱誰可以建立預先簽章 URL。
您可以使用 AWS SDKs和 產生預先簽章URL,以在 S3 on Outposts 儲存貯體中共用物件 AWS CLI。如需詳細資訊,請參閱下列範例。
您可以使用 AWS SDKs產生預先簽章URL,並提供給其他人,讓他們可以擷取物件。
當您使用 AWS SDKs產生預先簽章的 時URL,預先簽章的過期時間上限為建立後 URL 7 天。
- Java
-
下列範例會產生預先簽章URL,您可以提供給其他人,讓他們可以從 S3 on Outposts 儲存貯體擷取物件。如需詳細資訊,請參閱在 Outposts 上使用 URLs S3 預先簽章。若要使用此範例,請取代 使用者輸入預留位置
使用您自己的資訊。
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
-
下列範例會產生預先簽章URL,您可以提供給其他人,讓他們可以從 S3 on Outposts 儲存貯體擷取物件。如需詳細資訊,請參閱在 Outposts 上使用 URLs S3 預先簽章。若要使用此範例,請取代 使用者輸入預留位置
使用您自己的資訊。
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
-
下列範例會使用 SDK for Python (Boto3) 產生預先簽章的 URL 來共用物件。例如,使用 Boto3 用戶端和 generate_presigned_url
函數來產生預先簽章URL,允許您存取GET
物件。
import boto3
url = boto3.client('s3').generate_presigned_url(
ClientMethod='get_object',
Params={'Bucket': 'ACCESS_POINT_ARN', 'Key': 'OBJECT_KEY'},
ExpiresIn=3600)
如需使用 SDK for Python (Boto3) 產生預先簽章 的詳細資訊URL,請參閱 AWS SDK for Python (Boto) API 參考 中的 Python。
下列範例 AWS CLI 命令URL會為 S3 on Outposts 儲存貯體產生預先簽章。若要使用此範例,請取代 使用者輸入預留位置
使用您自己的資訊。
當您使用 AWS CLI 產生預先簽章的 時URL,預先簽章的過期時間上限為建立後 URL 7 天。
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
如需詳細資訊,請參閱《AWS CLI 命令參考》中的 presign。