フォルダを作成する

Google Cloud フォルダを使用すると、リソース階層でプロジェクトをグループ化して整理できます。フォルダを使用すると、管理業務の委任、環境固有の組織のポリシーの適用、部門間の費用管理の合理化を行うことができます。

Google Cloud リソース階層のノードとして、フォルダには、組織リソースの下にプロジェクト、他のフォルダ、またはその両方を含めることができます。また、共通の Identity and Access Management(IAM)ロール、拒否ポリシー、組織のポリシーを共有するリソースをグループ化することもできます。1 つのフォルダに複数の子フォルダやリソースを格納できますが、各フォルダやリソースの親は 1 つだけです。

フォルダ階層の例

次の図では、組織リソース「Company」に「Standard Workloads」、「Regulated Workloads」、「Shared infrastructure」を表すフォルダがあります。「規制対象のワークロード」では、フォルダは環境別に「非本番環境」と「本番環境」に整理されています。「本番環境」フォルダは、ポリシー中心のアクセス制御を適用するために、「顧客向け(制限付き)」フォルダと「内部専用(標準)」フォルダにさらに整理されています。「テスト プロジェクト」、「開発プロジェクト」、「本番環境プロジェクト」などのプロジェクトには、プロジェクトに必要なリソースが含まれています。これにより、許可、拒否、組織のポリシーを適切な粒度で柔軟に割り当てることができます。

ワークロード、環境、プロジェクトを含むフォルダ階層。

フォルダレベルの許可ポリシーと拒否ポリシーを使用すると、フォルダ内のリソースに対するアクセスを制御できます。たとえば、フォルダに対する Compute インスタンス管理者のロールをユーザーに付与すると、このユーザーには、フォルダ内のすべてのプロジェクトに対する Compute インスタンス管理者のロールが付与されます。

始める前に

フォルダ機能は、組織リソースを持つ Google Workspace および Cloud Identity のユーザーのみが利用できます。組織リソースの取得の詳細については、組織リソースを取得するをご覧ください。

フォルダの最適な使い方を学習する前に、次のことを行ってください。

  1. IAM によるフォルダのアクセス制御を確認する。このトピックでは、フォルダとフォルダ内のリソースに対するアクセス制御の方法を説明しています。
  2. フォルダ権限の設定方法を確認する。フォルダには、さまざまな IAM ロールを設定できます。ユーザーがプロジェクトの構造を確認できるように権限を設定するには、ドメイン全体に組織レベルで組織閲覧者とフォルダ閲覧者のロールを付与します。フォルダ階層でブランチの公開を制限するには、ユーザーに表示するフォルダにフォルダ閲覧者のロールを付与します。
  3. フォルダを作成する。Cloud リソースの整理方法を検討するときに、サンドボックスとして 1 つのフォルダを作成し、組織で有効な階層を探すことをおすすめします。フォルダは、リソース間の境界であり、アクセス ポリシーや構成ポリシーの割り当てポイントとなります。異なる部門のリソースを含むフォルダを作成して、フォルダに管理者ロールを割り当て、管理者権限を委譲することもできます。フォルダは、アプリケーションや異なる環境(開発環境、本番環境、テスト環境など)に属するリソースをグループ化する場合にも使用できます。フォルダをネストすることで、異なるシナリオをモデル化できます。

一般的な状況は、前述のリソース階層に示すように、追加のフォルダまたはプロジェクトを含むフォルダを作成することです。この構造をフォルダ階層といいます。フォルダ階層を作成する場合には、次の点に注意してください。

  • フォルダのネストレベルは 10 個までです。
  • 親フォルダ内に作成できるフォルダは 300 個までです。この制限は、直下の子フォルダのみに適用されます。これらの子フォルダにはフォルダやプロジェクトを追加できます。
  • フォルダの表示名は、階層内の同じレベルで一意にする必要があります。

フォルダを管理する権限を設定する

フォルダにアクセスして管理するには、フォルダ固有の IAM ロールを特定のユーザー グループに割り当てます。ロールの詳細については、IAM を使用したフォルダのアクセス制御をご覧ください。また、おすすめの方法にて、フォルダの権限に最適な設定を確認することをおすすめします。

ヒント: 組織リソース全体のフォルダを管理するには、フォルダ管理者のロールが必要です。このロールを使用すると、フォルダに対する IAM 権限(作成、編集、削除、移動、変更)とフォルダ間でのプロジェクトの移動権限がユーザーに付与されます。

最初の段階では、組織リソースにフォルダ管理者のロールを割り当てることができるのは組織管理者だけです。以降は、このロールが割り当てられたアカウントが他のアカウントにロールを付与します。

フォルダ権限を設定する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、[リソースの管理] ページを開きます。

    [リソースの管理] に移動

  2. 情報パネルが開かない場合は、[情報パネルを表示] をクリックします。
  3. [リソース] テーブルで、フォルダを含む組織を開きます。
  4. 組織の下のリソースのリストから、管理するフォルダを選択します。
  5. 情報パネルで [プリンシパルを追加] をクリックします。
  6. [プリンシパルを追加] フィールドに、権限を付与するメールアドレスを入力します。
  7. [ロールを選択] メニューで、[Resource Manager] カテゴリを選択し、付与するロール([フォルダ管理者] など)を選択します。
  8. [保存] をクリックして、新しいロールを付与します。

gcloud

Google Cloud CLI を使用してプリンシパルにフォルダ管理者のロールを付与するには、次のコマンドを実行します。

    gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member=user:USER_ID \
    --role=roles/resourcemanager.folderAdmin

REST

JSON リクエスト:

request_json= '{ policy: { version: "1", bindings: [ { role: "roles/folderAdmin",
members: [ "user:admin@myorganization.com", ] }, { role: "roles/folderCreator",
members: [ "user:admin@myorganization.com", ] } , { role: "roles/folderMover",
members: [ "user:admin@myorganization.com", ] } , ] } }'

curl リクエスト:

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token}" \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/ORGANIZATION_NAME:setIamPolicy

ORGANIZATION_NAME は、許可ポリシーが設定されている組織の名前(organizations/123 など)に置き換えます。

フォルダを作成する

フォルダを作成するには、親レベルにフォルダ管理者またはフォルダ作成者のロールが必要です。たとえば、組織レベルでフォルダを作成するには、これらのいずれかのロールが組織レベルで必要です。

フォルダの作成中にフォルダ名を割り当てます。フォルダ名は次の要件を満たす必要があります。

  • 名前には文字、数字、スペース、ハイフン、アンダースコアを使用できます。
  • フォルダの表示名の先頭と最後は文字または数字にする必要があります。
  • 名前は 3~30 文字にしてください。
  • 親を共有する別のフォルダと同じ名前は使用できません。

フォルダを作成する手順は次のとおりです。

コンソール

フォルダを作成する手順は次のとおりです。

  1. Google Cloud コンソールの [リソースの管理] ページに移動します。

    [リソースの管理] ページを開く

  2. [フォルダを作成] をクリックし、次のいずれかのオプションを選択します。

  3. [フォルダ名] ボックスに、新しいフォルダの名前を入力します。

  4. [親リソース] で [参照] をクリックして、新しいフォルダを作成する組織リソースまたはフォルダを選択します。

    1. [作成] をクリックします。

gcloud

Google Cloud CLI を使用して、フォルダをプログラムで作成できます。

gcloud コマンドライン ツールを使用して組織リソースの下にフォルダを作成するには、次のコマンドを実行します。

gcloud resource-manager folders create \
   --display-name=DISPLAY_NAME \
   --organization=ORGANIZATION_ID

親が異なるフォルダを作成するには:

gcloud resource-manager folders create \
   --display-name=DISPLAY_NAME \
   --folder=FOLDER_ID

次のように置き換えます。

  • DISPLAY_NAME: フォルダの表示名。同じ親を持つフォルダと表示名を共有することはできません。表示名の先頭と最後は文字または数字にしてください。表示名には文字や数字以外に、スペース、ハイフン、アンダースコアを使用できますが、長さは 30 文字以下にする必要があります。
  • ORGANIZATION_ID: 親が組織リソースの場合、親組織リソースの ID。
  • FOLDER_ID: 親がフォルダの場合、親フォルダの ID。

API

API リクエストによってフォルダを作成できます。

JSON リクエスト:

request_json= '{
  display_name: DISPLAY_NAME,
  parent: ORGANIZATION_NAME
}'

フォルダを作成する curl リクエスト:

curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token}" \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/folders

ここで

  • DISPLAY_NAME: 新しいフォルダの表示名。例: My Awesome Folder
  • ORGANIZATION_NAME: フォルダを作成する組織リソースの名前。例: organizations/123

フォルダ作成に対するレスポンス:

呼び出しでオペレーションが正常に登録されると、レスポンスの本文に Operation のインスタンスが含まれます。

{
  "name": "operations/fc.123456789",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
    "displayName": "DISPLAY_NAME",
    "operationType": "CREATE"
  }
}

オペレーションを取得する curl リクエスト:

curl -H "Authorization: Bearer ${bearer_token}" \
https://cloudresourcemanager.googleapis.com/v3/operations/fc.123456789

オペレーション取得に対するレスポンス:

{
  "name": "operations/fc.123456789",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
    "displayName": "DISPLAY_NAME",
    "operationType": "CREATE"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.resourcemanager.v3.Folder",
    "name": "folders/12345",
    "parent": "organizations/123",
    "displayName": "DISPLAY_NAME",
    "lifecycleState": "ACTIVE",
    "createTime": "2017-07-19T23:29:26.018Z",
    "updateTime": "2017-07-19T23:29:26.046Z"
  }
}

フォルダの作成時にタグを追加する

タグを使用すると、リソースのアノテーションを作成できます。タグは、フォルダの作成時に追加できます。これを行うには、タグユーザーのロールを付与する必要があります。このロールに含まれる権限の詳細については、タグの作成と管理をご覧ください。タグの Key-Value ペアの名前空間は、次のいずれかの方法でのみ追加できます。

gcloud

フォルダの作成時にタグを追加するには、次のコマンドを実行します。

  gcloud resource-manager folders create \
      --display-name=DISPLAY_NAME \
      --organization=ORGANIZATION_ID\
      --tags=KEY_VALUE_PAIRS

次のように置き換えます。

  • DISPLAY_NAME: フォルダの表示名。
  • ORGANIZATION_ID: 親組織リソースの固有識別子。
  • KEY_VALUE_PAIRS: リソースに割り当てることができる Key-Value ペアのカンマ区切りリスト。カンマ区切りの Key-Value ペアの例は 123/environment=production, 456/create=testresource です。

REST

次のスニペットは、フォルダを作成してタグを追加する JSON リクエストです。

  POST https://cloudresourcemanager.googleapis.com/v3/folders/
  Authorization: *************
  Content-Type: application/json

  {
    "display_name": "our-folder-456",
    "parent": "organizations/123",
    "tags": {
      "123/environment": "production",
      "123/costCenter": "marketing"
    }
  }

フォルダ ID を取得する

フォルダの ID を取得するには、 Google Cloud コンソールまたは Google Cloud CLI を使用します。

コンソール

  1. Google Cloud コンソールで、[リソースの管理] ページを開きます。
  2. リソースリストでフォルダを見つけます。フォルダ ID は、フォルダの表示名の横にある [ID] 列に表示されます。

gcloud

フォルダ ID を確認するには、次のコマンドを実行します。

gcloud resource-manager folders list --organization=ORGANIZATION_ID

伝播遅延

新しいフォルダを作成すると、フォルダがグローバル システムに反映され、 Google Cloud コンソールに表示されるまでに時間がかかることがあります。この伝播遅延は通常、数分以内に解決されますが、まれにそれ以上かかることがあります。gcloud コマンドライン ツールまたは API を使用して、フォルダの作成をすぐに確認できます。

フォルダを削除する

フォルダを削除するには、フォルダ管理者ロール(roles/resourcemanager.folderAdmin)またはフォルダ編集者ロール(roles/resourcemanager.folderEditor)が必要です。フォルダを削除するには、フォルダが空である必要があります。詳細な手順については、フォルダを削除するをご覧ください。

フォルダに対するアクセス権を設定する

フォルダに対するアクセス権を設定するには、親レベルでフォルダ IAM 管理者またはフォルダ管理者のロールが必要です。

コンソール

  1. Google Cloud コンソールで、[リソースの管理] ページを開きます。

    [リソースの管理] ページを開く

  2. 左上にある [組織] プルダウン リストをクリックして、組織リソースを選択します。

  3. 権限を変更するプロジェクトの横にあるチェックボックスをオンにします。

    1. 右側の [情報パネル] の [権限] で、追加するメンバーのメールアドレスを入力します。

    2. [ロールを選択] プルダウン リストで、メンバーに付与するロールを選択します。

    3. [追加] をクリックします。メンバーの新しいロールの追加または更新を確認する通知が表示されます。

gcloud

Google Cloud CLI や REST API を使用して、フォルダに対するアクセス権をプログラムで構成できます。

gcloud resource-manager folders \
    add-iam-policy-binding FOLDER_ID \
    --member=user:email1@example.com \
    --role=roles/resourcemanager.folderEditor
gcloud resource-manager folders \
    add-iam-policy-binding FOLDER_ID \
    --member=user:email1@example.com \
    --role=roles/resourcemanager.folderViewer

または

gcloud resource-manager folders \
    set-iam-policy FOLDER_ID POLICY_FILE

次のように置き換えます。

  • FOLDER_ID: 新しいフォルダの ID
  • POLICY_FILE: フォルダのポリシー ファイルのパス

API

setIamPolicy メソッドは、フォルダにアクセス制御ポリシーを設定し、既存のポリシーを置き換えます。resource フィールドは、フォルダのリソース名です。例: folders/1234

 request_json= '{
   policy: {
     version: "1",
     bindings: [
       {
         role: "roles/resourcemanager.folderEditor",
         members: [
           "user:email1@example.com",
           "user:email2@example.com",
         ]
       }
     ]
   }
 }'

curl リクエスト:

   curl -X POST -H "Content-Type: application/json" \
   -H "Authorization: Bearer ${bearer_token}" \
   -d "$request_json" \
   https://cloudresourcemanager.googleapis.com/v3/FOLDER_ID:setIamPolicy

FOLDER_ID は、IAM ポリシーが設定されているフォルダの名前(folders/123 など)に置き換えます。

長時間実行オペレーションを処理する

作成や移行などの一部のフォルダ オペレーションは、グローバルな伝播が必要なため、 Google Cloud によって非同期で処理されます。ターミナルまたは自動化スクリプトのブロックを回避するには、--async フラグを使用します。

このフラグを使用すると、コマンドは長時間実行オペレーション(LRO)オブジェクトをすぐに返します。その後、operation_id を使用して、都合のよいときに完了をポーリングできます。--async フラグは、folders create コマンドと folders move コマンドでのみサポートされています。

このフラグを使用する手順は次のとおりです。

  1. 非同期タスクを開始します。次のサンプル コマンドを参照してください。

    gcloud resource-manager folders create \
        --display-name="Test Async Folder" \
        --organization=2518 \
        --async
    

    出力には、オペレーション名(例: fc.8572)と done: false が表示されます。

    レスポンスの例:

    name: operations/fc.8572
    metadata:
    operation_type: CREATE
    display_name: Awe-Inspiring Async Folder
    destination_parent: organizations/2518
    done: false
    
  2. 営業状況を確認します。タスクが完了したかどうかを確認するには、前のステップで取得した ID を指定して operations describe コマンドを使用します。

    gcloud beta resource-manager operations describe fc.8572
    

    done が true になると、レスポンス ブロックに、新しく作成されたリソースの詳細がすべて含まれます。

    name: operations/fc.8572
    done: true
    response:
      name: folders/6428
      display_name: Awe-Inspiring Async Folder
      lifecycle_state: ACTIVE
      create_time: '2024-03-20T10:00:00Z'
    

次のステップ