このページでは、Google Cloud 組織ポリシー サービスのカスタム制約を使用して、次の Cloud Storage for Firebase リソースに対する特定のオペレーションを制限する方法について説明します。
firebasestorage.googleapis.com/DefaultBucket
組織のポリシーの詳細については、カスタムの組織のポリシーをご覧ください。
組織のポリシーと制約について
Google Cloud 組織ポリシー サービスを使用すると、組織のリソースをプログラマティックに一元管理できます。組織のポリシー管理者は組織のポリシーを定義できます。組織のポリシーは、Google Cloud リソース階層内の Google Cloud リソースやそれらのリソースの子孫に適用される、制約と呼ばれる一連の制限です。組織のポリシーは、組織レベル、フォルダレベル、またはプロジェクト レベルで適用できます。
組織のポリシーを利用することで、あらかじめ用意されたマネージド制約をさまざまな Google Cloud サービスに適用できます。ただし、組織のポリシーで制限されている特定の項目をより細かくカスタマイズして制御したい場合は、カスタム制約を作成して、それを組織のポリシーで使うこともできます。
ポリシーの継承
デフォルトでは、組織のポリシーは、そのポリシーを適用したリソースの子孫に継承されます。たとえば、フォルダにポリシーを適用した場合、Google Cloud ではそのフォルダ内のすべてのプロジェクトにそのポリシーが適用されます。この動作の詳細と変更方法については、階層評価ルールをご覧ください。
また、Cloud Storage for Firebase は基盤となる Cloud Storage バケットにファイルを保存するため、Cloud Storage リソースに適用される組織のポリシーやカスタム制約は、Cloud Storage for Firebase バケットにも適用されます。
利点
- セキュリティとガバナンス: Cloud Storage バケットのプロビジョニングに対して一元化された組織管理を適用し、データ所在地と費用管理のガードレールを遵守します。
- きめ細かい属性制御:
storageClassやlocationなどの特定のリソース属性に基づいて、デフォルトのバケット作成を制限します。
制限事項
Cloud Storage for Firebase でカスタム組織のポリシーを使用する場合は、次の制限が適用されます。
- 遡及的な適用なし: 新しく適用されたカスタム制約は、既存のリソースに適用されません。既存のデフォルト バケットは、更新されない限り評価されません。制約に違反する可能性のある既存のリソースを特定するには、ドライラン モードを使用してポリシーをテストします。
- アクセス制御の制限: カスタム制約では、バケットのアクセス制御リスト(ACL)や IAM ポリシーを制限できません。
始める前に
Firebase コンソールで、Firebase プロジェクトを選択または作成します。
プロジェクトが組織の一部であり、組織 ID を把握していることを確認します。
コマンドラインを使用してカスタム制約を設定して適用するには、Google Cloud CLI(
gcloud)をインストールします。カスタム組織のポリシーは、Firebase CLI を使用して管理することはできません。
必要なロール
カスタムの組織のポリシーを管理するために必要な権限を取得するには、組織に対する組織ポリシー管理者(roles/orgpolicy.policyAdmin)の IAM ロールを付与するよう管理者に依頼してください。
Cloud Storage for Firebase でサポートされているリソース
次の表に、カスタム制約で参照できる Cloud Storage for Firebase リソースを示します。これらのリソースのカスタム制約は Cloud Storage for Firebase バケットにも適用されるため、Cloud Storage でサポートされているリソースも参照できます。
| リソース | サポートされるフィールド |
|---|---|
firebasestorage.googleapis.com/DefaultBucket |
|
カスタム制約を設定する
カスタム制約は、組織のポリシーを適用しているサービスでサポートされるリソース、メソッド、条件、アクションを使用して YAML ファイルで定義されます。カスタム制約の条件は、Common Expression Language(CEL)を使用して定義されます。CEL を使用してカスタム制約で条件を作成する方法については、カスタム制約の作成と管理の CEL セクションをご覧ください。
Console
カスタム制約を作成する手順は次のとおりです。
- Google Cloud コンソールで [組織のポリシー] ページに移動します。
- プロジェクト選択ツールで、組織のポリシーを設定するプロジェクトを選択します。
- [ カスタム制約] をクリックします。
- [表示名] ボックスに、人が読める形式で制約の名前を入力します。この名前はエラー メッセージで使用されるほか、識別やデバッグにも使用できます。エラー メッセージで公開される可能性があるため、表示名に個人情報(PII)や機密データを使用しないでください。このフィールドには、最大 200 文字まで入力できます。
- [制約 ID] ボックスに、新しいカスタム制約の ID を入力します。カスタム制約の名前に使用できるのは、英字(大文字と小文字)と数字のみです(例:
custom.restrictStorageClass)。このフィールドには、接頭辞(custom.)を除き、最大 70 文字まで入力できます(例:organizations/123456789/customConstraints/custom.restrictStorageClass)。エラー メッセージで漏えいする可能性があるため、制約 ID には PII や機密データを含めないでください。 - [説明] ボックスに、人が読める形式で制約の説明を入力します。この説明は、ポリシー違反の際にエラー メッセージとして使用されます。ポリシー違反が発生した理由と、ポリシー違反を解決する方法に関する詳細を含めてください。エラー メッセージで公開される可能性があるため、説明に個人情報(PII)や機密データを含めないでください。このフィールドには、最大 2,000 文字まで入力できます。
- [リソースの種類] ボックスで、制限するオブジェクトとフィールドを含む REST リソースの名前を選択します(例:
firebasestorage.googleapis.com/DefaultBucket)。ほとんどの種類のリソースは、最大 20 個のカスタム制約をサポートしています。これより多くのカスタム制約を作成しようとすると、オペレーションは失敗します。 - [適用方法] で、REST
CREATEメソッドに制約を適用するのか、またはCREATEメソッドとUPDATEメソッドの両方に制約を適用するのかを選択します。(注:DefaultBucketはCREATEのみをサポートしています)。 - 条件を定義するには、[ 条件を編集] をクリックします。
- [条件を追加] パネルで、サポートされているサービス リソースを参照する CEL 条件を作成します(例:
resource.storageClass == 'STANDARD')。このフィールドには、最大 1,000 文字まで入力できます。CEL の使用方法の詳細については、Common Expression Language をご覧ください。 - [保存] をクリックします。
- [条件を追加] パネルで、サポートされているサービス リソースを参照する CEL 条件を作成します(例:
- [アクション] で、条件が満たされた場合に評価対象のメソッドを許可するか拒否するかを選択します。
拒否アクションは、条件が true と評価された場合に、リソースを作成または更新するオペレーションがブロックされることを意味します。
許可アクションは、条件が true と評価された場合にのみ、リソースを作成または更新するオペレーションが許可されることを意味します。条件に明記されているケースを除き、他のケースはすべてブロックされます。
- [制約を作成] をクリックします。
gcloud
- カスタム制約を作成するには、次の形式で YAML ファイルを作成します。
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class.
- 新しいカスタム制約の YAML ファイルを作成したら、組織内で組織のポリシーとして使用できるように設定する必要があります。カスタム制約を設定するには、
gcloud org-policies set-custom-constraintコマンドを使用します。gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATHは、カスタム制約ファイルのフルパスに置き換えます。例:/home/user/customconstraint.yaml - カスタム制約が存在することを確認するには、
gcloud org-policies list-custom-constraintsコマンドを使用します。gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
カスタムの組織のポリシーを適用する
制約を適用するには、それを参照する組織のポリシーを作成し、そのポリシーを Google Cloud リソースに適用します。
Console
- Google Cloud コンソールで [組織のポリシー] ページに移動します。
- プロジェクト選択ツールで、組織のポリシーを設定するプロジェクトを選択します。
- [組織のポリシー] ページのリストで制約を選択して、その制約の [ポリシーの詳細] ページを表示します。
- このリソースの組織のポリシーを構成するには、[ポリシーを管理] をクリックします。
- [ポリシーの編集] ページで、[親のポリシーをオーバーライドする] を選択します。
- [ルールの追加] をクリックします。
- [適用] セクションで、この組織のポリシーを適用するかどうかを選択します。
- ドライラン モードで組織のポリシーを適用するには、[ドライラン ポリシーを設定] をクリックします。詳細については、組織のポリシーをテストするをご覧ください。
- ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、[ポリシーを設定] をクリックして有効なポリシーを設定します。
gcloud
- ブール値のルールを含む組織のポリシーを作成するには、制約を参照するポリシーの YAML ファイルを作成します。
name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: true dryRunSpec: rules: - enforce: true
- ドライラン モードで組織のポリシーを適用するには、
dryRunSpecフラグを指定して次のコマンドを実行します。gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec
- ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、
org-policies set-policyコマンドとspecフラグを使用して有効なポリシーを設定します。gcloud org-policies set-policy POLICY_PATH --update-mask=spec
カスタム組織のポリシーをテストする
次の例では、新しく作成されるすべてのデフォルト バケットで STANDARD ストレージ クラスを使用しないことを必須にするカスタムの制約とポリシーを作成します。ポリシーで禁止されているアクションを試行して、ポリシーをテストできます。
制約を作成する
次のファイルに
constraint-restrict-storage-class.yamlという名前を付けて保存します。name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class.ORGANIZATION_IDは、実際の組織 ID に置き換えます。制約を適用します。
gcloud org-policies set-custom-constraint ~/constraint-restrict-storage-class.yaml制約が存在することを確認します。
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID出力は次のようになります。
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.restrictStorageClass DENY CREATE firebasestorage.googleapis.com/DefaultBucket Restrict Standard Storage Class ...
ポリシーを作成する
次のファイルに
policy-restrict-storage-class.yamlという名前を付けて保存します。name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: truePROJECT_IDは、実際のプロジェクト ID に置き換えます。ポリシーを適用します。
gcloud org-policies set-policy ~/policy-restrict-storage-class.yamlポリシーが存在することを確認します。
gcloud org-policies list --project=PROJECT_ID出力は次のようになります。
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.restrictStorageClass - SET CIqktscGELiZn6cC-
ポリシーを適用したら、Google Cloud がポリシーの適用を開始するまで 2 分ほど待ちます。
ポリシーのテスト
ストレージ クラス(デフォルトは STANDARD)を指定せずに、Cloud Storage for Firebase REST API を使用してデフォルトのバケットを作成してみます。
PROJECT_ID="PROJECT_ID"
TOKEN=$(gcloud auth print-access-token)
curl -X POST "https://firebasestorage.googleapis.com/v1beta/projects/${PROJECT_ID}/defaultBucket" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"location": "US-EAST1"}'
リクエストは失敗し、次のようなエラーが返されます。
FAILED_PRECONDITION: Operation denied by org policy: ["customConstraints/custom.restrictStorageClass": "Deny creating buckets with STANDARD storage class."].
- '@type': type.googleapis.com/google.rpc.ErrorInfo
domain: iam.googleapis.com
metadata:
customConstraints: customConstraints/custom.restrictStorageClass
reason: CUSTOM_ORG_POLICY_VIOLATION
一般的なユースケースのカスタム組織ポリシーの例
次の表では一般的なカスタム制約の構文例をまとめています。
| 説明 | 制約の構文 |
|---|---|
| STANDARD Storage クラスを使用したデフォルト バケットの作成を制限する |
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class. |
| デフォルトのバケットを特定のロケーションに作成することを必須にする |
name: organizations/ORGANIZATION_ID/customConstraints/custom.requireDefaultBucketLocation resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.location != 'US-EAST1'" actionType: DENY displayName: Require US-EAST1 Location description: Deny creating default buckets outside the US-EAST1 location. |
次のステップ
- 組織ポリシー サービスの詳細を確認する。
- 組織のポリシーの作成と管理の方法について学習する。
- マネージドの組織ポリシーの制約の一覧を参照する。