このページでは、均一なバケットレベルのアクセスについて説明します。これを使用して、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 リソースへのアクセス権の付与方法が統一され、簡素化されます。
均一なバケットレベルのアクセスを使用すると、ACL による意図しないデータ漏洩を防ぐことができます。
次の機能を使用するには、均一なバケットレベルのアクセスを有効にする必要があります。
- 階層名前空間
- マネージド フォルダ
- バケットに直接設定された IAM 条件
- Workforce Identity 連携
- Workload Identity 連携
バケットに ACL システムを使用する場合は、均一なバケットレベルのアクセスを使用しないでください。
有効にした場合の動作
均一なバケットレベルのアクセスは、新しいバケットを作成するときに有効にできます。また、既存のバケットに対して明示的に均一なバケットレベルのアクセスを有効化することもできます。
有効にすると、バケットは次のように動作します。
バケットとオブジェクトの ACL の設定、読み取り、変更のリクエスト。これらのリクエストは、
400 Bad Request
エラーで失敗します。- これには、いずれかの
BucketAccessControls
、DefaultObjectAccessControls
、またはObjectAccessControls
メソッドを使用する JSON API リクエストが含まれます。
- これには、いずれかの
バケットまたはオブジェクト メタデータのフル プロジェクションの 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 は、均一なバケットレベルのアクセスが有効になっているバケットでのみ使用できます。具体的には、次のようになります。
IAM Conditions をバケットに設定するには、まず、そのバケットで均一なバケットレベルのアクセスを有効にする必要があります。
バケットで均一なバケットレベルのアクセスを無効にする前に、まず該当バケットのポリシーからすべての IAM Conditions を削除する必要があります。バケットのポリシーから条件を表示、削除する方法については、バケットでの IAM Conditions の使用をご覧ください。
次のステップ
- 均一なバケットレベルのアクセスの使用方法を確認する。
- 均一なバケットレベルのアクセス制約の適用(Google Cloud の組織、フォルダ、またはプロジェクト内で設定可能)について学習する。
- バケットとプロジェクトに IAM 権限を設定する。