署名付き URL を使用したオブジェクトのアップロード
署名付き URL を使用して、自分の Amazon S3 バケットにオブジェクトをアップロードすることを他のユーザーに許可できます。署名付き URL を使用すると、他のユーザーは AWS セキュリティ認証情報やアクセス許可を持っていなくてもアップロードできます。署名付き URL は、それを作成したユーザーのアクセス許可によって制限されます。つまり、オブジェクトをアップロードするための署名付き URL を受け取った場合、オブジェクトをアップロードできるのは、署名付き URL の作成者がそのオブジェクトのアップロードに必要なアクセス許可を持っている場合のみです。
この URL を使用してオブジェクトをアップロードすると、Amazon S3 は指定されたバケットにオブジェクトを作成します。署名付き URL で指定したのと同じキーを持つオブジェクトがバケット内に既存する場合、Amazon S3 は既存のオブジェクトをアップロードしたオブジェクトで置き換えます。アップロード後は、バケット所有者がオブジェクトを所有します。
署名付き URL の一般的な情報については、「署名付き URL を使用したオブジェクトのダウンロードおよびアップロード」を参照してください。
AWS Explorer for Visual Studio を使用すると、コードを一切記述せずに、オブジェクトをアップロードするための署名付き URL を作成できます。AWS SDK を使用して署名付き URL をプログラムで生成することもできます。
現時点では、AWS Toolkit for Visual Studio は Visual Studio for Mac をサポートしていません。
-
「AWS Toolkit for Visual Studio ユーザーガイド」の「Toolkit for Visual Studio のインストールとセットアップ」の手順に従って、AWS Toolkit for Visual Studio をインストールします。
-
「AWS Toolkit for Visual Studio ユーザーガイド」の「AWS に接続する」の手順に従って、AWS に接続します。
-
[AWS Explorer] というラベルの左側のパネルで、オブジェクトをアップロードするバケットを右クリックします。
-
[署名付き URL を作成] を選択します。
-
ポップアップウィンドウで、署名付き URL の有効期限日時を設定します。
-
[オブジェクトキー] で、アップロードするファイルの名前を設定します。アップロードするファイルは、この名前と正確に一致する必要があります。バケットに同じキーを持つオブジェクトがバケット内に既に存在する場合、Amazon S3 は既存のオブジェクトを新しくアップロードしたオブジェクトで置き換えます。
-
[PUT] を選択し、この署名付き URL をオブジェクトのアップロードに使用するように指定します。
-
[生成] ボタンを選択します。
-
URL をクリップボードにコピーするには、[コピー] を選択します。
-
この URL を使用するには、curl
コマンドを使って PUT リクエストを送信できます。ファイルへのフルパスと署名付き URL 自体を含めます。
curl -X PUT -T "/path/to/file
" "presigned URL
"
S3 アクションを期間限定で実行できる署名付き URL を生成できます。
AWS CLI または AWS SDK を使用する場合、署名付き URL の有効期限は最大 7 日間に設定できます。詳細については、「署名付き URL の有効期限」を参照してください。
- Python
-
次の Python スクリプトは、オブジェクトを S3 汎用バケットにアップロードするための PUT
署名付き URL を生成します。
-
スクリプトの内容をコピーし、「put-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,
"put_object",
{"Bucket": args.bucket, "Key": args.key},
1000
)
print(f"Generated PUT presigned URL: {url}")
if __name__ == "__main__":
main()
-
ファイルをアップロードするための PUT
署名付き URL を生成するには、バケット名と目的のオブジェクトパスを使用して次のスクリプトを実行します。
次のコマンドでは、値の例を使用しています。ユーザー入力プレースホルダー
を独自の情報に置き換えます。
python put-only-url.py
amzn-s3-demo-bucket
<object-path>
スクリプトは以下の PUT
署名付き URL を出力します。
Generated PUT presigned URL: https://amzn-s3-demo-bucket
.s3.amazonaws.com/object.txt
?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE
&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D
&Expires=1741978496
-
生成された署名付き URL と curl を使用してファイルをアップロードできるようになりました。
curl -X PUT -T "path/to/your/local/file"
"generated-presigned-url"
AWS SDK を使用してオブジェクトをアップロードするための署名付き URL を生成する例の詳細については、「AWS SDK を使用して Amazon S3 の署名付き URL を作成する」を参照してください。