公開アクセスの防止

サンプルに移動

このページでは、公開アクセスを防止するためのバケットの設定と、それに関連する組織のポリシーの制約について説明します。設定または制約を使用することで、データへのアクセスを許可するエンティティを制限できます。たとえば、インターネットから匿名でアクセスするユーザーを防ぐことができます。アクセス制御オプションの概要については、アクセス制御の概要をご覧ください。

概要

公開アクセスを防止すると、Cloud Storage バケットやオブジェクトが誤って外部に公開されることを防ぐことができます。公開アクセスの防止を適用すると、IAM ポリシーまたは ACL により、該当するバケット内のデータを公開できなくなります。公開アクセスを防止するには、次の 2 つの方法があります。

公開アクセスの防止を使用すべきか

データが公共のインターネットに公開されることがない場合は、公開アクセスの防止を使用する必要があります。リソースのセキュリティを最大限に高めるため、組織のできる限り高いレベルで公開アクセスの防止を適用してください。

静的ウェブサイトのホスティングなど、バケットを公開する必要がある場合は、公開アクセスの防止を使用してはなりません。公開アクセスの防止を適用している組織で、このようなバケットを例外として扱う場合は、バケットを含む特定のプロジェクトで公開アクセスの防止を無効にします。

適用した場合の動作

公開アクセスの防止が適用されるリソースは、次のように動作します。

  • allUsersallAuthenticatedUsers で許可されたバケットとオブジェクトへのリクエストは失敗し、HTTP 401 または 403 ステータス コードが返されます。

  • allUsersallAuthenticatedUsers にアクセスを許可する既存の IAM ポリシーと ACL はそのまま残りますが、公開アクセスの防止によりオーバーライドされます。

  • 次の場合を除き、IAM ポリシーまたは ACL で allUsersallAuthenticatedUsers を使用してバケットまたはオブジェクトを作成するリクエストは失敗します。

    • バケット内に allUsers を含むデフォルト オブジェクトの ACL がある場合、そのバケット内のオブジェクトの作成リクエストは成功します。このようなオブジェクトの ACL には allUsers が含まれていますが、allUsers は公開アクセスの防止によってオーバーライドされます。
  • allUsers または allAuthenticatedUsers を IAM ポリシーまたは ACL に追加するリクエストは失敗し、412 Precondition Failed が返されます。

継承

バケットの設定で公開アクセスの防止が明示的に適用されていなくても、公開アクセスの防止が継承されることがあります。たとえば、バケットが存在するプロジェクト、フォルダ、または組織に組織のポリシーの制約 storage.publicAccessPrevention が設定されている場合、このような継承が行われます。このため、バケットの状態は enforced または unspecified のいずれかになります。

バケットの状態が unspecified の場合、バケットはその状態を親プロジェクトから継承しています。デフォルトでは、プロジェクトはそのフォルダまたは組織から公開アクセス防止の状態を継承します。ただし、プロジェクトに storage.publicAccessPrevention を明示的に有効または無効に設定すると、継承される値をオーバーライドできます。たとえば、プロジェクトに storage.publicAccessPrevention を設定すると、フォルダまたは組織レベルでの公開アクセス防止の状態に関係なく、unspecified 設定を含むプロジェクトのバケットには公開アクセスの防止が適用されません。

無効にした場合の動作

リソースで公開アクセスの防止を無効にすると、次のように処理されます。

  • allUsersallAuthenticatedUsers へのアクセスを許可する既存の IAM ポリシーと ACL が有効になり、データが一般公開されます。

  • allUsersallAuthenticatedUsers へのアクセスを許可する IAM ポリシーまたは ACL を作成するリクエストが成功します。

  • 公開 ACL を使用せずに公開アクセスの防止で作成されたオブジェクトが、一般公開されているバケットで作成された場合、一般公開される可能性があります。

プロジェクト、フォルダ、組織に対する公開アクセスの防止はいつでも無効にできます。enforced が設定されたバケットでは、バケットを含むプロジェクト、フォルダ、組織に対して公開アクセスの防止を無効にしても、公開アクセスの防止が引き続き適用されます。

公開アクセスの防止に対する IAM 権限

プロジェクト、フォルダまたは組織レベルで公開アクセス防止の組織ポリシーを管理するには、IAM の orgpolicy.* 権限が必要です。この権限は、roles/orgpolicy.policyAdmin IAM ロールにあります。

バケットで公開アクセスの防止設定を管理するには、storage.buckets.update 権限と storage.buckets.setIamPolicy IAM 権限の両方が必要です。これらの権限は、roles/storage.admin ロールに含まれています。

バケットの親プロジェクトに、組織のポリシーによって公開アクセスの防止が適用されている場合、ストレージ管理者はバケットを公開アクセス防止の対象外にできません。

考慮事項

  • 既存のリソースに公開アクセスの防止を適用すると、allUsersallAuthenticatedUsers の既存の承認と新規追加がすべてブロックされます。これにより、バケットが次のような影響を受けることがあります。

    • アプリケーションが allUsersallAuthenticatedUsers を使用してデータへのアクセスや一般公開リソースの作成を行っている場合、公開アクセスの防止を有効にすると、アプリケーションが機能しなくなることがあります。

    • Cloud Audit Logs には、一般公開オブジェクトへのアクセスは記録されません。データアクセス ログが有効になっているときに公開アクセスの防止を適用すると、ログの生成が増加する場合があります。これは、ログ取り込みの割り当ての対象となるため、Cloud Audit Logs の料金が発生する場合があります。以前に一般公開され、ログに記録されていなかったアクセスが、ログに記録される特定の認可に関連付けられたために、このような増加が発生する可能性があります。

  • 署名付き URL は、範囲を限定したアクセスをすべてのユーザーに許可するもので、公開アクセスの防止は適用されません。

  • 組織に関連付けられていないプロジェクトに組織のポリシーは使用できません。このようなプロジェクトのバケットには、バケットレベルで設定を行う必要があります。

  • 更新後の読み取りでは、公開アクセスの防止は強整合性となりますが、適用が有効になるまでに最大で 10 分ほどかかることがあります。

  • オブジェクトの Cache-Control 設定によっては、適用後しばらくの間、インターネット キャッシュを介してオブジェクトが公開される可能性があります。たとえば、オブジェクトの Cache-Control:max-age がデフォルトの 3,600 秒に設定されている場合、その期間内はオブジェクトがインターネット キャッシュに保存されます。

次のステップ