ドメインで制限された共有を使用すると、ドメインまたは組織リソースに基づいてリソースの共有を制限できます。ドメインで制限された共有が有効な場合、許可されているドメインまたは組織に属するプリンシパルのみが、 Google Cloud 組織の IAM ロールの付与対象となります。
ドメインで ID を制限するために使用できる組織のポリシーには、次の 3 種類があります。
iam.managed.allowedPolicyMembers
マネージド制約iam.googleapis.com/AllowPolicy
リソースを参照するカスタムの組織のポリシーiam.allowedPolicyMemberDomains
以前のマネージド制約
始める前に
ドメインで制限された共有を実装する方法を選択します。各方法のメリットとデメリットについては、ドメインによる共有を制限する方法をご覧ください。
必要なロール
ドメイン制限付き共有を適用するために必要な権限を取得するには、組織に対する組織ポリシー管理者 (roles/orgpolicy.policyAdmin
)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
iam.managed.allowedPolicyMembers
制約を使用してドメインで制限された共有を実装する
コンソール
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
プロジェクト選択ツールから、組織のポリシーを編集するプロジェクト、フォルダ、または組織を選択します。表示された [組織のポリシー] ページに、このリソースで使用可能な組織のポリシーの制約のフィルタ可能なリストが表示されます。
リストから、[IAM 許可ポリシーで許可されるポリシー メンバーを制限する] 管理対象制約を選択します。
[ポリシーの詳細] ページで、[ポリシーを管理する] をクリックします。
[ポリシーの編集] ページで、[親のポリシーをオーバーライドする] を選択します。
[ルールを追加] を選択し、組織のポリシー ルールを更新します。
[適用] で [オン] を選択します。
タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグを使用した組織のポリシーの設定をご覧ください。
[パラメータ] セクションで、組織内でロールを付与できるメンバーとプリンシパル セットを構成し、[保存] をクリックします。
必要に応じて、組織のポリシーの変更が適用される前にその効果をプレビューするには、[変更内容をテスト] をクリックします。組織のポリシーの変更のテストの詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
ドライラン モードで組織のポリシーを適用するには、[ドライラン ポリシーを設定] をクリックします。詳細については、ドライラン モードで組織のポリシーを作成するをご覧ください。
ドライラン モードの組織のポリシーが意図したとおりに動作していることを確認したら、[ポリシーを設定] をクリックしてライブポリシーを設定します。
gcloud
組織のポリシーを定義する YAML ファイルを作成します。
name: organizations/ORG_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true parameters: allowedMemberSubjects: - ALLOWED_MEMBER_1 - ALLOWED_MEMBER_2 allowedPrincipalSets: - ALLOWED_PRINCIPAL_SET_1 - ALLOWED_PRINCIPAL_SET_2
次のように置き換えます。
ORG_ID
: Google Cloud組織の数値 ID。CONSTRAINT_NAME
: 設定する制約の名前。ALLOWED_MEMBER_1
、ALLOWED_MEMBER_2
: 組織内でロールを付与できるメンバー。例:user:example-user@example.com
ALLOWED_PRINCIPAL_SET_1
、ALLOWED_PRINCIPAL_SET_2
: 組織内でロールを付与できるプリンシパル セット。例://cloudresourcemanager.googleapis.com/organizations/0123456789012
。
タグで組織のポリシーに条件を設定するには、
rules
にcondition
ブロックを追加します。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグを使用した組織のポリシーの設定をご覧ください。org-policies set-policy
コマンドとspec
フラグを使用してポリシーを設定します。gcloud org-policies set-policy POLICY_PATH \ --update-mask=spec
POLICY_PATH
は、組織のポリシーの YAML ファイルのパスに置き換えます。
ポリシーを適用する前にドライラン モードでテストする方法については、ドライラン モードで組織のポリシーを作成するをご覧ください。
ポリシーを適用する前にシミュレートする方法については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
REST
組織のポリシーを設定するには、organizations.policies.create
メソッドを使用します。
POST https://orgpolicy.googleapis.com/v2/{parent=organizations/ORGANIZATION_ID}/policies
リクエストの JSON 本文には、組織のポリシーの定義が含まれています。この制約がパラメータをサポートしていない場合は、rules
の下の parameters
ブロックを省略します。
{
"name": "organizations/ORG_ID/policies/CONSTRAINT_NAME",
"spec": {
"rules": [
{
"enforce": true,
"parameters": {
"allowedMemberSubjects": [
"ALLOWED_MEMBER_1",
"ALLOWED_MEMBER_2"
],
"allowedPrincipalSets": [
"ALLOWED_PRINCIPAL_SET_1",
"ALLOWED_PRINCIPAL_SET_2"
]
}
}
]
}
}
次のように置き換えます。
ORG_ID
: Google Cloud組織の数値 ID。CONSTRAINT_NAME
: 設定する制約の名前。ALLOWED_MEMBER_1
、ALLOWED_MEMBER_2
: 組織内でロールを付与できるメンバー。例:user:example-user@example.com
ALLOWED_PRINCIPAL_SET_1
、ALLOWED_PRINCIPAL_SET_2
: 組織内でロールを付与できるプリンシパル セット。例://cloudresourcemanager.googleapis.com/organizations/0123456789012
。
タグで組織のポリシーに条件を設定するには、rules
に condition
ブロックを追加します。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグを使用した組織のポリシーの設定をご覧ください。
ポリシーを適用する前にドライラン モードでテストする方法については、ドライラン モードで組織のポリシーを作成するをご覧ください。
ポリシーを適用する前にシミュレートする方法については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
カスタム組織ポリシーを使用してドメイン制限付き共有を実装する
組織内でロールを付与できるプリンシパルを制限するカスタム制約を作成します。
組織のプリンシパルを設定した
memberInPrincipalSet
CEL 関数を使用して、ロールの付与を組織内のメンバーに制限します。組織 ID を確認する方法については、組織リソース ID を取得するをご覧ください。たとえば、次の制約は、ロールの付与を組織内のメンバーに制限します。
name: organizations/ORG_ID/customConstraints/custom.allowInternalIdentitiesOnly methodTypes: - CREATE - UPDATE condition: "resource.bindings.all( binding, binding.members.all(member, MemberInPrincipalSet(member, ['//cloudresourcemanager.googleapis.com/organizations/ORG_ID']) ) )" actionType: ALLOW displayName: Only allow organization members to be granted roles
必要に応じて、論理演算子(
&&
、||
、!
)で結合された追加の CEL 関数を追加して、制約を絞り込みます。次の関数を追加できます。たとえば、次の制約は、ロールの付与を組織のメンバーと
admin@example.com
に制限します。name: organizations/ORG_ID/customConstraints/custom.allowInternalIdentitiesOnly methodTypes: - CREATE - UPDATE condition: "resource.bindings.all( binding, binding.members.all(member, ( MemberInPrincipalSet(member, ['//cloudresourcemanager.googleapis.com/organizations/ORG_ID']) || MemberSubjectMatches(member, ['user:admin@example.com']) ) ) )" actionType: ALLOW displayName: Only allow organization members and service agents to be granted roles
カスタム制約を設定します。
新しいカスタム制約の YAML ファイルを作成したら、組織内の組織のポリシーで使用できるように設定する必要があります。カスタム制約を設定するには、gcloud org-policies set-custom-constraint
コマンドを使用します。gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH
は、カスタム制約ファイルのフルパスに置き換えます。例:/home/user/customconstraint.yaml
完了すると、カスタム制約が組織のポリシーとして Google Cloud 組織のポリシーのリストに表示されます。カスタム制約が存在することを確認するには、gcloud org-policies list-custom-constraints
コマンドを使用します。gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID
は、組織リソースの ID に置き換えます。詳細については、組織のポリシーの表示をご覧ください。カスタム組織のポリシーを適用します。
制約を適用するには、それを参照する組織のポリシーを作成し、その組織のポリシーを Google Cloud リソースに適用します。コンソール
- Google Cloud コンソールで [組織のポリシー] ページに移動します。
- プロジェクト選択ツールで、組織のポリシーを設定するプロジェクトを選択します。
- [組織のポリシー] ページのリストで制約を選択して、その制約の [ポリシーの詳細] ページを表示します。
- このリソースの組織のポリシーを構成するには、[ポリシーを管理] をクリックします。
- [ポリシーの編集] ページで、[Override parent's policy] を選択します。
- [ルールを追加] をクリックします。
- [適用] セクションで、この組織のポリシーの適用を有効にするかどうかを選択します。
- 省略可: タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグ付きの組織のポリシーの設定をご覧ください。
- [変更内容をテスト] をクリックして、組織のポリシーの効果をシミュレートします。以前のマネージド制約ではポリシー シミュレーションを使用できません。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
- 組織のポリシーを完成させて適用するには、[ポリシーを設定] をクリックします。ポリシーが有効になるまでに最大 15 分かかります。
gcloud
ブール型ルールを含む組織のポリシーを作成するには、制約を参照するポリシー YAML ファイルを作成します。
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true
次のように置き換えます。
-
PROJECT_ID
: 制約を適用するプロジェクト。 -
CONSTRAINT_NAME
: 適用する制約の名前。例:compute.disableAllIpv6
。
制約を含む組織のポリシーを適用するには、次のコマンドを実行します。
gcloud org-policies set-policy POLICY_PATH
POLICY_PATH
は、組織のポリシーの YAML ファイルのパスに置き換えます。ポリシーが有効になるまでに最大 15 分かかります。
iam.allowedPolicyMemberDomains
制約を使用してドメインで制限された共有を実装する
ドメイン制限の制約は、リスト constraint_type
を含む以前のマネージド制約です。Google Workspace のお客様 ID と Google Cloud 組織リソース ID を、ドメイン制限の制約の allowed_values
リストに追加または削除できます。ドメイン制限の制約は値の拒否をサポートしていません。組織ポリシーを denied_values
リストの ID で保存することはできません。
allowed_values
に一覧表示されている Google Workspace アカウントまたは組織リソースに関連付けられているすべてのドメインは、組織のポリシーで許可されます。他のすべてのドメインは、組織のポリシーによって拒否されます。
ドメイン制限の制約を適用する組織のポリシーを、サポートされているリソースのリストに含まれる任意のリソースに対して条件付きにすることができます。たとえば、Cloud Storage バケット、BigQuery データセット、Compute Engine VM などです。
コンソール
ドメイン制限の制約を含む組織のポリシーを設定する手順は、次の通りです。
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。
[組織のポリシー] ページで、制約のリストから [ドメイン制限付き共有] を選択します。
[ポリシーの詳細] ページで、[ポリシーを管理する] をクリックします。
[適用対象] で、[親のポリシーをオーバーライドする] を選択します。
[ルールの追加] をクリックします。
[ポリシーの値] で [カスタム] を選択します。
[ポリシーの種類] で [許可] を選択します。
[カスタム値] で、フィールドに組織リソース ID または Google Workspace お客様 ID を入力します。
組織リソース ID を入力すると、次のプリンシパルに組織内のロールを付与できます。
- 組織内のすべての Workforce Identity プール
- 組織内の任意のプロジェクト内のすべてのサービス アカウントと Workload Identity プール
- 組織内のリソースに関連付けられているすべてのサービス エージェント。
Google Workspace の顧客 ID を入力すると、次のプリンシパルに組織内のロールを付与できます。
- Google Workspace のお客様 ID に関連付けられているすべてのドメイン内のすべての ID
- 組織内のすべての Workforce Identity プール
- 組織内の任意のプロジェクト内のすべてのサービス アカウントと Workload Identity プール
- 組織内のリソースに関連付けられているすべてのサービス エージェント。
複数の ID を追加する場合は、[新しいポリシーの値] をクリックして、追加のフィールドを作成します。
[完了] をクリックします。
必要に応じて、タグでドメイン制限の制約に条件を設定するには、[条件を追加] をクリックします。
[タイトル] フィールドに、条件の名前を入力します。
[説明] フィールドに、条件の説明を入力します。この説明では、必須タグとそれらがリソースに及ぼす影響について説明します。
条件作成ツールを使用して、制約を有効にするために特定のタグを必要とする条件を作成できます。
[条件ビルダー] タブの [条件タイプ] メニューで、[タグ] を選択します。
条件の演算子を選択します。タグ全体と一致するには、matches 演算子を使用します。タグキーとタグ値を照合するには、matches ID 演算子を使用します。
matches 演算子を選択した場合は、タグの名前空間名の値を入力します。matches ID 演算子を選択した場合は、キーと値の ID を入力します。
[追加] をクリックすると、複数の条件を作成できます。別の条件を追加する場合は、[And] を切り替えることで、すべての条件が満たされるように条件ロジックを設定できます。[Or] を切り替えることで、条件のいずれか 1 つだけが正になるように条件ロジックを設定できます。
条件フィールドの右にある大きな [X] をクリックして、式を削除できます。
条件の編集が完了したら、[保存] をクリックします。
ポリシーを適用するには、[ポリシーを設定] をクリックします。
gcloud
ポリシーは Google Cloud CLI を使用して設定できます。ドメイン制限の制約を含むポリシーを作成するには、次のコマンドを実行します。
ドメイン制限の制約を含む組織のポリシーを設定するには、次のコマンドを実行します。
gcloud org-policies set-policy POLICY_PATH
ここで、POLICY_PATH
は、組織のポリシー JSON ファイルへのフルパスです。出力は次のようになります。
name: organizations/ORGANIZATION_ID/policies/iam.allowedPolicyMemberDomains
spec:
rules:
- condition: # This condition applies to the values block.
expression: "resource.matchTag('ORGANIZATION_ID/environment', 'dev')"
values:
allowedValues:
- PRINCIPAL_SET
- values:
allowedValues:
- PRINCIPAL_SET
以下を置き換えます。
- ORGANIZATION_ID は、このポリシーを設定する組織リソースの ID に置き換えます。
PRINCIPAL_SET は、組織リソース ID など、許可する Cloud Identity プリンシパル ID に置き換えます。例:
is:principalSet://iam.googleapis.com/organizations/01234567890123
。許可する他のすべての ID には、Google Workspace お客様 ID を使用する必要があります。例:
is:C03g5e3bc
この組織のポリシーが適用されると、allowed_values
のリストから組織リソース ID または Google Workspace ドメインに属している ID のみが許可ポリシーで許可されます。Google Workspace の人間のユーザーとグループは、その組織リソースまたはその Google Workspace ドメインに属している必要があり、IAM サービス アカウントは、指定された Google Workspace ドメインに関連付けられた組織リソースの子でなければなりません。
たとえば、企業の Google Workspace のお客様 ID のみを使用して組織のポリシーを作成した場合、その時点からそのドメインのプリンシパルだけを許可ポリシーに追加できます。
エラー メッセージの例
allowed_values
リストに含まれていないプリンシパルを追加しようとして iam.allowedPolicyMemberDomains
レガシー マネージド制約に違反すると、操作は失敗し、エラー メッセージが表示されます。
コンソール
gcloud
ERROR: (gcloud.projects.set-iam-policy) FAILED_PRECONDITION: One or more users named in the policy do not belong to a permitted customer.
組織リソース ID の取得
組織リソース ID は、 Google Cloud コンソール、gcloud CLI、Cloud Resource Manager API のいずれかを使用して取得できます。
Console
Google Cloud コンソールを使用して組織リソース ID を取得するには、次の操作を行います。
- Google Cloud コンソールに移動します。
- ページの上部にあるプロジェクト選択ツールから、組織リソースを選択します。
- 右側にある [詳細] をクリックし、[設定] をクリックします。
[設定] ページに、組織リソース ID が表示されます。
gcloud
組織リソース ID を調べるには、次のコマンドを実行します。
gcloud organizations list
このコマンドによって、所属するすべての組織リソースと、対応する組織リソース ID を一覧表示します。
API
Cloud Resource Manager API を使用して組織リソース ID を確認するには、organizations.search()
メソッド(ドメインのクエリを含む)を使用します。例:
GET https://cloudresourcemanager.googleapis.com/v3/organizations:search{query=domain:altostrat.com}
レスポンスには、組織リソース ID を含む、altostrat.com
に属する組織リソースのメタデータが含まれます。
組織リソース ID を取得したら、それに属するプリンシパルのセットに正しい ID を使用する必要があります。例:
principalSet://iam.googleapis.com/organizations/01234567890123
IAM プリンシパル ID の詳細については、プリンシパル ID をご覧ください。
Google Workspace お客様 ID の取得
ドメイン制限の制約によって使用される Google Workspace お客様 ID は、次の 2 つの方法で取得できます。
gcloud
gcloud organizations list コマンドを使用すると、このユーザーが resourcemanager.organizations.get
権限を持つすべての組織を表示できます。
gcloud organizations list
このコマンドは、DISPLAY_NAME
、ID
(組織 ID)、DIRECTORY_CUSTOMER_ID
を返します。Google Workspace お客様 ID は DIRECTORY_CUSTOMER_ID
です。
API
Google Workspace お客様 ID は、Google Workspace ディレクトリ API を使用して取得できます。
Google Workspace 管理者としてログインした状態で、Customers: get API メソッドのドキュメントにアクセスでき、そこで [EXECUTE] をクリックします。承認後、お客様 ID を含むレスポンスが返されます。
あるいは、次のように API クライアントを使用することもできます。
https://www.googleapis.com/auth/admin.directory.customer.readonly
スコープの OAuth アクセス トークンを取得します。Google Workspace ディレクトリ API のクエリを実行するには、次のコマンドを実行します。
curl -# -X GET "https://www.googleapis.com/admin/directory/v1/customers/customerKey" \ -H "Authorization: Bearer $access_token" -H "Content-Type: application/json"
このコマンドは、お客様情報を含む JSON レスポンスを返します。Google Workspace お客様 ID は id
です。
ドメインで制限された共有の例外を構成する
一部の Google Cloud サービスは、サービス アカウント、サービス エージェント、その他のアカウントを使用して、ユーザーの代わりにアクションを実行します。ドメイン制限付き共有では、これらのアカウントに必要な IAM ロールが自動的に付与されないため、特定のアクションが失敗する可能性があります。
次の表に、ドメイン制限付き共有の影響を受ける可能性がある Google Cloud のアクションを示します。また、これらのアクションを成功させるためにロールを自動的に付与する必要があるアカウントも一覧表示されます。
カスタムの組織のポリシーまたは iam.managed.allowedPolicyMembers
マネージド制約を使用してドメインで制限された共有を実装する場合は、これらのアカウントをドメインで制限された共有制約の例外として追加することを検討してください。アカウントを例外として追加するには、アカウントのプリンシパル ID を許可されたメンバーのリストに追加します。
iam.allowedPolicyMemberDomains
レガシー管理対象制約を使用してドメインで制限された共有を実装する場合は、これらのアカウントに対してアカウント アクセスを強制して、リストされているアクションを実行する必要がある場合があります。
アクション | プリンシパル ID |
---|---|
Google アナリティクス 360 と BigQuery をリンクする | serviceAccount:analytics-processing-dev@system.gserviceaccount.com |
請求先アカウントの BigQuery ログシンクを有効にする | serviceAccount:bUNIQUE_ID@gcp-sa-loggingiam.gserviceaccount.com |
ストレージ アクセス ロギングを有効にする | serviceAccount:cloud-storage-analytics@google.com |
Firebase API を有効にする |
|
Google Chat アプリのエンドポイントとして Pub/Sub を使用する | serviceAccount:chat-api-push@system.gserviceaccount.com |
Pub/Sub を使用して Google Play からリアルタイム デベロッパー通知を受信する | serviceAccount:google-play-developer-notifications@system.gserviceaccount.com |
Cloud CDN で署名付き URL を使用する | serviceAccount:service-PROJECT_NUMBER@cloud-cdn-fill.iam.gserviceaccount.com |
Cloud CDN でのプライベート オリジンの認証 | serviceAccount:service-PROJECT_NUMBER@https-lb.iam.gserviceaccount.com |
Cloud Run パブリック サービス
Cloud Run では、サービスを一般公開できます。ただし、ドメインで制限された共有を実装すると、組織外のユーザーは公開 Cloud Run サービスにアクセスできなくなります。
ユーザーが一般公開されている Cloud Run サービスにアクセスできるようにするには、Cloud Run サービスの Cloud Run 起動元の IAM チェックを無効にする必要があります。詳細については、サービスの Cloud Run 呼び出し元を無効にするをご覧ください。
その他のデータを一般公開する
カスタム組織のポリシーを使用してドメインで制限された共有を実装する場合は、組織のポリシーに例外を追加して、公開データ共有を許可できます。
データを一般公開して共有するには、特別なプリンシパル allUsers
と allAuthenticatedUsers
が必要です。ドメインで制限された共有を使用しながらデータを公開して共有する必要がある場合は、これらのプリンシパルの例外を追加する必要があります。例外を追加できるのは、カスタム組織のポリシーを使用してドメイン制限付き共有を実装している場合のみです。
allUsers
と allAuthenticatedUsers
の例外を追加するには、制約の条件式で memberSubjectMatches
CEL 関数を使用します。
たとえば、次の条件式では、ロールの付与は組織のメンバー、allUsers
、allAuthenticatedUsers
に制限されます。
name: organizations/ORG_ID/customConstraints/custom.allowInternalAndSpecialIdentitiesOnly
methodTypes:
- CREATE
- UPDATE
condition:
"resource.bindings.all(
binding,
binding.members.all(member,
(
MemberInPrincipalSet(member, ['//cloudresourcemanager.googleapis.com/organizations/ORG_ID'])
||
MemberSubjectMatches(member, ['allUsers', 'allAuthenticatedUsers'])
)
)
)"
actionType: ALLOW
displayName: Only allow organization members, allusers, and allAuthenticatedUsers to be granted roles
アカウントへのアクセスの強制
ドメイン制限に違反してプロジェクトに対してアカウントへのアクセスを強制する必要がある場合:
ドメイン制限の制約を含む組織ポリシーを削除します。
プロジェクトに対してアカウントへのアクセスを許可します。
ドメイン制限の制約を含む組織のポリシーを再度実装します。
または、関連するサービス アカウントを含む Google グループにアクセスを許可することもできます。
許可されたドメイン内に Google グループを作成します。
そのグループに対するドメイン制限をオフにするには、Google Workspace 管理者パネルを使用します。
グループにサービス アカウントを追加します。
許可ポリシーで Google グループにアクセスを許可します。