このページでは、フォルダ内にプロジェクトをネストしてリソース階層を整理する方法について説明します。 Google Cloud
概要
リソース階層では、プロジェクトはリソースの組織と課金のコア単位として機能します。 Google Cloud プロジェクトは、フォルダ(または組織リソース)と、仮想マシン インスタンスやストレージ バケットなどの基盤となるリソースの間に配置されます。
フォルダはオプションのグループ化メカニズムですが、フォルダ内にプロジェクトを整理すると、次のような重要なメリットがあります。
スケーラブルなガバナンス: 階層ベースの継承により、Identity and Access Management(IAM)ポリシーとセキュリティ制約を複数のプロジェクトに自動的に適用します。
ビジネス アラインメント: 組織の部門、コストセンター、開発ライフサイクル(Dev、Staging、Prod など)を反映するようにクラウド環境を構築します。
委任された管理: 組織レベルで広範な権限を必要とせずに、特定のチームに独自のプロジェクトとサブフォルダを管理する自律性を付与します。
費用の可視化: 関連するプロジェクトをグループ化して、特定のビジネス ユニットやアプリケーションの支出の追跡を簡素化し、課金分析を強化します。
セキュリティの分離: 明確な信頼境界を確立して、構成変更の影響範囲を制限し、さまざまな環境でのセキュリティ リスクを軽減します。
フォルダ内にプロジェクトを作成する
フォルダ内にプロジェクトを作成するには、フォルダに対するプロジェクト作成者のロール(roles/resourcemanager.projectCreator)が必要です。このロールは親フォルダから継承できます。
Console
- Google Cloud コンソールで、[リソースの管理] ページを開きます。
- [リソースの管理] ページに移動します。
- ページの左上にある [組織] プルダウンから組織リソースを選択します。
- [プロジェクトを作成] をクリックします。
- プロジェクト名を入力します。
- [移動先] ボックスで [参照] をクリックして、プロジェクトを作成するフォルダを選択します。
- [作成] をクリックします。
gcloud
gcloud projects create PROJECT_ID --folder FOLDER_ID
次のように置き換えます。
PROJECT_ID: 作成するプロジェクト ID の IDFOLDER_ID: プロジェクトを作成するフォルダの ID。
REST
JSON リクエスト:
request_json= '{
name: DISPLAY_NAME, projectId: PROJECT_ID, parent: {id: PARENT_ID, type: PARENT_TYPE}
}'
curl リクエスト:
curl -X POST -H "Content-Type: application/json" \
-H "Authorization: Bearer ${bearer_token}" \
-d "$request_json" \
https://cloudresourcemanager.googleapis.com/v3/projects
次のように置き換えます。
PROJECT_ID: 作成するプロジェクトの一意の識別子。例:my-awesome-proj-123DISPLAY_NAME: 作成するプロジェクトの表示名。PARENT_ID: 作成する親の一意の識別子。例:123PARENT_TYPE: 親のタイプ(folder、organizationなど)。
フォルダ名やその他のリソース名には機密情報を含めないでください。 フォルダや関連リソースを参照すると、フォルダ名やリソース名が公開されます。
フォルダへのプロジェクトの移動
プロジェクトをフォルダに移動する前に、ポリシーの影響を充分に考慮する必要があります。プロジェクト レベルで定義した許可ポリシーは、プロジェクトとともに移動しますが、親リソースから継承されたポリシーは移動しません。
プロジェクトを移動すると、Identity and Access Management ポリシーまたは直接接続されている組織のポリシーがすべてそのプロジェクトとともに移動します。ただし、リソース階層のプロジェクトは、親リソースから継承するポリシーの影響も受けます。特定のサービスを使用する権限をユーザーに付与する IAM ロールがプロジェクトから継承されている場合、エクスポート先で権限を継承しない限り、ユーザーはエクスポート先でそのサービスにアクセスできません。
たとえば、サービス アカウントでフォルダ A のユーザーにストレージのオブジェクト作成者 のロールがバインドされているとします。サービス アカウントには、フォルダ A 内の任意のプロジェクトで Cloud Storage にデータをアップロードする権限があります。同じ継承された権限を持たないいずれかのプロジェクトをフォルダ B に移動すると、そのプロジェクトのサービス アカウントはデータのアップロード権限を失い、結果的にサービスが停止します。
移動元と移動先のフォルダで組織のポリシーが定義されている場合も同様です。IAM ポリシーと同じように、組織ポリシーも継承されます。したがって、移動元と移動先のフォルダで組織のポリシーが一致していなければなりません。
組織のポリシーの詳細については、組織ポリシー サービスの概要をご覧ください。
プロジェクトを移動するには、移動元と移動先の両方のフォルダでプロジェクト移動の IAM ロール(roles/resourcemanager.projectMover)が必要です。リソースがフォルダ内にない場合は、組織リソースでこのロールが必要です。
これらのロールにより、次の必要な権限が与えられます。
- プロジェクトに対する
resourcemanager.projects.update - リソースがフォルダにある場合: 移動元フォルダと宛先の
resourcemanager.projects.move - リソースがフォルダ内にない場合: 組織リソースの
resourcemanager.projects.move
カスタムロールまたは他の事前定義ロールを使用してこれらの権限を取得することもできます。
Console
プロジェクトを移動するには:
コンソールで [**リソースの管理**] ページに移動します。 Google Cloud
ページの左上にある [組織] プルダウンから組織を選択します。
プロジェクトの行をクリックし、リソースのリストからプロジェクトを選択します。プロジェクトの名前はクリックしないでください。クリックすると、プロジェクトの Identity and Access Management(IAM)ページに移動します。
行のオプション メニュー(3 つの点のアイコン)をクリックして、[移動] をクリックします。
[参照] をクリックして、プロジェクトの移動先のフォルダを選択します。
[移動] をクリックします。
gcloud
プロジェクトを移動するには、
gcloud beta projects move
コマンドを実行します。
gcloud beta projects move PROJECT_ID \ --DESTINATION_TYPE DESTINATION_ID
次のように置き換えます。
PROJECT_ID: 移動するプロジェクトの ID または番号。DESTINATION_TYPE: 移動先のタイプ(organizationまたはfolder)。DESTINATION_ID: プロジェクトの移動先の組織リソースまたはフォルダの ID。
REST
プロジェクトを移動するには、v3
projects.move メソッド
を使用します。
リクエスト:
POST https://cloudresourcemanager.googleapis.com/v3/{name=PROJECT_NAME}:move
{
"destinationParent": DESTINATION_PARENT
}
次のように置き換えます。
PROJECT_NAME: 更新するプロジェクトの名前。例:projects/415104041262DESTINATION_PARENT: プロジェクトの移動先の新しい親組織リソースまたはフォルダ。例:organizations/12345678901
成功した場合、リクエストによって オペレーションが返され、これ を使用してプロジェクトの移動を追跡できます。
フォルダを別のフォルダに移動する
フォルダを別のフォルダに移動するには、移動元と移動先の両方のフォルダに対する resourcemanager.folders.move 権限が必要です。
Console
コンソールでフォルダを他のフォルダに移動するプロセスは、プロジェクトの移動と似ています。
- Google Cloud コンソールで、[リソースの管理] ページを開きます。
- ページの左上にある [組織] プルダウンから組織リソースを選択します。
- フォルダの行をクリックして、プロジェクトとフォルダのリストからフォルダを選択します。
- 行のオプション メニュー(3 つの点のアイコン)をクリックして、[移動] をクリックします。
- [参照] をクリックして、フォルダの移動先のフォルダを選択します。
- [移動] をクリックします。
gcloud
組織リソースの下にフォルダを移動するには、次のコマンドを実行します。
gcloud resource-manager folders move FOLDER_ID \
--organization=PARENT_ID
次のように置き換えます。
FOLDER_ID: 移動するフォルダの IDPARENT_ID: 親組織リソースの ID
フォルダを別のフォルダに移動するには、次のコマンドを実行します。
gcloud resource-manager folders move FOLDER_ID \
--folder=PARENT_ID
次のように置き換えます。
FOLDER_ID: 移動するフォルダの IDPARENT_ID: 親フォルダの ID
REST
JSON リクエスト:
request_json= '{
destinationParent: "folders/DESTINATION_FOLDER_ID"
}'
フォルダを移動する 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:move
次のように置き換えます。
- DESTINATION_FOLDER_ID:別の移動するフォルダを入れるフォルダの ID(例:
98765)。 - DISPLAY_NAME: 移動するフォルダの表示名(例: "My Awesome Folder")。
フォルダ移動に対するレスポンス:
{
"name": "operations/fm.1234567890",
"metadata": {
"@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
"displayName": "DISPLAY_NAME",
"operationType": "MOVE"
}
}
オペレーションを取得する curl リクエスト:
curl -H "Authorization: Bearer ${bearer_token}" \
https://cloudresourcemanager.googleapis.com/v3/operations/fm.1234567890
オペレーション取得に対するレスポンス:
{
"name": "operations/fm.1234567890",
"metadata": {
"@type": "type.googleapis.com/google.cloud.resourcemanager.v3.FolderOperation",
"displayName": "DISPLAY_NAME",
"operationType": "MOVE"
},
"done": true,
"response": {
"@type": "type.googleapis.com/google.cloud.resourcemanager.v3.Folder",
"name": "folders/12345",
"parent": "folders/98765",
"displayName": "DISPLAY_NAME",
"lifecycleState": "ACTIVE",
"createTime": "2017-07-19T23:29:26.018Z",
"updateTime": "2017-07-20T00:54:44.295Z"
}
}
フォルダ内のプロジェクトを表示または一覧表示する
フォルダの直接の子であるプロジェクトを表示または一覧表示するには、フォルダに対するフォルダ閲覧者のロール(roles/resourcemanager.folderViewer)またはブラウザのロール(roles/browser)が必要です。
Console
コンソールで、[**リソースの管理**] ページを開きます。 Google Cloud
[組織] プルダウンで組織を選択します。
リソースリストでフォルダの名前をクリックして展開し、そのプロジェクトを表示します。
省略可: リストの上部にある [フィルタ] バーを使用して、名前または ID で特定のプロジェクトを検索します。
gcloud
特定のフォルダの直接の子であるすべてのプロジェクトを一覧表示するには、フィルタを指定して gcloud projects list コマンドを使用します。
gcloud projects list --filter="parent.id:FOLDER_ID AND parent.type:folder"
FOLDER_ID は、フォルダの一意の ID に置き換えます。
REST
親フォルダを定義するクエリ パラメータを指定して、projects.list メソッドを使用します。
HTTP リクエスト: GET https://cloudresourcemanager.googleapis.com/v3/projects?parent=folders/FOLDER_ID
curl コマンドの例:
Bash
curl -H "Authorization: Bearer $(gcloud auth print-access-token)"
"https://cloudresourcemanager.googleapis.com/v3/projects?parent=folders/FOLDER_ID"
FOLDER_ID は、フォルダの一意の ID に置き換えます。
タグまたはラベルでプロジェクトをフィルタする(省略可)
フォルダ内に多数のプロジェクトがある場合は、フィルタを使用してメタデータに基づいて特定のリソースを検索できます。
Console
- [リソースの管理] ページの [フィルタ] バーに「
Labels:key=value」と入力すると、特定のラベルが付いたプロジェクトにリストが絞り込まれます。コンソールでは、タグによるビジュアル フィルタリングは限定的にしかサポートされていません。高度なタグクエリには Google Cloud CLI を使用してください。
gcloud
特定のタグ値を持つフォルダ内のプロジェクトを一覧表示するには、tags 属性を指定して --filter フラグを使用します。
gcloud projects list \ --filter="parent.id:FOLDER_ID AND tags.TAG_KEY_PARENT/TAG_KEY_SHORT_NAME:TAG_VALUE_SHORT_NAME"
次のように置き換えます。
FOLDER_ID: フォルダの一意の ID。TAG_KEY_PARENT: タグキーの親リソースの ID(組織やプロジェクトなど)。TAG_KEY_SHORT_NAME: タグキーの略称。TAG_VALUE_SHORT_NAME: タグ値の略称。
ラベルでフィルタするには:
gcloud projects list \ --filter="parent.id:FOLDER_ID AND labels.KEY=VALUE"
次のように置き換えます。
FOLDER_ID: フォルダの一意の ID。KEY: ラベルのキー。VALUE: ラベルの値。
次のステップ
- プロジェクトの表示と更新について学習する。
- プロジェクトの管理のロールと権限について学習する。