公開アクセスを防止する

設定

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

概要

公開アクセスを防止すると、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 または inherited のいずれかになります。

  • バケットの公開アクセスの防止メタデータが enforced に設定されている場合は、バケットに公開アクセスの防止が適用されます。

  • バケットの公開アクセスの防止メタデータが inherited に設定されている場合、公開アクセスの防止は storage.publicAccessPrevention 組織ポリシーの制約によって決定されます。

    • バケットを含むプロジェクトstorage.publicAccessPreventionTrue に設定されている場合、そのバケットには公開アクセスの防止が適用されます。

    • バケットを含むプロジェクトで storage.publicAccessPreventionFalse に設定されている場合、そのバケットには公開アクセスの防止は適用されません。

    • バケットを含むプロジェクトに storage.publicAccessPrevention が設定されていない場合、プロジェクトを含むフォルダ(存在する場合)で設定された storage.publicAccessPrevention 値によって公開アクセスの防止が決定されます。

      • 同様に、バケットを含むフォルダでも storage.publicAccessPrevention の値を設定していない場合、プロジェクトを含む組織で設定された storage.publicAccessPrevention 値によって公開アクセスの防止が決定されます。

      • storage.publicAccessPrevention がどのリソースにも設定されていない場合、バケットに公開アクセスの防止は適用されません。

無効にした場合の動作

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

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

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

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

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

考慮事項

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

    • アプリケーションが allUsersallAuthenticatedUsers を使用してデータへのアクセスや一般公開リソースの作成を行っている場合、公開アクセスの防止を有効にすると、アプリケーションが機能しなくなることがあります。他のアプリが依存している可能性のある一般公開リソースを特定する方法については、次のコンテンツを開いてください。

      一般公開リソースを特定する方法

      一般公開アクセスの防止を適用する前に、公開リソースのインベントリを取得して、公開されているデータと依存関係にある他のワークロードが中断されないようにすることをおすすめします。一般公開されているバケット、オブジェクト、マネージド フォルダは、次の方法で見つけることができます。

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

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

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

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

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

次のステップ