組織のポリシー サービスには、組織のサービス アカウントに影響する可能性がある、事前定義された管理対象の制約がいくつかあります。このページでは、組織のポリシーによって生成されるエラーと、それらのエラーを解決するために実行できる手順について説明します。
無効なサービス アカウント キーの作成のトラブルシューティング
組織に iam.disableServiceAccountKeyCreation
制約が適用されている場合、組織内のどのサービス アカウントにもキーを作成できません。この制約の詳細については、サービス アカウント キーの作成を無効にするをご覧ください。
鍵の作成エラー
サービス アカウント キーを作成しようとしたが、iam.disableServiceAccountKeyCreation
制約によってアクションがブロックされた場合、次のエラー メッセージが表示されます。
Console
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
制約によってアクションがブロックされた場合、次のエラー メッセージが表示されます。
Console
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
制約が適用されている場合、デフォルトのサービス アカウントにオーナーまたは編集者のロールを付与しようとすると、次のようなエラー メッセージが表示されます。
Console
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 サービス アカウントを使用するをご覧ください。 |
Workflows |
Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com ) |
デフォルトのサービス アカウントに必要なロールは、実行するタスクによって異なります。必要なロールを確認するには、実行するタスクのドキュメントを確認するか、事前定義ロールの選択をご覧ください。 ワークフローのドキュメントの Google Cloud リソースにアクセスするための権限をワークフローに付与するページで説明されているベスト プラクティスに沿って操作します。 |