サービス アカウントの組織のポリシーエラーのトラブルシューティング

組織のポリシー サービスには、組織のサービス アカウントに影響する可能性がある、事前定義された管理対象の制約がいくつかあります。このページでは、組織のポリシーによって生成されるエラーと、それらのエラーを解決するために実行できる手順について説明します。

無効なサービス アカウント キーの作成のトラブルシューティング

組織に 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."
          }
        ]
      }
    ]
  }
}

サービス アカウント キーの作成エラーの推奨される解決策

組織のポリシーによりサービス アカウント キーを作成できない場合は、次の操作を行うことをおすすめします。

  1. サービス アカウント キーが必要かどうかを評価します。

    認証にサービス アカウント キーを使用することはおすすめしません。これは、サービス アカウント キーが適切に管理されていない場合、認証情報の漏洩、権限昇格、情報開示、否認防止などの脅威に対する脆弱性が高まる可能性があるためです。

    ほとんどの場合、サービス アカウント キーを使用する代わりに、より安全な代替手段を使用して認証する必要があります。

  2. ユースケースにサービス アカウント キーが必要な場合は、プロジェクトの iam.disableServiceAccountKeyCreation 制約を無効にします。

組織のポリシーの制約を無効にするには、制約の適用を無効にするか、プロジェクトを適用から除外します。

  • 組織全体で制約の適用を無効にするには、次の操作を行います。

    1. 組織レベルで組織のポリシー管理者ロール(roles/orgpolicy.policyAdmin)があることを確認します。このロールは組織でのみ付与でき、プロジェクトのロールリストには表示されません。

      組織レベルでロールを付与する方法については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

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

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

    3. プロジェクト セレクタで、iam.disableServiceAccountKeyCreation 制約を無効にする組織を選択します。

    4. [フィルタ] フィールドに「iam.disableServiceAccountKeyCreation」と入力します。次に、ポリシーリストで [サービス アカウント キーの作成を無効化] をクリックします。

    5. [ポリシーを管理] をクリックします。

    6. [ポリシーのソース] セクションで、[親のポリシーをオーバーライドする] が選択されていることを確認します。

    7. [適用] で、この組織のポリシー制約の適用をオフにします。

    8. [ポリシーを設定] をクリックします。

  • プロジェクトを適用から除外するには、次の操作を行います。

    1. 組織レベルでタグ管理者ロール(roles/resourcemanager.tagAdmin)と組織ポリシー管理者ロール(roles/orgpolicy.policyAdmin)があることを確認します。組織レベルでロールを付与する方法については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
    2. 組織レベルで、リソースを組織のポリシーから除外するかどうかを定義するために、タグキーとタグ値を作成します。キー disableServiceAccountKeyCreation と値 enforcednot_enforced を使用してタグを作成することをおすすめします。

      タグキーとタグ値の作成方法については、新しいタグの作成と定義をご覧ください。

    3. disableServiceAccountKeyCreation タグを組織に適用し、その値を enforced に設定します。組織内のすべてのリソースは、別のタグ値で上書きされない限り、このタグ値を継承します。

      リソースにタグを適用する方法については、リソースへのタグの適用をご覧ください。

    4. 組織のポリシーから除外するサービス アカウントごとに disableServiceAccountKeyCreation タグを付けて、その値を not_enforced に設定します。この方法でサービス アカウントにタグ値を設定すると、組織から継承されたタグ値がオーバーライドされます。
    5. 除外リソースに制約が適用されないように、サービス アカウント キーの作成を禁止する組織のポリシーを作成または更新します。このポリシーには、次のルールが必要です。

      • 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."
          }
        ]
      }
    ]
  }
}

サービス アカウントの作成エラーの推奨される解決策

組織のポリシーによりサービス アカウントを作成できない場合は、次の操作を行うことをおすすめします。

  1. サービス アカウントが必要かどうかを評価します。

    サービス アカウントを使用するタイミングを選択するで、ユースケースにサービス アカウントが必要であることを確認します。

  2. ユースケースにサービス アカウントが必要な場合は、プロジェクトの iam.disableServiceAccountCreation 制約を無効にします。

組織のポリシーの制約を無効にするには、制約の適用を無効にするか、プロジェクトを適用から除外します。

  • 組織全体で制約の適用を無効にするには、次の操作を行います。

    1. 組織レベルで組織のポリシー管理者ロール(roles/orgpolicy.policyAdmin)があることを確認します。このロールは組織でのみ付与でき、プロジェクトのロールリストには表示されません。

      組織レベルでロールを付与する方法については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

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

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

    3. プロジェクト セレクタで、iam.disableServiceAccountCreation 制約を無効にする組織を選択します。

    4. [フィルタ] フィールドに「iam.disableServiceAccountCreation」と入力します。次に、ポリシーリストで [サービス アカウントの作成を無効化] をクリックします。

    5. [ポリシーを管理] をクリックします。

    6. [ポリシーのソース] セクションで、[親のポリシーをオーバーライドする] が選択されていることを確認します。

    7. [適用] で、この組織のポリシー制約の適用をオフにします。

    8. [ポリシーを設定] をクリックします。

  • プロジェクトを適用から除外するには、次の操作を行います。

    1. 組織レベルでタグ管理者ロール(roles/resourcemanager.tagAdmin)と組織ポリシー管理者ロール(roles/orgpolicy.policyAdmin)があることを確認します。組織レベルでロールを付与する方法については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
    2. 組織レベルで、リソースを組織のポリシーから除外するかどうかを定義するために、タグキーとタグ値を作成します。キー disableServiceAccountCreation と値 enforcednot_enforced を使用してタグを作成することをおすすめします。

      タグキーとタグ値の作成方法については、新しいタグの作成と定義をご覧ください。

    3. disableServiceAccountCreation タグを組織に適用し、その値を enforced に設定します。組織内のすべてのリソースは、別のタグ値で上書きされない限り、このタグ値を継承します。

      リソースにタグを適用する方法については、リソースへのタグの適用をご覧ください。

    4. 組織のポリシーから除外するプロジェクトまたはフォルダごとに disableServiceAccountCreation タグを付けて、その値を not_enforced に設定します。この方法でプロジェクトまたはフォルダにタグ値を設定すると、組織から継承されたタグ値がオーバーライドされます。
    5. 除外リソースに制約が適用されないように、サービス アカウントの作成を禁止する組織のポリシーを作成または更新します。このポリシーには、次のルールが必要です。

      • 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 アカウントロール(roles/cloudbuild.builds.builder

詳細については、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 デフォルト ノード サービス アカウントのロール(roles/container.defaultNodeServiceAccount

詳細については、最小権限の IAM サービス アカウントを使用するをご覧ください。

Workflows Compute Engine のデフォルトのサービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com

デフォルトのサービス アカウントに必要なロールは、実行するタスクによって異なります。必要なロールを確認するには、実行するタスクのドキュメントを確認するか、事前定義ロールの選択をご覧ください。

ワークフローのドキュメントの Google Cloud リソースにアクセスするための権限をワークフローに付与するページで説明されているベスト プラクティスに沿って操作します。