ドメイン別の ID の制限

ドメインで制限された共有を使用すると、ドメインまたは組織リソースに基づいてリソースの共有を制限できます。ドメインで制限された共有が有効な場合、許可されているドメインまたは組織に属するプリンシパルのみが、 Google Cloud 組織の IAM ロールの付与対象となります。

ドメインで ID を制限するために使用できる組織のポリシーには、次の 3 種類があります。

  • iam.managed.allowedPolicyMembers マネージド制約
  • iam.googleapis.com/AllowPolicy リソースを参照するカスタムの組織のポリシー
  • iam.allowedPolicyMemberDomains 以前のマネージド制約

始める前に

ドメインで制限された共有を実装する方法を選択します。各方法のメリットとデメリットの詳細については、ドメインによる共有を制限する方法をご覧ください。

必要なロール

ドメイン制限付き共有を適用するために必要な権限を取得するには、組織に対する組織ポリシー管理者 roles/orgpolicy.policyAdmin)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

iam.managed.allowedPolicyMembers 制約を使用してドメインで制限された共有を実装する

コンソール

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. プロジェクト選択ツールから、組織のポリシーを編集するプロジェクト、フォルダ、または組織を選択します。表示された [組織のポリシー] ページに、このリソースで使用可能な組織のポリシーの制約のフィルタ可能なリストが表示されます。

  3. リストから、[IAM 許可ポリシーで許可されるポリシー メンバーを制限する] 管理対象制約を選択します。

  4. [ポリシーの詳細] ページで、[ポリシーを管理する] をクリックします。

  5. [ポリシーの編集] ページで、[親のポリシーをオーバーライドする] を選択します。

  6. [ルールを追加] を選択し、組織のポリシー ルールを更新します。

  7. [適用] で [オン] を選択します。

  8. タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグを使用した組織のポリシーの設定をご覧ください。

  9. [パラメータ] セクションで、組織内でロールを付与するメンバーとプリンシパル セットを構成し、[保存] をクリックします。

  10. 必要に応じて、組織のポリシーの変更が適用される前にその効果をプレビューするには、[変更内容をテスト] をクリックします。組織のポリシーの変更のテストの詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。

  11. ドライラン モードで組織のポリシーを適用するには、[ドライラン ポリシーを設定] をクリックします。詳細については、ドライラン モードで組織のポリシーを作成するをご覧ください。

  12. ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、[ポリシーを設定] をクリックして有効なポリシーを設定します。

gcloud

  1. 組織のポリシーを定義する YAML ファイルを作成します。

    name: organizations/ORG_ID/policies/iam.managed.allowedPolicyMembers
    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。

    • ALLOWED_MEMBER_1ALLOWED_MEMBER_2: 組織内でロールを付与するメンバー(例: user:example-user@example.com)。

    • ALLOWED_PRINCIPAL_SET_1ALLOWED_PRINCIPAL_SET_2: 組織内でロールを付与するプリンシパル セット。例: //cloudresourcemanager.googleapis.com/organizations/0123456789012

    タグで組織のポリシーに条件を設定するには、rulescondition ブロックを追加します。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグを使用した組織のポリシーの設定をご覧ください。

  2. 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_1ALLOWED_MEMBER_2: 組織内でロールを付与するメンバー(例: user:example-user@example.com)。

  • ALLOWED_PRINCIPAL_SET_1ALLOWED_PRINCIPAL_SET_2: 組織内でロールを付与するプリンシパル セット。例: //cloudresourcemanager.googleapis.com/organizations/0123456789012

タグで組織のポリシーに条件を設定するには、rulescondition ブロックを追加します。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグを使用した組織のポリシーの設定をご覧ください。

ポリシーを適用する前にドライラン モードでテストする方法については、ドライラン モードで組織のポリシーを作成するをご覧ください。

ポリシーを適用する前にシミュレートする方法については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。

カスタム組織ポリシーを使用してドメイン制限付き共有を実装する

  1. 組織内でロールを付与できるプリンシパルを制限するカスタム制約を作成します。

    1. 組織のプリンシパルを設定した memberInPrincipalSet CEL 関数を使用して、ロールの付与を組織内のメンバーに制限します。組織 ID を確認する方法については、組織プリンシパル セットの取得をご覧ください。

      たとえば、次の制約は、ロールの付与を組織内のメンバーに制限します。

      name: organizations/ORG_ID/customConstraints/custom.allowInternalIdentitiesOnly
      resourceTypes: iam.googleapis.com/AllowPolicy
      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
      
    2. 必要に応じて、論理演算子(&&||!)で結合された追加の CEL 関数を追加して、制約を絞り込みます。次の関数を追加できます。

      たとえば、次の制約は、ロールの付与を組織のメンバーと admin@example.com に制限します。

      name: organizations/ORG_ID/customConstraints/custom.allowInternalIdentitiesOnly
      resourceTypes: iam.googleapis.com/AllowPolicy
      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
      
  2. カスタム制約を設定します。

    コンソール

    カスタム制約を作成する手順は次のとおりです。

    1. Google Cloud コンソールで [組織のポリシー] ページに移動します。

      [組織のポリシー] に移動

    2. プロジェクト選択ツールで、組織のポリシーを設定するプロジェクトを選択します。
    3. [ カスタム制約] をクリックします。
    4. [表示名] ボックスに、人が読める形式で制約の名前を入力します。この名前はエラー メッセージで使用されるほか、識別やデバッグにも使用できます。エラー メッセージで公開される可能性があるため、表示名に個人情報(PII)や機密データを使用しないでください。このフィールドには、最大 200 文字まで入力できます。
    5. [制約 ID] ボックスに、新しいカスタム制約の名前を入力します。カスタム制約の名前に使用できるのは、英字(大文字と小文字)と数字のみです(例: custom.disableGkeAutoUpgrade)。このフィールドには、接頭辞(custom.)を除き、最大 70 文字まで入力できます(例: organizations/123456789/customConstraints/custom)。エラー メッセージで公開される可能性があるため、制約 ID に個人情報(PII)や機密データを含めないでください。
    6. [説明] ボックスに、人が読める形式で制約の説明を入力します。この説明は、ポリシー違反の際にエラー メッセージとして使用されます。ポリシー違反が発生した理由と、ポリシー違反を解決する方法に関する詳細を含めてください。エラー メッセージで公開される可能性があるため、説明に個人情報(PII)や機密データを含めないでください。 このフィールドには、最大 2,000 文字まで入力できます。
    7. [リソースの種類] ボックスで、制限するオブジェクトとフィールドを含む Google Cloud REST リソースの名前を選択します(例: container.googleapis.com/NodePool)。ほとんどの種類のリソースは、最大 20 個のカスタム制約をサポートしています。これより多くのカスタム制約を作成しようとすると、オペレーションは失敗します。
    8. [適用方法] で、REST の CREATE メソッドに制約を適用するか、CREATE メソッドと UPDATE メソッドの両方に制約を適用するかを選択します。制約に違反するリソースに対する UPDATE メソッドに制約を適用した場合、そのリソースへの変更は、違反を解決するものでない限り、組織のポリシーによってブロックされます。
    9. すべての Google Cloud サービスで両方のメソッドがサポートされているわけではありません。各サービスでサポートされているメソッドを確認するには、サポートされているサービスをご覧ください。

    10. 条件を定義するには、[ 条件を編集] をクリックします。
      1. [条件を追加] パネルで、サポートされているサービス リソースを参照する CEL 条件を作成します(例: resource.management.autoUpgrade == false)。このフィールドには、最大 1,000 文字まで入力できます。CEL の使用方法の詳細については、Common Expression Language をご覧ください。 カスタム制約で使用できるサービス リソースの詳細については、カスタム制約のサポート サービスをご覧ください。
      2. [保存] をクリックします。
    11. [アクション] で、条件が満たされた場合に評価対象のメソッドを許可するか拒否するかを選択します。
    12. 拒否アクションは、条件が true と評価された場合に、リソースを作成または更新するオペレーションがブロックされることを意味します。

      許可アクションは、条件が true と評価された場合にのみ、リソースを作成または更新するオペレーションが許可されることを意味します。条件に明記されているケースを除き、他のケースはすべてブロックされます。

    13. [制約を作成] をクリックします。
    14. 各フィールドに値を入力すると、このカスタム制約に対応する YAML 構成が右側に表示されます。

    gcloud

    1. カスタム制約を作成するには、次の形式で YAML ファイルを作成します。
    2. name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
      resourceTypes: RESOURCE_NAME
      methodTypes:
        - CREATE
      condition: "CONDITION"
      actionType: ACTION
      displayName: DISPLAY_NAME
      description: DESCRIPTION

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

      • ORGANIZATION_ID: 組織 ID(例: 123456789)。
      • CONSTRAINT_NAME: 新しいカスタム制約の名前。カスタム制約の名前に使用できるのは、英字(大文字と小文字)と数字のみです(例: custom.allowInternalIdentitiesOnly)。このフィールドには、最大 70 文字まで入力できます。
      • RESOURCE_NAME: 制限するオブジェクトとフィールドを含む Google Cloudリソースの完全修飾名。例: iam.googleapis.com/AllowPolicy
      • CONDITION: サポート対象のサービス リソースの表現に対して記述する CEL 条件。このフィールドには、最大 1,000 文字まで入力できます。例: "resource.bindings.all( binding, binding.members.all(member, MemberInPrincipalSet(member, ['//cloudresourcemanager.googleapis.com/organizations/ORG_ID']) ) )"
      • 条件を記述できるリソースの詳細については、サポートされているリソースをご覧ください。

      • ACTION: condition が満たされている場合に実行するアクション。ALLOW のみを設定できます。
      • 許可アクションは、条件が true と評価された場合に、リソースを作成または更新するオペレーションが許可されることを意味します。つまり、条件に明記されているケースを除き、他のケースはすべてブロックされます。

      • DISPLAY_NAME: 制約の名前。わかりやすい名前を入力してください。このフィールドには、最大 200 文字まで入力できます。
      • DESCRIPTION: ポリシー違反の際にエラー メッセージとして表示される制約の説明。わかりやすい説明を入力してください。このフィールドには、最大 2,000 文字まで入力できます。
    3. 新しいカスタム制約の YAML ファイルを作成したら、組織内で組織のポリシーとして使用できるように設定する必要があります。カスタム制約を設定するには、gcloud org-policies set-custom-constraint コマンドを使用します。
    4. gcloud org-policies set-custom-constraint CONSTRAINT_PATH

      CONSTRAINT_PATH は、カスタム制約ファイルのフルパスに置き換えます。例: /home/user/customconstraint.yaml

      この操作が完了すると、カスタム制約が Google Cloud の組織ポリシーのリストに表示され、組織のポリシーとして使用できるようになります。

    5. カスタム制約が存在することを確認するには、gcloud org-policies list-custom-constraints コマンドを使用します。
    6. gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID

      ORGANIZATION_ID は組織リソースの ID に置き換えます。

      詳細については、組織のポリシーの表示をご覧ください。

  3. カスタム組織のポリシーを適用します。

    制約を適用するには、それを参照する組織のポリシーを作成し、その組織のポリシーを Google Cloud リソースに適用します。

    コンソール

    1. Google Cloud コンソールで [組織のポリシー] ページに移動します。

      [組織のポリシー] に移動

    2. プロジェクト選択ツールで、組織のポリシーを設定するプロジェクトを選択します。
    3. [組織のポリシー] ページのリストで制約を選択して、その制約の [ポリシーの詳細] ページを表示します。
    4. このリソースの組織のポリシーを構成するには、[ポリシーを管理] をクリックします。
    5. [ポリシーの編集] ページで、[Override parent's policy] を選択します。
    6. [ルールを追加] をクリックします。
    7. [適用] セクションで、この組織のポリシーを適用するかどうかを選択します。
    8. 省略可: タグで組織のポリシーに条件を設定するには、[条件を追加] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグを使用した組織のポリシーの設定をご覧ください。
    9. [変更内容をテスト] をクリックして、組織のポリシーの効果をシミュレートします。詳細については、Policy Simulator で組織のポリシーの変更をテストするをご覧ください。
    10. ドライラン モードで組織のポリシーを適用するには、[ドライラン ポリシーを設定] をクリックします。詳細については、ドライラン モードで組織のポリシーを作成するをご覧ください。
    11. ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、[ポリシーを設定] をクリックして有効なポリシーを設定します。

    gcloud

    1. ブール値のルールを含む組織のポリシーを作成するには、制約を参照するポリシーの YAML ファイルを作成します。
    2. name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
      
      dryRunSpec:
        rules:
        - enforce: true

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

      • PROJECT_ID: 制約を適用するプロジェクト。
      • CONSTRAINT_NAME: カスタム制約に定義した名前。例: custom.allowInternalIdentitiesOnly
    3. ドライラン モードで組織のポリシーを適用するには、dryRunSpec フラグを指定して次のコマンドを実行します。
    4. gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec

      POLICY_PATH は、組織のポリシーの YAML ファイルのフルパスに置き換えます。ポリシーが有効になるまでに最大 15 分かかります。

    5. ドライラン モードで組織のポリシーが想定どおりに動作することを確認したら、org-policies set-policy コマンドと spec フラグを使用して有効なポリシーを設定します。
    6. gcloud org-policies set-policy POLICY_PATH --update-mask=spec

      POLICY_PATH は、組織のポリシーの YAML ファイルのフルパスに置き換えます。ポリシーが有効になるまでに最大 15 分かかります。

iam.allowedPolicyMemberDomains 制約を使用してドメインで制限された共有を実装する

ドメイン制限の制約は、リスト constraint_type を含む以前のマネージド制約です。ドメイン制限の制約の allowed_values リストで、組織プリンシパル セットまたは Google Workspace のお客様 ID を指定できます。詳細については、組織プリンシパル セットと Google Workspace 顧客 ID をご覧ください。

組織のプリンシパル セットと Google Workspace ID は自動的に許可されません。組織内のプリンシパルが組織内のリソースにアクセスできるようにするには、組織のプリンシパル セットまたは Google Workspace ID のいずれかを許可されたプリンシパル セットとして含める必要があります。

ドメイン制限の制約は値の拒否をサポートしていません。また、denied_values リストに ID を含む組織ポリシーを保存することはできません。

ドメイン制限の制約を適用する組織のポリシーを、サポートされているリソースのリストに含まれる任意のリソースに対して条件付きにすることができます。たとえば、Cloud Storage バケット、BigQuery データセット、Compute Engine VM などです。

コンソール

ドメイン制限の制約を含む組織のポリシーを設定する手順は、次の通りです。

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

    [組織のポリシー] に移動

  2. プロジェクト選択ツールから、組織のポリシーを設定するリソースを選択します。

  3. [組織のポリシー] ページで、制約のリストから [ドメイン制限付き共有] を選択します。

  4. [ポリシーの詳細] ページで、[ポリシーを管理する] をクリックします。

  5. [適用対象] で、[親のポリシーをオーバーライドする] を選択します。

  6. [ルールの追加] をクリックします。

  7. [ポリシーの値] で [カスタム] を選択します。

  8. [ポリシーの種類] で [許可] を選択します。

  9. [カスタム値] で、フィールドに組織プリンシパル セットまたは Google Workspace お客様 ID を入力します。

  10. 複数の ID を追加する場合は、[新しいポリシーの値] をクリックして、追加のフィールドを作成します。

  11. [完了] をクリックします。

  12. 必要に応じて、タグでドメイン制限の制約に条件を設定するには、[条件を追加] をクリックします。

    1. [タイトル] フィールドに、条件の名前を入力します。

    2. [説明] フィールドに、条件の説明を入力します。この説明では、必須タグとそれらがリソースに及ぼす影響について説明します。

    3. 条件作成ツールを使用して、制約を有効にするために特定のタグを必要とする条件を作成できます。

      1. [条件ビルダー] タブの [条件タイプ] メニューで、[タグ] を選択します。

      2. 条件の演算子を選択します。タグ全体と一致するには、matches 演算子を使用します。タグキーとタグ値を照合するには、matches ID 演算子を使用します。

      3. matches 演算子を選択した場合は、タグの名前空間名の値を入力します。matches ID 演算子を選択した場合は、キーと値の ID を入力します。

      4. [追加] をクリックすると、複数の条件を作成できます。別の条件を追加する場合は、[And] を切り替えることで、すべての条件が満たされるように条件ロジックを設定できます。[Or] を切り替えることで、条件のいずれか 1 つだけが正になるように条件ロジックを設定できます。

      5. 条件フィールドの右側にある大きな [X] をクリックして、式を削除できます。

      6. 条件の編集が完了したら、[保存] をクリックします。

  13. ポリシーを適用するには、[ポリシーを設定] をクリックします。

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。組織プリンシパル セットまたは Google Workspace お客様 ID のいずれかを含めることができます。たとえば、is:principalSet://cloudresourcemanager.googleapis.com/organizations/01234567890123is:C03g5e3bc です。

この組織のポリシーが適用されると、allowed_values のリストに指定された ID のみが許可ポリシーで許可されます。許可されるには、プリンシパルが指定された組織プリンシパル セットに含まれているか、指定された Google Workspace ドメインの一部である必要があります。

たとえば、企業の Google Workspace ドメインのお客様 ID のみを許可する組織のポリシーを作成した場合、その時点からそのドメインに関連付けられたプリンシパルのみを許可ポリシーに追加できます。

エラー メッセージの例

allowed_values リストに含まれていないプリンシパルを追加しようとして iam.allowedPolicyMemberDomains レガシー マネージド制約に違反すると、操作は失敗し、エラー メッセージが表示されます。

コンソール

Console のスクリーンショット

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 は、 Google Cloud コンソール、gcloud CLI、Cloud Resource Manager API のいずれかを使用して取得できます。

Console

Google Cloud コンソールを使用して組織リソース ID を取得するには、次の操作を行います。

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソールに移動

  2. ページの上部にあるプロジェクト選択ツールから、組織リソースを選択します。
  3. 右側にある [詳細] をクリックし、[設定] をクリックします。

[設定] ページに、組織リソース 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

組織プリンシパル セットを入力すると、次のプリンシパルに組織内のロールを付与できます。

  • 組織内のすべての Workforce Identity プール
  • 組織内の任意のプロジェクト内のすべてのサービス アカウントと Workload Identity プール
  • 組織のリソースに関連付けられているすべてのサービス エージェント

IAM プリンシパル ID の詳細については、プリンシパル ID をご覧ください。

Google Workspace お客様 ID の取得

Google Workspace の顧客 ID を入力すると、次のプリンシパルに組織内のロールを付与できます。

  • Google Workspace のお客様 ID に関連付けられているすべてのドメイン内のすべての ID
  • 組織内のすべての Workforce Identity プール
  • 組織内の任意のプロジェクト内のすべてのサービス アカウントと Workload Identity プール
  • 組織のリソースに関連付けられているすべてのサービス エージェント

ドメイン制限の制約によって使用される Google Workspace お客様 ID は、次の 2 つの方法で取得できます。

gcloud

gcloud organizations list コマンドを使用すると、このユーザーが resourcemanager.organizations.get 権限を持つすべての組織を表示できます。

gcloud organizations list

このコマンドは、DISPLAY_NAMEID(組織 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 クライアントを使用することもできます。

  1. https://www.googleapis.com/auth/admin.directory.customer.readonly スコープの OAuth アクセス トークンを取得します。
  2. 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
請求先アカウントの BigQuery ログシンクを有効にする serviceAccount:bUNIQUE_ID@gcp-sa-logging.iam.gserviceaccount.com
ストレージ アクセス ロギングを有効にする serviceAccount:cloud-storage-analytics@google.com
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 呼び出し元を無効にするをご覧ください。

その他のデータを一般公開する

カスタム組織のポリシーを使用してドメインで制限された共有を実装する場合は、組織のポリシーに例外を追加して、データの公開共有を許可できます。

データを一般公開して共有するには、特別なプリンシパル allUsersallAuthenticatedUsers が必要です。ドメインで制限された共有を使用しながらデータを公開して共有する必要がある場合は、これらのプリンシパルの例外を追加する必要があります。例外を追加できるのは、カスタム組織のポリシーを使用してドメイン制限付きで共有を実装している場合のみです。

allUsersallAuthenticatedUsers の例外を追加するには、リソースタグに基づいて条件付きのカスタム組織のポリシーを作成します。

  1. 組織リソースにタグキーを作成します。

    gcloud resource-manager tags keys create allUsersIngress \
      --parent=organizations/ORGANIZATION_ID
    

    ORGANIZATION_ID は、組織の ID に置き換えます。

  2. 作成したタグキーのタグ値を作成します。

    gcloud resource-manager tags values create True \
    --parent=ORGANIZATION_ID/allUsersIngress \
    --description="Allow allUsers to access internal Cloud Run services"
    
  3. 一般公開するリソースにタグを付加します。

  4. 制約の条件式で memberSubjectMatches CEL 関数を使用して、カスタム制約を作成します。

    たとえば、次の条件式では、ロールの付与は組織のメンバー、allUsersallAuthenticatedUsers に制限されます。

    name: organizations/ORGANIZATION_ID/customConstraints/custom.allowInternalAndSpecialIdentitiesOnly
    resourceTypes: iam.googleapis.com/AllowPolicy
    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
    
  5. カスタム制約を適用する組織のポリシーを作成します。

    name: organizations/ORGANIZATION_ID/policies/iam.allowedPolicyMemberDomains
    spec:
      rules:
      - allowAll: true
        condition:
          expression: resource.matchTag("ORGANIZATION_ID/allUsersIngress", "True")
          title: allowAllUsersIngress
    
  6. 組織のポリシーを適用します。

    gcloud org-policies set-policy POLICY_PATH
    

    POLICY_PATH は、組織のポリシーのパスとファイル名に置き換えます。

条件付き組織のポリシーを使用すると、allUsersIngress: true タグが付けられたリソースに対する allUsers ID の権限を付与できます。

アカウントへのアクセスの強制

ドメイン制限に違反してプロジェクトに対してアカウントへのアクセスを強制する必要がある場合:

  1. ドメイン制限の制約を含む組織ポリシーを削除します。

  2. プロジェクトに対してアカウントへのアクセスを許可します。

  3. ドメイン制限の制約を含む組織のポリシーを再度実装します。

または、関連するサービス アカウントを含む Google グループにアクセスを許可することもできます。

  1. 許可されたドメイン内に Google グループを作成します。

  2. そのグループに対するドメイン制限をオフにするには、Google Workspace 管理者パネルを使用します。

  3. グループにサービス アカウントを追加します。

  4. 許可ポリシーで Google グループにアクセスを許可します。