クロスオリジン リソース シェアリング(CORS)は、さまざまな生成元のリソース間でのやり取りを可能にし、通常は悪意のある動作を防ぐために禁止されています。Cloud Storage バケットの CORS 構成の設定方法と、バケットに設定された CORS 構成の表示方法について説明します。バケットの既存の構成を無効にする構成など、CORS 構成の例については、CORS の構成例をご覧ください。
バケットに CORS 構成を設定する
バケットの CORS 構成を設定するには、バケットで受け入れられるリクエストのタイプを識別する情報(HTTP メソッドや発信元のドメインなど)を指定します。
バケットの CORS 構成を設定するには、次の操作を行います。
コンソール
Google Cloud コンソールを使用して CORS を管理することはできません。代わりに gcloud CLI を使用してください。
コマンドライン
適用する CORS 構成を含む JSON ファイルを作成します。サンプルの JSON ファイルについては、構成例をご覧ください。
gcloud storage buckets update
コマンドを使用し、--cors-file
フラグを指定します。gcloud storage buckets update gs://BUCKET_NAME --cors-file=CORS_CONFIG_FILE
ここで
BUCKET_NAME
は、関連するバケットの名前です。例:my-bucket
。CORS_CONFIG_FILE
は、手順 1 で作成した JSON ファイルへのパスです。
クライアント ライブラリ
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
次のサンプルでは、バケットに CORS 構成を設定しています。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
次のサンプルでは、バケットに CORS 構成を設定しています。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
次のサンプルでは、バケットに CORS 構成を設定しています。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
次のサンプルでは、バケットに CORS 構成を設定しています。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
次のサンプルでは、バケットに CORS 構成を設定しています。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
次のサンプルでは、バケットに CORS 構成を設定しています。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
次のサンプルでは、バケットに CORS 構成を設定しています。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
次のサンプルでは、バケットに CORS 構成を設定しています。
REST API
JSON API
- OAuth 2.0 Playground から認可アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。手順については、API 認証をご覧ください。
適用する CORS 構成を含む JSON ファイルを作成します。サンプルの JSON ファイルについては、構成例をご覧ください。
cURL
を使用して JSON API を呼び出し、PATCH
Bucket リクエストを行います。curl --request PATCH \ 'https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=cors' \ --header 'Authorization: Bearer OAUTH2_TOKEN' \ --header 'Content-Type: application/json' \ --data-binary @CORS_CONFIG_FILE
ここで
BUCKET_NAME
はバケットの名前です。例:my-bucket
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。CORS_CONFIG_FILE
は、手順 2 で作成した JSON ファイルへのパスです。
XML API
- OAuth 2.0 Playground から認証アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。手順については、API 認証をご覧ください。
適用する CORS 構成を含む XML ファイルを作成します。サンプルの XML ファイルについては、構成例をご覧ください。
cURL
を使用して、?cors
をスコープとするPUT Bucket
リクエストで XML API を呼び出します。curl -X PUT --data-binary @CORS_CONFIG_FILE \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "x-goog-project-id: PROJECT_ID" \ "https://storage.googleapis.com/BUCKET_NAME?cors"
ここで
BUCKET_NAME
はバケットの名前です。例:my-bucket
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。PROJECT_ID
は、バケットに関連付けられているプロジェクトの ID です。例:my-project
CORS_CONFIG_FILE
は、手順 2 で作成した XML ファイルへのパスです。
バケットの CORS 構成を表示する
バケットの CORS 構成を表示するには:
コンソール
Google Cloud コンソールを使用して CORS を管理することはできません。代わりに gcloud CLI を使用してください。
コマンドライン
gcloud storage buckets describe
コマンドを使用し、--format
フラグを指定します。
gcloud storage buckets describe gs://BUCKET_NAME --format="default(cors_config)"
ここで、BUCKET_NAME
は、CORS 構成を表示するバケットの名前です。例: my-bucket
。
クライアント ライブラリ
クライアント ライブラリを使用してバケットの CORS 構成を表示するには、バケットのメタデータを表示する手順に沿って、レスポンスで CORS フィールドを探します。
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
REST API
JSON API
- OAuth 2.0 Playground から認可アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。手順については、API 認証をご覧ください。
cURL
を使用して JSON API を呼び出し、GET
Bucket リクエストを行います。curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=cors"
ここで
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンの名前です。BUCKET_NAME
は、関連するバケットの名前です。例:my-bucket
XML API
- OAuth 2.0 Playground から認証アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。手順については、API 認証をご覧ください。
cURL
を使用して、?cors
をスコープとするGET
バケット リクエストで XML API を呼び出します。curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME?cors"
ここで
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンの名前です。BUCKET_NAME
は、関連するバケットの名前です。例:my-bucket
CORS リクエストのトラブルシューティング
別の生成元から Cloud Storage バケットにアクセスしているときに予期しない動作が発生した場合は、次の手順を試してください。
ターゲット バケットの CORS の構成を確認します。複数の CORS 構成エントリがある場合は、トラブルシューティングに使用するリクエスト値が、1 つの CORS 構成エントリの値にマッピングされていることを確認します。
CORS リクエストを許可しない
storage.cloud.google.com
エンドポイントに対してリクエストを行っていないことを確認します。CORS でサポートされているエンドポイントの詳細については、Cloud Storage CORS のサポートをご覧ください。任意のツールを使用して、リクエストとレスポンスをレビューします。Chrome ブラウザでは、標準のデベロッパー ツールを使用してこの情報を確認できます。
- ブラウザのツールバーで Chrome メニュー(more_vert)をクリックします。
- [その他のツール] > [デベロッパー ツール] の順に選択します。
- [Network] タブをクリックします。
- アプリケーションまたはコマンドラインから、リクエストを送信します。
- ネットワーク アクティビティが表示されているペインで、リクエストを探します。
- [Name] 列で、リクエストに対応する名前をクリックします。
- [Headers] タブをクリックしてレスポンス ヘッダーを確認するか、[Response] タブをクリックしてレスポンスの内容を表示します。
リクエストとレスポンスが表示されない場合は、ブラウザのキャッシュに以前の失敗したプリフライト リクエストが入っている可能性があります。ブラウザのキャッシュをクリアすると、プリフライトのキャッシュもクリアされます。クリアされない場合は、CORS 構成の
MaxAgeSec
値を低い値に設定し、古いMaxAgeSec
の設定時間待機した後、再度リクエストを試してみてください。指定されていない場合のデフォルト値は 1,800(30 分)です。これにより新しいプリフライト リクエストが実行されて、新しい CORS 構成が取得され、キャッシュ エントリが削除されます。問題をデバッグし終えたら、MaxAgeSec
を高い値に戻して、バケットへのプリフライトのトラフィックを削減します。リクエストに
Origin
ヘッダーがあること、およびヘッダー値がバケットの CORS 構成内のOrigins
値の少なくとも 1 つと一致することを確認します。値のスキーム、ホスト、およびポートが正確に一致している必要があります。受け入れ可能な一致の例を次に示します。http://origin.example.com
はhttp://origin.example.com:80
と一致しています(80 がデフォルトの HTTP ポートであるため)が、https://origin.example.com
、http://origin.example.com:8080
、http://origin.example.com:5151
、http://sub.origin.example.com
とは一致していません。https://example.com:443
はhttps://example.com
と一致しますが、http://example.com
、http://example.com:443
とは一致しません。http://localhost:8080
のみがhttp://localhost:8080
と正確に一致していて、http://localhost:5555
やhttp://localhost.example.com:8080
には一致していません。
リクエストの HTTP メソッド(簡単なリクエストの場合)、または
Access-Control-Request-Method
で指定されたメソッド(プリフライト リクエストの場合)が、バケットの CORS 構成内のMethods
値の少なくとも 1 つと一致していることを確認します。これがプリフライト リクエストの場合は、
Access-Control-Request-Header
ヘッダーが含まれているかどうかを確認します。含まれている場合は、各Access-Control-Request-Header
値がバケットの CORS 構成内のResponseHeader
値と一致することを確認します。プリフライト リクエストが正常に終了し、レスポンスに CORS ヘッダーが含まれるためには、Access-Control-Request-Header
に指定されたすべてのヘッダーが CORS 構成に含まれていることが必要です。