均一なバケットレベルのアクセス

設定

このページでは、均一なバケットレベルのアクセスについて説明します。これを使用して、Cloud Storage リソースへのアクセスを均一に管理できます。均一なバケットレベルのアクセスをバケットで有効にすると、アクセス制御リスト(ACL)が無効になり、バケットレベルの Identity and Access Management(IAM)権限だけが、そのバケットとその中のオブジェクトへのアクセス権を付与します。オブジェクト ACL によって付与されたすべてのアクセス権を取り消して、バケット ACL を使用した権限の管理をできないようにします。

概要

Cloud Storage には、バケットとオブジェクトにアクセスするためのユーザー権限を付与する 2 つのシステムが用意されています。そのシステムは、IAMアクセス制御リスト(ACL)です。この 2 つは並行して機能します。ユーザーに Cloud Storage リソースへのアクセスを許可するには、どちらか一方の方法でユーザーに権限を付与するだけでかまいません。IAM は Google Cloud 全体で使用され、バケットレベルとプロジェクト レベルでさまざまな権限を付与できます。ACL は Cloud Storage でのみ使用されます。権限オプションは制限されますが、オブジェクト単位で権限を付与できます。

Cloud Storage の均一なバケットレベルのアクセスを使用すると、均一な権限管理を行うことができます。この機能をバケットに対して使用すると、バケット内のすべての Cloud Storage リソースの ACL が無効になります。Cloud Storage リソースへのアクセスは、IAM によってのみ許可されます。均一なバケットレベルのアクセスは、バケットで 90 日間連続して有効にしていた場合、無効にすることはできません。

均一なバケットレベルのアクセスを使用する必要がある場合

一般に、Cloud Storage リソースへのアクセス権の付与方法が統一され、簡素化されるため、均一なバケットレベルのアクセスを使用することをおすすめします。

均一なバケットレベルのアクセスを使用すると、ドメインで制限された共有Workforce Identity の連携IAM Conditions などの Google Cloud セキュリティ機能も使用できるようになります。

次の場合は、均一なバケットレベルのアクセスを使用せずに、きめ細かい ACL を使用してください。

  • レガシー ACL を使用してバケット内の特定のオブジェクトへのアクセスを制御する。

  • オブジェクトのアップローダに特定のオブジェクトに対しての完全アクセス権を許可しつつ、バケット内の他のオブジェクトに対する権限は制限する。

  • XML API を使用してバケットの権限を表示または設定する。

有効にした場合の動作

均一なバケットレベルのアクセスは、新しいバケットを作成するときに有効にできます。また、既存のバケットに対して明示的に均一なバケットレベルのアクセスを有効化することもできます。

有効にすると、バケットは次のように動作します。

  • バケットとオブジェクトの ACL の設定、読み取り、変更のリクエスト。これらのリクエストは、400 Bad Request エラーで失敗します。

  • バケットまたはオブジェクト メタデータのフル プロジェクションの JSON API リクエスト。リクエストすると、レスポンスの一部として空の ACL リストが返されます。

  • 個々のオブジェクトの所有権。この所有権によって許可されたアクセス権は取り消され、バケットとオブジェクト メタデータのリクエストから owner フィールドが削除されます。

  • 作成時に、バケットは特別な IAM のロールを受け取ります。新しいバケットを作成するときに均一なバケットレベルのアクセスを有効にすると、そのバケットは追加の IAM ロールを取得します。

    • これにより、バケットの標準のデフォルト オブジェクト ACL から継承したオブジェクトの権限が維持されます。

    • 既存のバケットで均一なバケットレベルのアクセスを有効にする場合は、そのようなロールを手動で適用する必要があります。バケットのデフォルト オブジェクト ACL をすでに変更している場合は、異なる IAM ロールのセットの適用が必要と考えられます。

元に戻した場合の動作

均一なバケットレベルのアクセスを無効にして ACL を使用できるようにするために、Cloud Storage は既存の ACL を保存します。均一なバケットレベルのアクセスを無効にすると、次のようになります。

  • 保存された ACL でオブジェクトが制御されます。

  • 均一なバケットレベルのアクセスを有効にした後にバケットに追加されたオブジェクトは、バケットによって使用されるデフォルトのオブジェクト ACL に従って、ACL を取得します。

既存のバケットを移行する際の考慮事項

既存のバケットで均一なバケットレベルのアクセスを有効にする場合は、これまで ACL に基づいて付与されていたユーザーとサービスのアクセス権が確実に IAM に移行されたことを確認する必要があります。このセクションでは、バケットを均一なバケットレベルのアクセスに移行するときに行う必要があるいくつかの手順の概要を説明します。なお、ACL と IAM の間ではバケットの権限が同期されているため、確認が必要なのはバケット内のオブジェクトへのアクセス権についてであり、バケットへのアクセス権ではないことにご注意ください。

バケットレベルの IAM 権限によるデータの過度な露出を確認する

IAM に対して ACL に相当する権限を割り当てる前に、次の点を考慮してください。

  • バケットレベルで適用される IAM 権限は、バケット内のすべてのオブジェクトに適用されますが、一方オブジェクトの ACL は、オブジェクトごとに異なる可能性があります。

適用したいアクセス権がオブジェクトごとに異なる場合は、オブジェクトを別々のバケットにグループ化する必要があります。その際、同じ権限を持つオブジェクトごとにグループに分ける必要があります。

オブジェクト ACL の使用状況を確認する

均一のバケットレベルのアクセスに移行する場合、バケット内のオブジェクトについて、オブジェクトに適用された ACL を介してオブジェクトがアクセスされていることを確認する必要があります。この確認のために、Cloud Monitoring には ACL の使用状況を追跡する指標があります。この指標の値が、ユーザーやサービスのオブジェクトへのアクセスが ACL に依存していることを示す場合は、均一のバケットレベルのアクセスを有効にする前に、IAM の同等の権限をバケットに割り当てておく必要があります。Monitoring で ACL の使用状況を確認する際のガイドについては、ACL 使用状況の確認をご覧ください。

この指標を使用して、均一のバケットレベルのアクセスを有効にするとワークフローが壊れるかどうかを判断します。

指標 説明
storage.googleapis.com/authz/acl_operations_count 均一なバケットレベルのアクセスが有効にされると無効になる ACL オペレーションの数。ACL オペレーションのタイプとバケットごとの内訳が示されます。

確認する必要がある重要な ACL オペレーションは OBJECT_ACCESS_REQUIRED_OBJECT_ACL です。

  • この数がゼロの場合、過去 6 週間にわたり、オブジェクトにアクセスするために必要となったオブジェクト レベルの ACL はありません。バケットレベルまたはプロジェクト レベルで必要な権限は、IAM ポリシーがカバーしています。

  • この数がゼロより大きい場合、過去 6 週間以内にオブジェクト ACL の権限を必要とするオブジェクトへのアクセス リクエストがありました。均一のバケットレベルのアクセスを有効にする前に、同等の IAM ポリシーを割り当てる必要があります。

Monitoring 指標の詳細については、指標、時系列、リソースをご覧ください。

バケットのデフォルトのオブジェクト ACL を確認する

均一なバケットレベルのアクセスがないバケットには、デフォルト オブジェクト ACL が関連付けられます。オブジェクトをバケットに追加する際に明示的に ACL に指定しない限り、このようなバケットに追加された新しいオブジェクトには、このデフォルトのオブジェクト ACL が適用されます。

たとえば、バケットは通常、デフォルトのオブジェクト ACL として projectPrivate 定義済み ACL を使用します。projectPrivate は、バケットに関連付けられているプロジェクト閲覧者にオブジェクト READER 権限を付与し、そのバケットに関連付けられているプロジェクト編集者とオーナーにオブジェクト OWNER 権限を付与します。

均一のバケットレベルのアクセスを有効にする前に、バケットが持つデフォルトのオブジェクト ACL を確認してください。均一なバケットレベルのアクセスを有効にした後にデフォルトのオブジェクト ACL に関連付けられた権限を付与するかどうかについて検討してください。付与する場合は、IAM の同等の権限をバケットに割り当てます。

オブジェクト ACL と同等の IAM を割り当てる

IAM が現在許可していないアクセス権をオブジェクト ACL が許可している場合があります。均一なバケットレベルのアクセスを有効にしたときに既存のユーザーがオブジェクトにアクセスできるように、次の表を参考にして影響を受けるユーザーに適切な IAM ロールを割り当ててください。

オブジェクト ACL の権限 同等の IAM ロール
READER ストレージ レガシー オブジェクト読み取り(roles/storage.legacyObjectReader
OWNER ストレージ レガシー オブジェクト オーナー(roles/storage.legacyObjectOwner

IAM Conditions を使用する場合の考慮事項

バケットの IAM ポリシーとオブジェクト ACL の競合を防ぐために、IAM Conditions は、均一なバケットレベルのアクセスが有効になっているバケットでのみ使用できます。具体的には、次のようになります。

次のステップ