このページでは、公開アクセスを防止するためのバケットの設定と、それに関連する組織のポリシーの制約について説明します。設定または制約を使用することで、データへのアクセスを許可するエンティティを制限できます。たとえば、インターネットから匿名でアクセスするユーザーを防ぐことができます。アクセス制御オプションの概要については、アクセス制御の概要をご覧ください。
概要
公開アクセスを防止すると、Cloud Storage バケットやオブジェクトが誤って外部に公開されることを防ぐことができます。公開アクセスの防止を適用すると、IAM ポリシーまたは ACL により、該当するバケット内のデータを公開できなくなります。公開アクセスを防止するには、次の 2 つの方法があります。
個々のバケットに公開アクセスの防止を適用できます。
バケットが組織内に含まれている場合、組織のポリシーの制約
storage.publicAccessPrevention
を使用して、プロジェクト、フォルダ、または組織レベルで公開アクセスの防止を適用できます。
公開アクセスの防止を使用すべきか
データが公共のインターネットに公開されることがない場合は、公開アクセスの防止を使用する必要があります。リソースのセキュリティを最大限に高めるため、組織のできる限り高いレベルで公開アクセスの防止を適用してください。
静的ウェブサイトのホスティングなど、バケットを公開する必要がある場合は、公開アクセスの防止を使用してはなりません。公開アクセスの防止を適用している組織で、このようなバケットを例外として扱う場合は、バケットを含む特定のプロジェクトで公開アクセスの防止を無効にします。
適用した場合の動作
公開アクセスの防止が適用されるリソースは、次のように動作します。
allUsers
とallAuthenticatedUsers
で許可されたバケットとオブジェクトへのリクエストは失敗し、HTTP401
または403
のステータス コードが返されます。allUsers
とallAuthenticatedUsers
にアクセスを許可する既存の IAM ポリシーと ACL はそのまま残りますが、公開アクセスの防止によりオーバーライドされます。次の場合を除き、IAM ポリシーまたは ACL で
allUsers
とallAuthenticatedUsers
を使用してバケットまたはオブジェクトを作成するリクエストは失敗します。- バケット内に
allUsers
を含むデフォルト オブジェクトの ACL がある場合、そのバケット内のオブジェクトの作成リクエストは成功します。このようなオブジェクトの ACL にはallUsers
が含まれていますが、allUsers
は公開アクセスの防止によってオーバーライドされます。
- バケット内に
allUsers
またはallAuthenticatedUsers
を IAM ポリシーまたは ACL に追加するリクエストは失敗し、412 Precondition Failed
が返されます。
継承
バケットの設定で公開アクセスの防止が明示的に適用されていなくても、公開アクセスの防止が継承されることがあります。たとえば、バケットが存在するプロジェクト、フォルダ、または組織に組織のポリシーの制約 storage.publicAccessPrevention
が設定されている場合、このような継承が行われます。このため、バケットの状態は enforced
または inherited
のいずれかになります。
バケットの公開アクセスの防止メタデータが
enforced
に設定されている場合は、バケットに公開アクセスの防止が適用されます。バケットの公開アクセスの防止メタデータが
inherited
に設定されている場合、公開アクセスの防止はstorage.publicAccessPrevention
組織ポリシーの制約によって決定されます。バケットを含むプロジェクトで
storage.publicAccessPrevention
がTrue
に設定されている場合、そのバケットには公開アクセスの防止が適用されます。バケットを含むプロジェクトで
storage.publicAccessPrevention
がFalse
に設定されている場合、そのバケットには公開アクセスの防止は適用されません。バケットを含むプロジェクトに
storage.publicAccessPrevention
が設定されていない場合、プロジェクトを含むフォルダ(存在する場合)で設定されたstorage.publicAccessPrevention
値によって公開アクセスの防止が決定されます。同様に、バケットを含むフォルダでも
storage.publicAccessPrevention
の値を設定していない場合、プロジェクトを含む組織で設定されたstorage.publicAccessPrevention
値によって公開アクセスの防止が決定されます。storage.publicAccessPrevention
がどのリソースにも設定されていない場合、バケットに公開アクセスの防止は適用されません。
無効にした場合の動作
リソースで公開アクセスの防止を無効にすると、次のように処理されます。
allUsers
とallAuthenticatedUsers
へのアクセスを許可する既存の IAM ポリシーと ACL が有効になり、データが一般公開されます。allUsers
とallAuthenticatedUsers
へのアクセスを許可する IAM ポリシーまたは ACL を作成するリクエストが成功します。公開 ACL を使用せずに公開アクセスの防止で作成されたオブジェクトが、一般公開されているバケットで作成された場合、一般公開される可能性があります。
プロジェクト、フォルダ、組織に対する公開アクセスの防止はいつでも無効にできます。enforced
が設定されたバケットでは、バケットを含むプロジェクト、フォルダ、組織に対して公開アクセスの防止を無効にしても、公開アクセスの防止が引き続き適用されます。
考慮事項
既存のリソースに公開アクセスの防止を適用すると、
allUsers
とallAuthenticatedUsers
の既存の承認と新規追加がすべてブロックされます。これにより、バケットが次のような影響を受けることがあります。アプリケーションが
allUsers
とallAuthenticatedUsers
を使用してデータへのアクセスや一般公開リソースの作成を行っている場合、公開アクセスの防止を有効にすると、アプリケーションが機能しなくなることがあります。他のアプリが依存している可能性のある一般公開リソースを特定する方法については、次のコンテンツを開いてください。一般公開リソースを特定する方法
一般公開アクセスの防止を適用する前に、公開リソースのインベントリを取得して、公開されているデータと依存関係にある他のワークロードが中断されないようにすることをおすすめします。一般公開されているバケット、オブジェクト、マネージド フォルダは、次の方法で見つけることができます。
- 一般公開データにアクセスしている可能性のあるワークロードを特定するには、使用状況ログを設定します。これにより、一般公開リソースに対するデータアクセス リクエストに関する情報を取得できます。
-
バケットが一般公開されているかどうかを確認するには、バケットの IAM ポリシーを確認します。プリンシパル
allUsers
またはallAuthenticatedUsers
にロールを付与するポリシーにより、バケットが一般公開される可能性があります。個別のバケットの IAM ポリシーを取得する代わりに、Cloud Asset Inventory を使用して、プロジェクト、フォルダ、組織内のすべてのバケットに適用されるポリシーを確認できます。バケット内にマネージド フォルダがある場合は、マネージド フォルダの IAM ポリシーを確認して、一般公開されているマネージド フォルダを特定することをおすすめします。
- 個別のオブジェクトが一般公開されているかどうかを確認するには、オブジェクトの ACL を確認します。プリンシパル
allUsers
またはallAuthenticatedUsers
にアクセス権を付与する ACL により、オブジェクトが一般公開される可能性があります。
Cloud Audit Logs には、一般公開オブジェクトへのアクセスは記録されません。データアクセス ログが有効になっているときに公開アクセスの防止を適用すると、ログの生成が増加する場合があります。これは、ログ取り込みの割り当ての対象となるため、Cloud Audit Logs の料金が発生する場合があります。以前に一般公開され、ログに記録されていなかったアクセスが、ログに記録される特定の認可に関連付けられたために、このような増加が発生する可能性があります。
署名付き URL は、範囲を限定したアクセスをすべてのユーザーに許可するもので、公開アクセスの防止は適用されません。
組織に関連付けられていないプロジェクトに組織のポリシーは使用できません。このようなプロジェクトのバケットには、バケットレベルで設定を行う必要があります。
更新後の読み取りでは、公開アクセスの防止は強整合性となりますが、適用が有効になるまでに最大で 10 分ほどかかることがあります。
オブジェクトの
Cache-Control
設定によっては、適用後しばらくの間、インターネット キャッシュを介してオブジェクトが公開される可能性があります。たとえば、オブジェクトのCache-Control:max-age
がデフォルトの 3,600 秒に設定されている場合、その期間内はオブジェクトがインターネット キャッシュに保存されます。
次のステップ
- 公開アクセスの防止の使用方法について学習する。
- 組織のポリシーの詳細を確認する。