バケット ポリシーのみ

このページでは、バケット ポリシーのみ機能について説明します。この機能を使用すると、Cloud Storage リソースへのアクセスを統一的に制御できます。この機能をバケットで有効にすると、バケットレベルの Cloud Identity and Access Management(Cloud IAM)権限で、バケットとそれに含まれるオブジェクトにアクセスできます。アクセス制御リスト(ACL)は無効になり、ACL で付与されたアクセス権は取り消されます。この機能の使用方法については、バケット ポリシーのみの使用をご覧ください。

概要

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

Cloud Storage のバケット ポリシーのみ機能を使用すると、統一した権限管理を行うことができます。この機能を使用すると、Cloud Storage のすべてのリソースに対する ACL が無効になり、Cloud Storage リソースへのアクセス権は Cloud IAM のみによって付与されます。

バケット ポリシーのみを使用する場合

バケット ポリシーのみ機能は、次の場合に使用します。

  • 1 つの権限管理システムで Cloud Storage リソースへのアクセスを制御したい。

  • GCP リソース全体で一貫したアクセス制御を実施したい。

  • バケット内のオブジェクトが多く、オブジェクト単位でアクセスを管理したくない。

  • Cloud Audit Logsドメインで制限された共有など、ACL ではなく Cloud IAM ポリシーを介して付与されたアクセス権のみを追跡する GCP セキュリティ機能を使用したい。

  • オブジェクトのアップローダにオブジェクトに対するフルアクセスを許可したくない。

次の場合は、バケット ポリシーのみ機能を使用しないでください。

  • 従来の ACL でバケット内の特定のオブジェクトに対するアクセスを許可したい。

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

制限事項

バケット ポリシーのみ機能には、次の制限があります。

  • Cloud Storage にエクスポートする特定の GCP サービスは、バケット ポリシーのみ機能が有効になっているバケットにエクスポートできません。次のようなサービスが該当します。

    Stackdriver、Cloud Audit Logs、Cloud Datastore。

  • XML API を使用して、バケット ポリシーのみ機能のステータスの確認、有効化、無効化を行うことはできません。

  • XML API を使用して、バケット ポリシーのみ機能が有効になっているバケットの権限を表示または設定することはできません。

  • バケット ポリシーのみ機能が有効にされているバケット内で一般公開されているオブジェクトでは、デフォルトで Cache-Control の値が private に設定されます。ただし、明示的に public値を設定した場合はその限りではありません。

有効にした場合の動作

バケット ポリシーのみ機能は、新しいバケットを作成するときに有効にできます。また、既存のバケットに対して明示的にバケット ポリシーのみ機能を有効化することもできます。

有効にすると、ACL の次の機能が停止します。

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

  • BucketAccessControlsDefaultObjectAccessControlsObjectAccessControls の各メソッドを使用した JSON API リクエスト。これらのリクエストは 400 Bad Request エラーで失敗します。

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

  • gsutil コマンド cp -pmv -prsync -p。バケット ポリシーのみのバケットがソースと宛先である場合の両方で失敗します。

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

また、新しいバケットを作成するときにバケット ポリシーのみ機能を有効にすると、バケットに追加の Cloud IAM 役割が自動的に付与されます。これにより、バケットのデフォルト オブジェクト ACL から継承したオブジェクトの権限が維持されます。既存のバケットでバケット ポリシーのみを有効にする場合は、このような役割を手動で適用する必要があります。バケットのデフォルト オブジェクト ACL を変更した場合は、異なる役割セットの適用が必要になることもあります。

元に戻した場合の動作

バケット ポリシーのみ機能を無効にして ACL を復旧できるように、Cloud Storage は既存の ACL を 90 日間保存します。この間にバケット ポリシーのみ機能を無効にすると、次の結果になります。

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

  • バケット ポリシーのみ機能を有効にした後にバケットに追加されたオブジェクトは、バケットのデフォルト オブジェクト ACL でアクセス権が付与されます。

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

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

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

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

  • バケットレベルで適用された Cloud IAM 権限はバケット内のすべてのオブジェクトに適用されますが、オブジェクト ACL の場合はオブジェクトごとに異なります。

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

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

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

この指標を使用して、バケット ポリシーのみ機能を有効にするとワークフローが壊れるかどうかを判断します。

指標 説明
storage.googleapis.com/authz/acl_operations_count バケット ポリシーのみ機能が有効にされると無効になる ACL オペレーションの数。ACL オペレーションのタイプとバケットごとの内訳が示されます。

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

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

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

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

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

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

バケット ポリシーのみ機能を有効にする前に、バケットが持つデフォルトのオブジェクト ACL を確認してください。バケット ポリシーのみ機能を有効にした後にデフォルトのオブジェクト ACL に関連付けられた権限を付与するかどうかについて検討してください。付与する場合は、Cloud IAM の同等の権限をバケットに割り当てます。

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

Cloud IAM が現在許可していないアクセス権をオブジェクト ACL が許可している場合があります。バケット ポリシーのみ機能を有効にしたときに既存のユーザーがオブジェクトへのアクセス権を失わないようにするには、次の表に従って、対象ユーザーに適切な Cloud IAM 役割を割り当てます

オブジェクト ACL の権限 Cloud IAM における同等の役割
READER roles/storage.legacyObjectReader
OWNER roles/storage.legacyObjectOwner

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。