このページでは、均一なバケットレベルのアクセスについて説明します。これを使用して、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 リソースへのアクセス権の付与方法が統一され、簡素化されるため、均一なバケットレベルのアクセスを使用することをおすすめします。
均一なバケットレベルのアクセスを使用すると、Domain Restricted Sharing や IAM Conditions などの他の Google Cloud セキュリティ機能も使用できるようになります。
次の場合には、均一なバケットレベルのアクセスを使用せずに、きめ細かい ACL を使用してください。
レガシー ACL を使用してバケット内の特定のオブジェクトへのアクセスを制御する。
オブジェクトのアップローダに特定のオブジェクトに対しての完全アクセス権を許可しつつ、バケット内の他のオブジェクトに対する権限は制限する。
XML API を使用してバケットの権限を表示または設定します。
有効にした場合の動作
均一なバケットレベルのアクセスは、新しいバケットを作成するときに有効にできます。また、既存のバケットに対して明示的に均一なバケットレベルのアクセスを有効化することもできます。
有効にすると、バケットは次のように動作します。
バケットとオブジェクトの ACL の設定、読み取り、変更のリクエスト。これらのリクエストは、
400 Bad Request
エラーで失敗します。- これには、いずれかの
BucketAccessControls
、DefaultObjectAccessControls
、またはObjectAccessControls
メソッドを使用する JSON API リクエストが含まれます。
- これには、いずれかの
バケットまたはオブジェクト メタデータのフル プロジェクションの JSON API リクエスト。リクエストすると、レスポンスの一部として空の ACL リストが返されます。
gsutil コマンドの
cp -p
、mv -p
、rsync -p
は失敗します(均一なバケットレベルのアクセスのバケットが送信元である場合と、それが送信先である場合の両方)。gsutil コマンドのacl
とdefacl
も失敗します。個々のオブジェクトの所有権。この所有権によって許可されたアクセス権は取り消され、バケットとオブジェクト メタデータのリクエストから
owner
フィールドが削除されます。作成時に、バケットは特別な IAM のロールを受け取ります。新しいバケットを作成するときに均一なバケットレベルのアクセスを有効にすると、リンクされたテーブルに記載されている IAM のロールがバケットに追加されます。
これにより、バケットのデフォルト オブジェクト ACL から継承したオブジェクトの権限が維持されます。
既存のバケットで均一なバケットレベルのアクセスを有効にする場合、そのようなロールを手動で適用する必要があります。バケットのデフォルト オブジェクト ACL を変更した場合、別のロールセットを適用することもできます。
元に戻した場合の動作
均一なバケットレベルのアクセスを無効にして ACL を使用できるようにするために、Cloud Storage は既存の ACL を 90 日間保存します。この期間に均一なバケットレベルのアクセスを無効にすると、次のようになります。
保存された 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 に関連付けられた権限を付与するかどうかについて検討してください。付与する場合は、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 の使用をご覧ください。均一なバケットレベルのアクセスは、バケットで 90 日間連続して有効になっていた場合、無効にすることはできません。
次のステップ
- 均一なバケットレベルのアクセスの使用方法を確認する。
- 均一なバケットレベルのアクセス制約の適用(Google Cloud の組織、フォルダ、またはプロジェクト内で設定可能)について学習する。
- バケットとプロジェクトに IAM 権限を設定する。