IAM binding が組織ポリシーで弾かれた場合
プロジェクト追加ウィザード Step3 「当社サービスアカウントへの権限付与」で以下のエラーが出る場合、お客様の Google Cloud 組織で組織ポリシーconstraints/iam.allowedPolicyMemberDomains(Domain Restricted Sharing)が有効になっており、当社サービスアカウントを IAM に追加できない状態です。
該当エラー例
ERROR: (gcloud.projects.add-iam-policy-binding) FAILED_PRECONDITION:
One or more users named in the policy do not belong to a permitted customer.
description: User worker-sa@circumflex-security.iam.gserviceaccount.com
is not in permitted organization.
type: constraints/iam.allowedPolicyMemberDomainsWorkspace 顧客や ISMS / SOC2 等で組織ポリシーを強化されているお客様で発生しやすい 事象です。当社サービスのアーキテクチャ(クロスアカウント IAM 方式)の前提を満たすために、以下のいずれかの対応をお願いいたします。
解決策 A: 該当プロジェクト単位で制約を上書きする(推奨)
該当の Google Cloud プロジェクトだけallowedPolicyMemberDomainsを「全許可」に上書きします。組織全体には影響しません。
必要権限: 該当 Google Cloud プロジェクトのroles/orgpolicy.policyAdminまたはプロジェクトオーナー
# YOUR_PROJECT_ID は対象プロジェクト ID に置き換えてください # 1. 上書きポリシーを一時ファイルに書き出す cat > tmp-policy.yaml <<'EOF' constraint: constraints/iam.allowedPolicyMemberDomains listPolicy: allValues: ALLOW EOF # 2. set-policy にファイルパスを渡す(gcloud は - で stdin を受け付けないため) gcloud resource-manager org-policies set-policy tmp-policy.yaml \ --project=YOUR_PROJECT_ID # 3. (任意)一時ファイルを削除 rm tmp-policy.yaml
上記実行後、ウィザード Step3 のコマンドを再実行してください。
⚠️ 組織ポリシーの変更は 反映に最大 7 分かかります(Google Cloud の仕様)。set-policy 直後に再実行すると同じエラーが出ることがあります。 まず以下のコマンドでポリシーが実際に適用されているか確認した上で、数分待ってから 再実行してください。
gcloud resource-manager org-policies describe \ constraints/iam.allowedPolicyMemberDomains \ --project=YOUR_PROJECT_ID
返ってきた YAML に allValues: ALLOW が含まれていれば適用済みです。それでも 7 分待って再実行してもエラーが続く場合は、 親組織ポリシーからの継承が効いている可能性があるためinheritFromParent: falseを YAML に追記して再度 set-policy してください。
⚠️ 上書きを元に戻したい場合は次のコマンドで削除できます。すでに追加済みの IAM binding は維持されます。
gcloud resource-manager org-policies delete \ constraints/iam.allowedPolicyMemberDomains \ --project=YOUR_PROJECT_ID
解決策 B: 当社の Cloud Identity Customer ID を組織ポリシーに追加(恒久対応)
当社の Cloud Identity Customer ID を、お客様の組織ポリシーのallowedValuesに追加していただく方法です。1 回設定すれば、今後追加されるどのプロジェクトでも 同じエラーが起きなくなります。
必要権限: お客様の Google Cloud 組織のroles/orgpolicy.policyAdmin
当社の Cloud Identity Customer ID(C0xxxxxxx 形式)はサポートまでお問い合わせください。お客様側で以下のコマンドを実行いただきます。
# CIRCUMFLEX_CUSTOMER_ID はサポートから連絡された値(C0xxxxxxx) # YOUR_ORG_ID は gcloud organizations list で取得できる組織 ID gcloud resource-manager org-policies allow \ constraints/iam.allowedPolicyMemberDomains \ CIRCUMFLEX_CUSTOMER_ID \ --organization=YOUR_ORG_ID
どちらを選べばよいか
- まず試すなら 解決策 A(プロジェクト単位の上書き)。リスクが小さく即座に試せます。
- 今後も継続して当社サービスを利用される、複数プロジェクトに展開する予定がある場合は解決策 B(組織ポリシーへの allowedValues 追加)が運用負荷が低くなります。
それでも解決しない場合
上記の手順で解決しない場合や、組織ポリシーの編集権限が無い場合は、サポートまで ご連絡ください。エラーメッセージ全文と実行したコマンドを添えていただけると スムーズです。
参考: Google Cloud 公式ドキュメント「Restricting identities by domain」