組織のポリシー サービスには、組織のサービス アカウントに影響する可能性のある、事前定義のマネージド制約がいくつかあります。このページでは、組織のポリシーによって生成されるエラーと、それらのエラーの解決手順について説明します。
必要なロール
組織のポリシーに関する問題のトラブルシューティングに必要な権限を取得するには、組織に対する組織ポリシー管理者(roles/orgpolicy.policyAdmin
)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
サービス アカウント キー作成の無効化に関するトラブルシューティング
組織に iam.disableServiceAccountKeyCreation
制約が適用されている場合、組織内のどのサービス アカウントにもキーを作成できません。この制約の詳細については、サービス アカウント キーの作成を無効にするをご覧ください。
鍵作成エラー
サービス アカウント キーを作成しようとして、iam.disableServiceAccountKeyCreation
制約によってアクションがブロックされた場合、次のエラー メッセージが表示されます。
コンソール
Google Cloud コンソールに、[サービス アカウント キーの作成が無効になっています] という見出しのダイアログが表示されます。このダイアログには、iam.disableServiceAccountKeyCreation
制約が組織に適用されていることが示されます。
gcloud
ERROR: (gcloud.iam.service-accounts.keys.create) FAILED_PRECONDITION: Key
creation is not allowed on this service account.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
violations:
- description: Key creation is not allowed on this service account.
subject: projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com
type: constraints/iam.disableServiceAccountKeyCreation
REST
{
"error": {
"code": 400,
"message": "Key creation is not allowed on this service account.",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.PreconditionFailure",
"violations": [
{
"type": "constraints/iam.disableServiceAccountKeyCreation",
"subject": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com",
"description": "Key creation is not allowed on this service account."
}
]
}
]
}
}
サービス アカウント キー作成エラーに対する推奨の解決策
組織のポリシーによりサービス アカウント キーを作成できない場合は、次のことをおすすめします。
サービス アカウント キーが必要かどうかを評価します。
認証にサービス アカウント キーを使用することはおすすめしません。サービス アカウント キーが適切に管理されていない場合、認証情報の漏洩、権限昇格、情報開示、否認防止などの脅威に対する脆弱性が高まる可能性があるためです。
ほとんどの場合、サービス アカウント キーではなく、より安全な代替手段で認証する必要があります。
ユースケースでサービス アカウント キーが必要な場合は、プロジェクトの
iam.disableServiceAccountKeyCreation
制約を無効にします。
組織のポリシーの制約を無効にするには、制約の適用を無効にするか、プロジェクトを適用から除外します。
組織全体で制約の適用を無効にするには、次の操作を行います。
組織レベルで組織のポリシー管理者ロール(
roles/orgpolicy.policyAdmin
)があることを確認します。このロールは組織にのみ付与できます。プロジェクトのロールリストには表示されません。組織レベルでロールを付与する方法については、プロジェクト、フォルダ、組織へのアクセス権を管理するをご覧ください。
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
プロジェクト セレクタで、
iam.disableServiceAccountKeyCreation
制約を無効にする組織を選択します。[フィルタ] フィールドに「
iam.disableServiceAccountKeyCreation
」と入力します。次に、ポリシーリストで [サービス アカウント キーの作成を無効にする] をクリックします。[ポリシーを管理] をクリックします。
[ポリシーのソース] セクションで、[親のポリシーをオーバーライドする] が選択されていることを確認します。
[適用] で、この組織のポリシー制約の適用をオフにします。
[ポリシーを設定] をクリックします。
プロジェクトを適用から除外するには、次の操作を行います。
-
組織レベルでタグ管理者ロール(
roles/resourcemanager.tagAdmin
)と組織ポリシー管理者ロール(roles/orgpolicy.policyAdmin
)があることを確認します。組織レベルでロールを付与する方法については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。 -
組織レベルで、リソースを組織のポリシーから除外するかどうかを定義するために、タグキーとタグ値を作成します。キー
disableServiceAccountKeyCreation
と値enforced
、not_enforced
を使用してタグを作成することをおすすめします。タグキーとタグ値の作成方法については、新しいタグの作成と定義をご覧ください。
-
disableServiceAccountKeyCreation
タグを組織に適用し、その値をenforced
に設定します。組織内のすべてのリソースは、別のタグ値で上書きされない限り、このタグ値を継承します。リソースにタグを適用する方法については、リソースへのタグの適用をご覧ください。
-
組織のポリシーから除外するサービス アカウントごとに
disableServiceAccountKeyCreation
タグを付けて、その値をnot_enforced
に設定します。この方法でサービス アカウントにタグ値を設定すると、組織から継承されたタグ値がオーバーライドされます。 -
除外リソースに制約が適用されないように、サービス アカウント キーの作成を禁止する組織のポリシーを作成または更新します。このポリシーには、次のルールが必要です。
-
disableServiceAccountKeyCreation: not_enforced
タグの付いたリソースに適用されないようにiam.disableServiceAccountKeyCreation
制約を構成します。このルールの条件は次のようになります。"resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
-
他のすべてのリソースに適用されるように
iam.disableServiceAccountKeyCreation
制約を構成します。
-
-
組織レベルでタグ管理者ロール(
サービス アカウント作成の無効化に関するトラブルシューティング
組織に iam.disableServiceAccountCreation
制約が適用されている場合、組織内のどのプロジェクトでもサービス アカウントを作成できません。この制約の詳細については、サービス アカウントの作成を無効にするをご覧ください。
サービス アカウント作成エラー
サービス アカウントを作成しようとして、iam.disableServiceAccountCreation
制約によってアクションがブロックされた場合、次のエラー メッセージが表示されます。
コンソール
Google Cloud コンソールに、[サービス アカウントの作成に失敗しました] という見出しのダイアログが表示されます。ダイアログに [操作に失敗しました。もう一度お試しください] と表示されます。
gcloud
ERROR: (gcloud.iam.service-accounts.create) FAILED_PRECONDITION: Service account
creation is not allowed on this project.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
violations:
- description: Service account creation is not allowed on this project.
subject: projects/PROJECT_ID/serviceAccounts/?configvalue=
type: constraints/iam.disableServiceAccountCreation
REST
{
"error": {
"code": 400,
"message": "Service account creation is not allowed on this project.",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.PreconditionFailure",
"violations": [
{
"type": "constraints/iam.disableServiceAccountCreation",
"subject": "projects/PROJECT_ID/serviceAccounts/?configvalue=",
"description": "Service account creation is not allowed on this project."
}
]
}
]
}
}
サービス アカウント作成エラーに対する推奨の解決策
組織のポリシーによりサービス アカウントを作成できない場合は、次のことをおすすめします。
サービス アカウントが必要かどうかを評価します。
サービス アカウントを使用するタイミングを選択するで、ユースケースにサービス アカウントが必要であることを確認します。
ユースケースでサービス アカウントが必要な場合は、プロジェクトの
iam.disableServiceAccountCreation
制約を無効にします。
組織のポリシーの制約を無効にするには、制約の適用を無効にするか、プロジェクトを適用から除外します。
組織全体で制約の適用を無効にするには、次の操作を行います。
組織レベルで組織のポリシー管理者ロール(
roles/orgpolicy.policyAdmin
)があることを確認します。このロールは組織にのみ付与できます。プロジェクトのロールリストには表示されません。組織レベルでロールを付与する方法については、プロジェクト、フォルダ、組織へのアクセス権を管理するをご覧ください。
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
プロジェクト セレクタで、
iam.disableServiceAccountCreation
制約を無効にする組織を選択します。[フィルタ] フィールドに「
iam.disableServiceAccountCreation
」と入力します。次に、ポリシーリストで [サービス アカウントの作成を無効にする] をクリックします。[ポリシーを管理] をクリックします。
[ポリシーのソース] セクションで、[親のポリシーをオーバーライドする] が選択されていることを確認します。
[適用] で、この組織のポリシー制約の適用をオフにします。
[ポリシーを設定] をクリックします。
プロジェクトを適用から除外するには、次の操作を行います。
-
組織レベルでタグ管理者ロール(
roles/resourcemanager.tagAdmin
)と組織ポリシー管理者ロール(roles/orgpolicy.policyAdmin
)があることを確認します。組織レベルでロールを付与する方法については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。 -
組織レベルで、リソースを組織のポリシーから除外するかどうかを定義するために、タグキーとタグ値を作成します。キー
disableServiceAccountCreation
と値enforced
、not_enforced
を使用してタグを作成することをおすすめします。タグキーとタグ値の作成方法については、新しいタグの作成と定義をご覧ください。
-
disableServiceAccountCreation
タグを組織に適用し、その値をenforced
に設定します。組織内のすべてのリソースは、別のタグ値で上書きされない限り、このタグ値を継承します。リソースにタグを適用する方法については、リソースへのタグの適用をご覧ください。
-
組織のポリシーから除外するプロジェクトまたはフォルダごとに
disableServiceAccountCreation
タグを付けて、その値をnot_enforced
に設定します。この方法でプロジェクトまたはフォルダにタグ値を設定すると、組織から継承されたタグ値がオーバーライドされます。 -
除外リソースに制約が適用されないように、サービス アカウントの作成を禁止する組織のポリシーを作成または更新します。このポリシーには、次のルールが必要です。
-
disableServiceAccountCreation: not_enforced
タグの付いたリソースに適用されないようにiam.disableServiceAccountCreation
制約を構成します。このルールの条件は次のようになります。"resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')"
-
他のすべてのリソースに適用されるように
iam.disableServiceAccountCreation
制約を構成します。
-
-
組織レベルでタグ管理者ロール(
デフォルトのサービス アカウントへのロールの付与に関するトラブルシューティング
デフォルトのサービス アカウントは、特定のGoogle Cloud サービスを使用しているときに自動的に作成されます。これには、次の識別子が付いています。
- App Engine サービス デフォルトのサービス アカウント:
PROJECT_ID@appspot.gserviceaccount.com
- Compute Engine のデフォルトのサービス アカウント:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
組織のポリシーでこの動作が無効にされていない限り、すべてのデフォルトのサービス アカウントには、作成時に編集者ロール(roles/editor
)が自動的に付与されます。デフォルトのサービス アカウントに編集者ロールが付与されないようにする組織のポリシーの制約が 2 つあります。
iam.automaticIamGrantsForDefaultServiceAccounts
: デフォルトのサービス アカウントにロールが自動的に付与されないようにする事前定義の制約。この制約により、後でデフォルトのサービス アカウントに編集者ロールを付与できなくなることはありません。constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts
: 編集者とオーナー(roles/owner
)のロールがデフォルトのサービス アカウントに付与されないようにするマネージド制約。
サービス アカウントへの基本ロールの付与に関するエラー
プロジェクトに iam.automaticIamGrantsForDefaultServiceAccounts
制約または constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts
制約が適用されている場合、デフォルトのサービス アカウントを使用するプロジェクト内のワークロードで、権限不足エラーが発生することがあります。デフォルトのサービス アカウントに付与するロールについては、デフォルトのサービス アカウントへのロールの付与に対する推奨の解決策をご覧ください。
iam.automaticIamGrantsForDefaultServiceAccounts
制約自体はエラーを引き起こしません。ただし、この制約により、デフォルトのサービス アカウントを使用するワークロードに必要な権限がない可能性があります。
また、プロジェクトに constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts
制約が適用されている場合、デフォルトのサービス アカウントにオーナーまたは編集者のロールを付与しようとすると、次のようなエラー メッセージが表示されます。
コンソール
Google Cloud コンソールに、[IAM ポリシーの更新に失敗しました] という見出しのダイアログが表示されます。ダイアログには、IAM ポリシーに対して行おうとしている変更が組織のポリシー管理者によって制限されていることが示され、更新をブロックしている制約の一覧が表示されます。リストにある制約には、customConstraints/custom.cantGrantProjectIamAdmin
制約が含まれます。
gcloud
ERROR: (gcloud.projects.set-iam-policy) FAILED_PRECONDITION: Operation denied by
org policy on resource 'RESOURCE_ID':
["constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts":
"When this constraint is enforced, it prevents anyone from granting the Editor
role (roles/editor) or the Owner role (roles/owner) to the Compute Engine and
App Engine default service accounts, at any time. To learn more about default
service accounts, see
https://cloud.google.com/iam/help/service-accounts/default. Enforcing this
constraint prevents the default service accounts from automatically being
granted the Editor role (roles/editor). This might cause permission issues for
services that use these service accounts. To learn which roles to grant to each
service account, see
https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default."].
REST
{
"error": {
"code": 400,
"message": "Operation denied by org policy on resource
'RESOURCE_ID':
[\"constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts\":
\"When this constraint is enforced, it prevents anyone from granting the
Editor role (roles/editor) or the Owner role (roles/owner) to the Compute
Engine and App Engine default service accounts, at any time. To learn more
about default service accounts, see
https://cloud.google.com/iam/help/service-accounts/default.\n Enforcing this
constraint prevents the default service accounts from automatically being
granted the Editor role (roles/editor). This might cause permission issues
for services that use these service accounts. To learn which roles to grant
to each service account, see
https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.\"].",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "CUSTOM_ORG_POLICY_VIOLATION",
"domain": "googleapis.com",
"metadata": {
"customConstraints": "constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts",
"resource": "projects/PROJECT_ID"
}
}
]
}
}
デフォルトのサービス アカウントへのロールの付与に対する推奨の解決策
組織のポリシーにより、デフォルトのサービス アカウントに編集者またはオーナーのロールを付与できない場合は、サービス アカウントに付与する権限を制限する必要があります。サービス アカウントに必要なロールは、使用しているサービスと実行するタスクによって異なります。
次の表で、使用しているサービスに応じて、どのデフォルト サービス アカウントにどのロールを付与するかを確認してください。
サービス | デフォルトのサービス アカウント | 付与するロール |
---|---|---|
App Engine | App Engine デフォルト サービス アカウント(PROJECT_ID@appspot.gserviceaccount.com ) |
Cloud Build アカウントのロール(roles/cloudbuild.builds.builder ) |
Compute Engine | Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com ) |
デフォルトのサービス アカウントに必要なロールは、実行するタスクによって異なります。必要なロールを確認するには、完了するタスクのドキュメントを確認するか、適切な事前定義ロールを見つけるをご覧ください。 付与するロールを決定する際は、Compute Engine ドキュメントのサービス アカウントのページに記載されているベスト プラクティスに準拠してください。 |
Cloud Build | Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com ) |
Cloud Build サービス アカウントのロール(roles/cloudbuild.builds.builder ) |
Cloud Deploy | Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com ) |
このサービス アカウントに付与するロールを確認するには、ユースケースに対応する Cloud Deploy クイックスタートを見つけて、そのクイックスタートで説明されているロールを付与します。Cloud Deploy のクイックスタートの一覧については、Cloud Deploy のドキュメントのクイックスタートをご覧ください。 |
Cloud Run functions と Cloud Functions | Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com ) |
関数をデプロイする: Cloud Build アカウント ロール( 詳細については、Cloud Build のカスタム サービス アカウントをご覧ください。 |
Cloud Run | Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com ) |
デフォルトのサービス アカウントに必要なロールは、実行するタスクによって異なります。必要なロールを確認するには、完了するタスクのドキュメントを確認するか、適切な事前定義ロールを見つけるをご覧ください。 Cloud Run ロールの詳細については、Cloud Run ドキュメントの IAM によるアクセス制御をご覧ください。 |
Google Kubernetes Engine | Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com ) |
Kubernetes Engine デフォルト ノード サービス アカウント ロール( 詳細については、最小権限の IAM サービス アカウントの使用をご覧ください。 |
ワークフロー |
Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com )
|
デフォルトのサービス アカウントに必要なロールは、実行するタスクによって異なります。必要なロールを確認するには、完了するタスクのドキュメントを確認するか、適切な事前定義ロールを見つけるをご覧ください。 Workflows ドキュメントの Google Cloud リソースにアクセスするためのワークフロー権限を付与するで説明されているベスト プラクティスに従ってください。 |