排解服務帳戶的機構政策錯誤

機構政策服務有多項預先定義和代管限制,可能會影響貴機構的服務帳戶。本頁面說明組織政策會產生哪些錯誤,以及解決這些錯誤的步驟。

必要的角色

如要取得排解組織政策問題所需的權限,請要求管理員授予您組織的組織政策管理員 (roles/orgpolicy.policyAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

排解服務帳戶金鑰建立功能停用問題

如果貴機構強制執行 iam.disableServiceAccountKeyCreation 限制,您就無法為貴機構的任何服務帳戶建立金鑰。如要進一步瞭解這項限制,請參閱「停用服務帳戶金鑰建立功能」。

建立金鑰時發生錯誤

如果您嘗試建立服務帳戶金鑰,但該動作遭到 iam.disableServiceAccountKeyCreation 限制封鎖,系統會顯示以下錯誤訊息:

控制台

Cloud de Confiance 控制台隨即會顯示對話方塊,標題為「服務帳戶金鑰建立功能已停用」。對話方塊會指出機構已強制執行 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.s3ns.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.s3ns.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.s3ns.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.s3ns.iam.gserviceaccount.com",
            "description": "Key creation is not allowed on this service account."
          }
        ]
      }
    ]
  }
}

服務帳戶金鑰建立錯誤的建議解決方法

如果機構政策禁止您建立服務帳戶金鑰,建議您採取下列行動:

  1. 評估是否需要服務帳戶金鑰。

    我們不建議使用服務帳戶金鑰進行驗證。這是因為如果服務帳戶金鑰管理不當,就會帶來安全風險,增加您遭受憑證外洩、提權、資訊揭露和不可否認等威脅的風險。

    在大多數情況下,您應使用更安全的替代方案進行驗證,而非使用服務帳戶金鑰。

  2. 如果您的用途需要服務帳戶金鑰,請為專案停用 iam.disableServiceAccountKeyCreation 限制。

如要停用組織政策限制,請關閉限制的強制執行功能,或免除專案的強制執行:

  • 如要為整個機構關閉限制的強制執行功能,請按照下列步驟操作:

    1. 確認您在機構層級具備「機構政策管理員」角色 (roles/orgpolicy.policyAdmin)。這個角色只能在組織中授予,不會顯示在專案的角色清單中。

      如要瞭解如何在機構層級授予角色,請參閱「管理專案、資料夾和機構的存取權」。

    2. 前往 Cloud de Confiance 控制台的「Organization policies」(組織政策) 頁面。

      前往「Organization policies」(組織政策)

    3. 在專案選取器中,選取要停用 iam.disableServiceAccountKeyCreation 限制的機構。

    4. 在「Filter」(篩選條件) 欄位中輸入 iam.disableServiceAccountKeyCreation。 然後在政策清單中,按一下「停用服務帳戶金鑰建立功能」

    5. 按一下「Manage Policy」(管理政策)

    6. 在「政策來源」部分,確認已選取「覆寫上層政策」

    7. 在「強制執行」下方,關閉這項組織政策限制的強制執行功能。

    8. 按一下「設定政策」

  • 如要豁免專案,請按照下列步驟操作:

    1. 請確認您在機構層級具備標記管理員角色 (roles/resourcemanager.tagAdmin) 和機構政策管理員角色 (roles/orgpolicy.policyAdmin)。如要瞭解如何在機構層級授予角色,請參閱「管理專案、資料夾和機構的存取權」。
    2. 在機構層級建立標記鍵和標記值,用於定義資源是否應免除機構政策。建議您建立含有 disableServiceAccountKeyCreation 鍵和 enforcednot_enforced 值的標記。

      如要瞭解如何建立標記鍵和標記值,請參閱「建立及定義新標記」一文。

    3. disableServiceAccountKeyCreation 標記附加至機構,並將值設為 enforced。除非以其他標記值覆寫,否則機構中的所有資源都會繼承這個標記值。

      如要瞭解如何將標記附加至資源,請參閱「將標記附加至資源」。

    4. 如要為每個服務帳戶免除機構政策限制,請附加 disableServiceAccountKeyCreation 標記,並將值設為 not_enforced。以這種方式為服務帳戶設定標記值,會覆寫從機構繼承的標記值。
    5. 建立或更新組織政策,禁止建立服務帳戶金鑰,以免對豁免資源強制執行限制。這項政策應包含下列規則:

      • 設定 iam.disableServiceAccountKeyCreation 限制,確保系統不會對任何含有 disableServiceAccountKeyCreation: not_enforced 標記的資源強制執行限制。這項規則中的條件應如下所示:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
        
      • 設定 iam.disableServiceAccountKeyCreation 限制條件,以強制執行至所有其他資源。

排解停用服務帳戶建立功能的問題

如果貴機構強制執行 iam.disableServiceAccountCreation 限制,您就無法在貴機構的任何專案中建立服務帳戶。如要進一步瞭解這項限制,請參閱「停用服務帳戶建立功能」。

建立服務帳戶時發生錯誤

如果您嘗試建立服務帳戶,但該動作遭到 iam.disableServiceAccountCreation 限制封鎖,系統會顯示以下錯誤訊息:

控制台

在 Cloud de Confiance 控制台中,會顯示標題為「服務帳戶建立失敗」的對話方塊。對話方塊顯示「您要求執行的操作失敗,請再試一次」

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. 前往 Cloud de Confiance 控制台的「Organization policies」(組織政策) 頁面。

      前往「Organization policies」(組織政策)

    3. 在專案選取器中,選取要停用 iam.disableServiceAccountCreation 限制的機構。

    4. 在「Filter」(篩選條件) 欄位中輸入 iam.disableServiceAccountCreation。 然後在政策清單中,按一下「停用服務帳戶建立功能」

    5. 按一下「Manage Policy」(管理政策)

    6. 在「政策來源」部分,確認已選取「覆寫上層政策」

    7. 在「強制執行」下方,關閉這項組織政策限制的強制執行功能。

    8. 按一下「設定政策」

  • 如要豁免專案,請按照下列步驟操作:

    1. 請確認您在機構層級具備標記管理員角色 (roles/resourcemanager.tagAdmin) 和機構政策管理員角色 (roles/orgpolicy.policyAdmin)。如要瞭解如何在機構層級授予角色,請參閱「管理專案、資料夾和機構的存取權」。
    2. 在機構層級建立標記鍵和標記值,用於定義資源是否應免除機構政策。建議您建立含有 disableServiceAccountCreation 鍵和 enforcednot_enforced 值的標記。

      如要瞭解如何建立標記鍵和標記值,請參閱「建立及定義新標記」一文。

    3. disableServiceAccountCreation 標記附加至機構,並將值設為 enforced。除非以其他標記值覆寫,否則機構中的所有資源都會繼承這個標記值。

      如要瞭解如何將標記附加至資源,請參閱「將標記附加至資源」。

    4. 如要為專案或資料夾免除組織政策限制,請附加 disableServiceAccountCreation 標記,並將值設為 not_enforced。以這種方式為專案或資料夾設定標記值,會覆寫從機構沿用的標記值。
    5. 建立或更新機構政策,禁止建立服務帳戶,以免對豁免資源強制執行限制。這項政策應包含下列規則:

      • 設定 iam.disableServiceAccountCreation 限制,確保系統不會對任何含有 disableServiceAccountCreation: not_enforced 標記的資源強制執行限制。這項規則中的條件應如下所示:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')"
        
      • 設定 iam.disableServiceAccountCreation 限制條件,以強制執行至所有其他資源。

排解授予預設服務帳戶角色時發生的問題

使用特定 Cloud de Confiance 服務時,系統會在專案中自動建立預設的 Compute Engine 服務帳戶。這個服務帳戶的 ID 為 PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com

除非專案強制執行 iam.automaticIamGrantsForDefaultServiceAccounts 組織政策限制,否則系統會在建立所有預設服務帳戶時,自動授予編輯者角色 (roles/editor)。這項限制可防止系統自動將編輯者角色授予預設服務帳戶。

將基本角色授予服務帳戶時發生錯誤

如果專案強制執行 iam.automaticIamGrantsForDefaultServiceAccounts 限制,專案中採用預設服務帳戶的工作負載可能會發生權限不足錯誤。如要瞭解應將哪些角色授予預設服務帳戶,請參閱為預設服務帳戶授予角色的建議解決方案

iam.automaticIamGrantsForDefaultServiceAccounts 限制本身不會導致錯誤。不過,由於這項限制,使用預設服務帳戶的工作負載可能沒有必要的權限。

建議解決方法:將角色授予預設服務帳戶

如果組織政策禁止您將「編輯者」或「擁有者」角色授予預設服務帳戶,請為該服務帳戶授予權限較低的角色。服務帳戶所需角色取決於您使用的服務和要完成的工作。

請參閱下表,根據您使用的服務,決定要將哪個角色授予 Compute Engine 預設服務帳戶:

服務 預設服務帳戶 要授予的角色
Compute Engine Compute Engine 預設服務帳戶 (PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)

預設服務帳戶所需角色取決於您要完成的工作。如要瞭解所需角色,請參閱您想完成的工作的說明文件,或參閱「尋找合適的預先定義角色」。

決定要授予哪個角色時,請遵循 Compute Engine 說明文件「服務帳戶」頁面所述的最佳做法。

Cloud Build Compute Engine 預設服務帳戶 (PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com) Cloud Build 服務帳戶角色 (roles/cloudbuild.builds.builder)
Cloud Deploy Compute Engine 預設服務帳戶 (PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com) 如要瞭解應授予這個服務帳戶哪些角色,請找出符合您用途的 Cloud Deploy 快速入門導覽課程,然後授予該課程中說明的角色。如需 Cloud Deploy 快速入門導覽課程清單,請參閱 Cloud Deploy 說明文件中的「快速入門」。
Cloud Run functions 和 Cloud Functions Compute Engine 預設服務帳戶 (PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)

如要部署函式:Cloud Build 帳戶角色 (roles/cloudbuild.builds.builder)

詳情請參閱「使用 Cloud Build 的自訂服務帳戶」。

Cloud Run Compute Engine 預設服務帳戶 (PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)

預設服務帳戶所需角色取決於您要完成的工作。如要瞭解所需角色,請參閱您想完成的工作的說明文件,或參閱「尋找合適的預先定義角色」。

如要進一步瞭解 Cloud Run 角色,請參閱 Cloud Run 說明文件中的「使用 IAM 控管存取權」。

Google Kubernetes Engine Compute Engine 預設服務帳戶 (PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)

Kubernetes Engine 預設節點服務帳戶角色 (roles/container.defaultNodeServiceAccount)

詳情請參閱「使用最低權限的 IAM 服務帳戶」。

工作流程 Compute Engine 預設服務帳戶 (PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com)

預設服務帳戶所需角色取決於您要完成的工作。如要瞭解所需角色,請參閱您想完成的工作的說明文件,或參閱「尋找合適的預先定義角色」。

請按照 Workflows 說明文件「授予工作流程權限,以便存取 Cloud de Confiance 資源」頁面中說明的最佳做法操作。