署名付き URL の使用 - Amazon Simple Storage Service

署名付き URL の使用

バケットポリシーを更新せずに、Amazon S3 内のオブジェクトへの時間制限付きのアクセス権を付与するには、署名付き URL を使用できます。署名付き URL をブラウザに入力するか、プログラムで使用してオブジェクトをダウンロードできます。署名付き URL で使用される認証情報は、URL を生成した AWS ユーザーのものです。

また、署名付き URL を使用して、Amazon S3 バケットに対する特定のオブジェクトのアップロードを他のユーザーに許可することもできます。これにより、他のユーザーは AWS のセキュリティ認証情報やアクセス許可を持たなくてもアップロードできます。署名付き URL で指定したのと同じキーを持つオブジェクトがバケット内に既に存在する場合、Amazon S3 は既存のオブジェクトをアップロードしたオブジェクトで置き換えます。

署名付き URL は、有効期限日時まで複数回使用できます。

署名付き URL を作成する場合には、ご自身のセキュリティ認証情報を設定し、さらに次の情報を指定する必要があります。

  • Amazon S3 バケット

  • オブジェクトキー (オブジェクトのダウンロード先は Amazon S3 バケット、アップロード先はアップロード先のファイル名)

  • HTTP メソッド (オブジェクトをダウンロードする場合は GET、アップロードする場合は PUT)

  • 有効期限の時間間隔

現在、Amazon S3 の署名付き URL では、オブジェクトをアップロードする際に次のデータ整合性チェックサムアルゴリズム (CRC32、CRC32C、SHA-1、SHA-256) を使用することはできません。アップロード後にオブジェクトの整合性を確認するには、署名付き URL でアップロードするときに、オブジェクトの MD5 ダイジェストを指定できます。オブジェクトの整合性の詳細については、「オブジェクトの整合性をチェックする」を参照してください。

署名付き URL を作成できるユーザー

有効なセキュリティ認証情報を持つすべてのユーザーが、署名付き URL を作成できます。しかし、何らかの理由でオブジェクトに正常にアクセスするには、署名付き URL を使用して行うオペレーションの実行許可を持っているユーザーが、署名付き URL を作成する必要があります。

署名付き URL の作成に使用できる認証情報のタイプは以下のとおりです。

  • IAM インスタンスプロファイル – 最大 6 時間有効。

  • AWS Security Token Service — 長期のセキュリティ認証情報を使用して署名した場合、または一時的な認証情報の有効期間 (どちらか早い方) で最長 36 時間有効です。

  • IAM ユーザー – AWS Signature Version 4 を使用している場合は、最大 7 日間まで有効。

    最大 7 日間有効な署名付き URL を作成するには、まず、署名付き URL の作成に使用するメソッドへの IAM ユーザー認証情報 (アクセスキーとシークレットキー) の委任を行います。

注記

一時的な認証情報を使用して署名付き URL を作成した場合、その認証情報が有効期限切れになると、URL は失効します。URL の有効期限がより長い場合でも失効します。一時的なセキュリティ認証情報の有効期間については、IAM ユーザーガイドの「AWS STS API オペレーションの比較」を参照してください。

署名付き URL の有効期限

署名付き URL は、URL の生成時に指定した期間にわたって有効です。Amazon S3 コンソールで署名付き URL を作成した場合、有効期限は 1 分から 12 時間の間で設定できます。AWS CLI または AWS SDK を使用する場合、有効期限は最大 7 日間に設定できます。

一時トークンを使用して署名付き URL を作成した場合、トークンが有効期限切れになると、URL の有効期限より前であってもその URL は失効します。認証情報の使用が有効期限にどのように影響するかについては、「署名付き URL を作成できるユーザー」を参照してください。

Amazon S3 は、HTTP リクエスト時に署名付き URL の有効期限日時を確認します。例えば、有効期限が切れる時刻の直前にクライアントが大きなファイルのダウンロードを開始した場合は、ダウンロード中に有効期限時刻が経過しても、そのダウンロードは継続されます。しかし、接続が中断し、クライアントがダウンロードを再開しようとした時点で有効期限切れの時刻が経過している場合には、そのダウンロードは失敗します。

署名付き URL 機能の制限

署名付き URL の機能は、それを作成したユーザーの許可によって制限されます。本質的に署名付き URL は、それらを保有しているユーザーに対しアクセスを許可するためのベアラートークンです。そのため、適切に保護することをお勧めします。署名付き URL の使用を制限するために使用できるいくつかの方法を以下に示します。

AWS Signature Version 4 (SigV4)

署名済み URL リクエストが AWS Signature Version 4 (SigV4) により認証される際に実行する特定の動作を適用するには、バケットポリシーとアクセスポイントポリシーで条件キーを使用します。例えば、次のバケットポリシーでは、s3:signatureAge 条件を使用することで、署名が作成後 10 分を超えている場合、DOC-EXAMPLE-BUCKET1 バケット内のオブジェクトに対する Amazon S3 の署名付き URL リクエストをすべて拒否します。この例を実行するには、user input placeholders をユーザー自身の情報に置き換えます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Deny a presigned URL request if the signature is more than 10 min old", "Effect": "Deny", "Principal": {"AWS":"*"}, "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "Condition": { "NumericGreaterThan": { "s3:signatureAge": 600000 } } } ] }

AWS Signature Version 4 に関連するポリシーキーの詳細については、「Amazon Simple Storage Service API リファレンス」の「AWS Signature Version 4 認証固有のポリシーキー」を参照してください。

ネットワークパスでの制限

署名付き URL の使用と、特定のネットワークパスへのすべての Amazon S3 アクセスを制限する場合は、AWS Identity and Access Management (IAM) ポリシーを記述できます。これらのポリシーは、呼び出しを作成する IAM プリンシパル、Simple Storage Service (Amazon S3) バケット、またはその両方に設定できます。

IAM プリンシパルでのネットワークパスの制限では、これらの認証情報のユーザーは、指定したネットワークからリクエストを送信する必要があります。バケットまたはアクセスポイントの制限により、そのリソースに対するすべてのリクエストは、指定したネットワークから発信される必要があります。これらの制限は、署名付き URL のシナリオ以外でも適用されます。

どの IAM グローバル条件キーを使用するかは、エンドポイントのタイプによって異なります。Amazon S3 のパブリックエンドポイントを使用している場合は、aws:SourceIp を使用します。Amazon S3 への仮想プライベートクラウド (VPC) エンドポイントを使用している場合は、aws:SourceVpc または aws:SourceVpce を使用します。

次の IAM ポリシーステートメントでは、プリンシパルは、指定されたネットワーク範囲からのみ AWS にアクセスする必要があります。このポリシーステートメントでは、すべてのアクセスがその範囲から発信される必要があります。これは、Amazon S3 の署名付き URL を使用しているユーザーにも当てはまります。この例を実行するには、user input placeholders をユーザー自身の情報に置き換えます。

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

aws:SourceIp AWS グローバル条件キーを使用して Amazon S3 バケットへのアクセスを特定のネットワーク範囲に制限する他のバケットポリシーの例については、「特定の IP アドレスに基づくアクセス管理」を参照してください。