使用預先簽章的 URL 來共用物件 - Amazon Simple Storage Service

使用預先簽章的 URL 來共用物件

根據預設,所有 Amazon S3 物件皆為私有,只有物件擁有者才具有存取這些物件的許可。不過,物件擁有者可以透過建立預先簽章的 URL 與其他人共用物件。預先簽章的 URL 會使用安全認證授與下載物件的時間限制許可。URL 可以在瀏覽器中輸入,也可以由程式用來下載物件。預先簽章的 URL 所使用認證是產生 URL 之 AWS 使用者的認證。

如需預先簽章的 URL 一般資訊,請參閱 使用預先簽章的 URL 來下載和上傳物件

您可使用 Amazon S3 主控台、AWS Explorer for Visual Studio (Windows) 或 AWS Toolkit for Visual Studio Code 建立預先簽章的 URL 以共用物件,而無須撰寫任何程式碼。您也可以使用 AWS Command Line Interface (AWS CLI) 或 AWS SDK,以程式設計方式產生預先簽章的 URL。

您可以執行以下步驟,使用 Amazon S3 主控台產生預先簽章 URL 以共用物件。當使用主控台時,預先簽章 URL 的最長過期時間為自建立時間起算 12 小時。

使用 Amazon S3 主控台產生預先簽章的 URL
  1. 登入 AWS 管理主控台,並開啟位於 https://console.aws.amazon.com/s3/ 的 Amazon S3 主控台。

  2. 在左側導覽窗格中,選擇一般用途儲存貯體

  3. 一般用途儲存貯體清單中,選擇一般用途儲存貯體名稱,該儲存貯體包含您要為其建立預先簽章 URL 的物件。

  4. Objects (物件) 清單中,選取要為其建立預先簽章 URL 的物件。

  5. 物件動作選單中,選擇使用預先簽章的 URL 來共用

  6. 指定預先簽章 URL 的有效期限。

  7. 選擇 Create presigned URL (建立預先簽章的 URL)。

  8. 出現確認提示時,URL 會自動複製到剪貼簿。如果您需要再次複製預先簽章的 URL,您將會看到一個複製按鈕。

下列範例 AWS CLI 命令產生預先簽章 URL 以共用來自 Amazon S3 儲存貯體的物件。當您使用 AWS CLI 時,預先簽章的 URL 的最長過期時間為自建立時間起算 7 天。若要使用此範例,請以您自己的資訊取代 user input placeholders

aws s3 presign s3://amzn-s3-demo-bucket/mydoc.txt --expires-in 604800

--expires-in 參數會指定過期時間,以秒為單位。

注意

對於 2019 年 3 月 20 日之後推出的所有 AWS 區域 內容,您需要指定請求的 endpoint-urlAWS 區域。如需所有 Amazon S3 區域和端點的清單,請參閱《AWS 一般參考》中的區域與端點

aws s3 presign s3://amzn-s3-demo-bucket/mydoc.txt --expires-in 604800 --region af-south-1 --endpoint-url https://s3.af-south-1.amazonaws.com

如需詳細資訊,請參閱《AWS CLI 命令參考》中的 presign

您可以使用 AWS SDK,透過編寫程式的方式產生預先簽章的 URL。

Python

下列 Python 指令碼會產生用於共用物件的 GET 預先簽章 URL。

  1. 複製指令碼的內容,並將其儲存為 “get-only-url.py” 檔案。若要使用下列範例,請以您自己的資訊 (例如您的檔名) 取代使用者輸入預留位置

    import argparse import boto3 from botocore.exceptions import ClientError def generate_presigned_url(s3_client, client_method, method_parameters, expires_in): """ Generate a presigned Amazon S3 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 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 ) except ClientError: print(f"Couldn't get a presigned URL for client method '{client_method}'.") raise return url def main(): parser = argparse.ArgumentParser() parser.add_argument("bucket", help="The name of the bucket.") parser.add_argument( "key", help="The key (path and filename) in the S3 bucket.", ) args = parser.parse_args() # By default, this will use credentials from ~/.aws/credentials s3_client = boto3.client("s3") # The presigned URL is specified to expire in 1000 seconds url = generate_presigned_url( s3_client, "get_object", {"Bucket": args.bucket, "Key": args.key}, 1000 ) print(f"Generated GET presigned URL: {url}") if __name__ == "__main__": main()
  2. 若要產生用於共用檔案的 GET 預先簽章 URL,請使用您的儲存貯體名稱和所需的物件路徑執行下列指令碼。

    下列命令使用範例值。以您自己的資訊取代使用者輸入預留位置

    python get-only-url.py amzn-s3-demo-bucket <object-path>

    指令碼將輸出 GET 預先簽章的 URL:

    Generated GET presigned URL: https://amzn-s3-demo-bucket.s3.amazonaws.com/object.txt?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D&Expires=1741978496
  3. 您可以搭配 curl 使用產生的預先簽章 URL 來下載檔案:

    curl -X GET "generated-presigned-url" -o "path/to/save/file"

如需使用 AWS SDK 產生用於共用物件的預先簽章 URL 的更多範例,請參閱使用 AWS SDK 為 Amazon S3 建立預先簽章的 URL

注意

對於 2019 年 3 月 20 日之後推出的所有 AWS 區域 內容,您需要指定請求的 endpoint-urlAWS 區域。如需所有 Amazon S3 區域和端點的清單,請參閱AWS 一般參考中的區域與端點

注意

使用 AWS SDK 時,標記屬性必須是標頭,而不是查詢參數。所有其他屬性都可作為預先簽署 URL 的參數傳遞。

注意

目前,AWS Toolkit for Visual Studio 不支援適用於 Mac 的 Visual Studio。

  1. 使用AWS Toolkit for Visual Studio 使用者指南》中的安裝和設定 Toolkit for Visual Studio 說明來安裝 AWS Toolkit for Visual Studio。

  2. 使用下列步驟連線到 AWS,AWS 使用者指南》中的連線到 AWS Toolkit for Visual Studio

  3. 在標示為 AWS Explorer 的左側面板中,按兩下包含您物件的儲存貯體。

  4. 以滑鼠右鍵按一下您想要為其產生預先簽章 URL 的物件,然後選取建立預先簽章的 URL...

  5. 在快顯視窗中,設定您預先簽章 URL 的到期日期和時間。

  6. 物件金鑰,應該根據您選取的物件預先填入。

  7. 選擇 GET 以指定將使用此預先簽章的 URL 來下載物件。

  8. 選擇產生按鈕。

  9. 若要複製剪貼簿連結,請選擇複製

  10. 若要使用產生的預先簽章 URL,請將 URL 貼入任何瀏覽器中。

如果您使用的是 Visual Studio Code,也可以使用 AWS Toolkit for Visual Studio Code 產生預先簽章的物件 URL,而無須撰寫任何程式碼。如需一般資訊,請參閱《AWS Toolkit for Visual Studio Code 使用者指南》中的 AWS Toolkit for Visual Studio Code

如需有關如何安裝 AWS Toolkit for Visual Studio Code 的指示,請參閱《AWS Toolkit for Visual Studio Code 使用者指南》中的安裝 AWS Toolkit for Visual Studio Code

  1. 使用下列步驟連線到 AWS,《AWS Toolkit for Visual Studio Code 使用者指南》中的連線到 AWS Toolkit for Visual Studio Code

  2. 選取左側面板中的 AWS 標誌代碼。

  3. EXPLORER 下,選取 S3

  4. 選擇儲存貯體和檔案,然後開啟 (按一下滑鼠右鍵) 內容功能表。

  5. 選擇產生預先簽章的 URL,然後設定到期時間 (以分鐘為單位)。

  6. 按 Enter 鍵,預先簽章的 URL 就會複製到您的剪貼簿。