Google Cloud フォルダを使用すると、リソース階層でプロジェクトをグループ化して整理できます。フォルダを使用すると、管理業務の委任、環境固有の組織のポリシーの適用、部門間の費用管理の合理化を行うことができます。
Google Cloud リソース階層のノードとして、フォルダには、組織リソースの下にプロジェクト、他のフォルダ、またはその両方を含めることができます。また、共通の Identity and Access Management(IAM)ロール、拒否ポリシー、組織のポリシーを共有するリソースをグループ化することもできます。1 つのフォルダに複数の子フォルダやリソースを格納できますが、各フォルダやリソースの親は 1 つだけです。
フォルダ階層の例
次の図では、組織リソース「Company」に「Standard Workloads」、「Regulated Workloads」、「Shared infrastructure」を表すフォルダがあります。「規制対象のワークロード」では、フォルダは環境別に「非本番環境」と「本番環境」に整理されています。「本番環境」フォルダは、ポリシー中心のアクセス制御を適用するために、「顧客向け(制限付き)」フォルダと「内部専用(標準)」フォルダにさらに整理されています。「テスト プロジェクト」、「開発プロジェクト」、「本番環境プロジェクト」などのプロジェクトには、プロジェクトに必要なリソースが含まれています。これにより、許可、拒否、組織のポリシーを適切な粒度で柔軟に割り当てることができます。
フォルダレベルの許可ポリシーと拒否ポリシーを使用すると、フォルダ内のリソースに対するアクセスを制御できます。たとえば、フォルダに対する Compute インスタンス管理者のロールをユーザーに付与すると、このユーザーには、フォルダ内のすべてのプロジェクトに対する Compute インスタンス管理者のロールが付与されます。
始める前に
フォルダ機能は、組織リソースを持つ Google Workspace および Cloud Identity のユーザーのみが利用できます。組織リソースの取得の詳細については、組織リソースを取得するをご覧ください。
フォルダの最適な使い方を学習する前に、次のことを行ってください。
- IAM によるフォルダのアクセス制御を確認する。このトピックでは、フォルダとフォルダ内のリソースに対するアクセス制御の方法を説明しています。
- フォルダ権限の設定方法を確認する。フォルダには、さまざまな IAM ロールを設定できます。ユーザーがプロジェクトの構造を確認できるように権限を設定するには、ドメイン全体に組織レベルで組織閲覧者とフォルダ閲覧者のロールを付与します。フォルダ階層でブランチの公開を制限するには、ユーザーに表示するフォルダにフォルダ閲覧者のロールを付与します。
- フォルダを作成する。Cloud リソースの整理方法を検討するときに、サンドボックスとして 1 つのフォルダを作成し、組織で有効な階層を探すことをおすすめします。フォルダは、リソース間の境界であり、アクセス ポリシーや構成ポリシーの割り当てポイントとなります。異なる部門のリソースを含むフォルダを作成して、フォルダに管理者ロールを割り当て、管理者権限を委譲することもできます。フォルダは、アプリケーションや異なる環境(開発環境、本番環境、テスト環境など)に属するリソースをグループ化する場合にも使用できます。フォルダをネストすることで、異なるシナリオをモデル化できます。
一般的な状況は、前述のリソース階層に示すように、追加のフォルダまたはプロジェクトを含むフォルダを作成することです。この構造をフォルダ階層といいます。フォルダ階層を作成する場合には、次の点に注意してください。
- フォルダのネストレベルは 10 個までです。
- 親フォルダ内に作成できるフォルダは 300 個までです。この制限は、直下の子フォルダのみに適用されます。これらの子フォルダにはフォルダやプロジェクトを追加できます。
- フォルダの表示名は、階層内の同じレベルで一意にする必要があります。
フォルダを管理する権限を設定する
フォルダにアクセスして管理するには、フォルダ固有の IAM ロールを特定のユーザー グループに割り当てます。ロールの詳細については、IAM を使用したフォルダのアクセス制御をご覧ください。また、おすすめの方法にて、フォルダの権限に最適な設定を確認することをおすすめします。
ヒント: 組織リソース全体のフォルダを管理するには、フォルダ管理者のロールが必要です。このロールを使用すると、フォルダに対する IAM 権限(作成、編集、削除、移動、変更)とフォルダ間でのプロジェクトの移動権限がユーザーに付与されます。
最初の段階では、組織リソースにフォルダ管理者のロールを割り当てることができるのは組織管理者だけです。以降は、このロールが割り当てられたアカウントが他のアカウントにロールを付与します。
フォルダ権限を設定する手順は次のとおりです。
コンソール
- Google Cloud コンソールで、[リソースの管理] ページを開きます。
- 情報パネルが開かない場合は、[情報パネルを表示] をクリックします。
- [リソース] テーブルで、フォルダを含む組織を開きます。
- 組織の下のリソースのリストから、管理するフォルダを選択します。
- 情報パネルで [プリンシパルを追加] をクリックします。
- [プリンシパルを追加] フィールドに、権限を付与するメールアドレスを入力します。
- [ロールを選択] メニューで、[Resource Manager] カテゴリを選択し、付与するロール([フォルダ管理者] など)を選択します。
- [保存] をクリックして、新しいロールを付与します。
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 文字にしてください。
- 親を共有する別のフォルダと同じ名前は使用できません。
フォルダを作成する手順は次のとおりです。
コンソール
フォルダを作成する手順は次のとおりです。
Google Cloud コンソールの [リソースの管理] ページに移動します。
[フォルダを作成] をクリックし、次のいずれかのオプションを選択します。
- 標準 Google Cloud フォルダ: 標準のフォルダ リソース。
- 準拠フォルダ: Google Cloud リソースに対して追加の規制、リージョンまたは主権の制御を提供する Assured Workloads フォルダ。このオプションを選択すると Assured Workloads に遷移し、そこでフォルダを作成します。
[フォルダ名] ボックスに、新しいフォルダの名前を入力します。
[親リソース] で [参照] をクリックして、新しいフォルダを作成する組織リソースまたはフォルダを選択します。
- [作成] をクリックします。
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 を使用します。
コンソール
- Google Cloud コンソールで、[リソースの管理] ページを開きます。
- リソースリストでフォルダを見つけます。フォルダ ID は、フォルダの表示名の横にある [ID] 列に表示されます。
gcloud
フォルダ ID を確認するには、次のコマンドを実行します。
gcloud resource-manager folders list --organization=ORGANIZATION_ID
伝播遅延
新しいフォルダを作成すると、フォルダがグローバル システムに反映され、 Google Cloud コンソールに表示されるまでに時間がかかることがあります。この伝播遅延は通常、数分以内に解決されますが、まれにそれ以上かかることがあります。gcloud コマンドライン ツールまたは API を使用して、フォルダの作成をすぐに確認できます。
フォルダを削除する
フォルダを削除するには、フォルダ管理者ロール(roles/resourcemanager.folderAdmin)またはフォルダ編集者ロール(roles/resourcemanager.folderEditor)が必要です。フォルダを削除するには、フォルダが空である必要があります。詳細な手順については、フォルダを削除するをご覧ください。
フォルダに対するアクセス権を設定する
フォルダに対するアクセス権を設定するには、親レベルでフォルダ IAM 管理者またはフォルダ管理者のロールが必要です。
コンソール
Google Cloud コンソールで、[リソースの管理] ページを開きます。
左上にある [組織] プルダウン リストをクリックして、組織リソースを選択します。
権限を変更するプロジェクトの横にあるチェックボックスをオンにします。
右側の [情報パネル] の [権限] で、追加するメンバーのメールアドレスを入力します。
[ロールを選択] プルダウン リストで、メンバーに付与するロールを選択します。
[追加] をクリックします。メンバーの新しいロールの追加または更新を確認する通知が表示されます。
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 コマンドでのみサポートされています。
このフラグを使用する手順は次のとおりです。
非同期タスクを開始します。次のサンプル コマンドを参照してください。
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営業状況を確認します。タスクが完了したかどうかを確認するには、前のステップで取得した ID を指定して
operations describeコマンドを使用します。gcloud beta resource-manager operations describe fc.8572doneが 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'
次のステップ
- フォルダの表示と更新について学習する。
- フォルダ内のプロジェクトの管理について学習する。
- フォルダのロールと権限について学習する。
- リソース階層内のすべてのフォルダとプロジェクトを一覧表示する方法を確認する。