為近期授權變更做好準備

Application Integration 即將更新授權整合的方式。這些變更即將生效。大多數整合功能會繼續運作,但部分整合功能需要變更設定才能繼續運作。本頁面說明的內容都使用您已控管的設定,因此您現在即可進行這些變更。

近期授權異動

Application Integration 即將更新整合執行作業的身分處理方式。現在,每個執行作業都必須有明確的身分,做為下列其中一項:

  • 觸發執行的使用者。被呼叫的系統會套用該使用者的存取權限。
  • 以服務帳戶身分執行。您可以像管理 Google Cloud 雲端專案中的任何其他服務帳戶一樣,控管、設定這個帳戶的範圍及稽核。

這項更新的影響如下:

  • 如要執行整合,您必須具備以執行身分服務帳戶執行的權限。
  • 如果沒有任何身分識別資訊,整合作業就會失敗。

事前準備

請依序完成下列工作。請先執行第一個動作,因為其他兩個動作都會以發布做為結尾,而發布本身會檢查權限。

  1. 對您已使用的每個「以服務帳戶身分執行」服務,授予「服務帳戶使用者」權限給所有執行、核准、編輯或發布整合的使用者,包括自動化程序使用的服務帳戶。
  2. 無人執行且沒有服務帳戶的整合中,設定執行身分服務帳戶
  3. 在每個類型為「服務帳戶」或「OIDC 權杖」驗證設定檔中,將「服務帳戶使用者」授予所命名的服務帳戶。這些帳戶通常與執行身分服務帳戶不同。

需要以服務帳戶身分執行的整合功能

判斷整合是否需要

只有在整個執行期間都無法使用任何人的憑證時,才需要以服務帳戶身分執行。只有在以下兩種情況下,系統才會這麼做:

整合功能的執行方式 是否有人提供憑證? 需要以服務帳戶身分執行嗎?
同步:使用者啟動作業並等待結果 是,整個跑步過程都會錄製
非同步 - 系統會將作業加入佇列,稍後完成 僅在觸發時
無人值守:由時間表或事件啟動 否,不會有真人

找出受影響的整合項目

首先,這項功能是否會在沒有人在場時運作?如果符合下列任一條件,系統就會顯示:

  • 具有 Cloud SchedulerCloud Pub/SubSalesforceIntegration Connectors 事件觸發條件。
  • 有人透過 API 使用 scheduleIntegrations 排定時間。
  • 另一個整合會使用「呼叫整合」工作,以非同步子整合的形式呼叫這個整合。
  • 這項功能會使用「暫停」或「核准」工作,讓執行作業處於等待狀態,然後自行到期。

第二,執行身分服務帳戶是否為空白?如要列出區域中的每個已發布版本,以及其執行身分服務帳戶,請執行下列指令:

curl -s -G -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  --data-urlencode "filter=state=ACTIVE" \
  --data-urlencode "pageSize=1000" \
  "https://REGION-integrations.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/integrations/-/versions" \
| jq -r '.integrationVersions[]
         | [ .name, (.runAsServiceAccount // "NONE") ]
         | @tsv'

更改下列內容:

  • REGION:整合的區域。如需支援的地區清單,請參閱「位置」。
  • PROJECT_ID:Google Cloud 雲端專案的 ID
  • 如果第一部分也適用於該列,則顯示 NONE 的資料列才需要採取行動。
  • 如要檢查單一整合服務,請在 Google Cloud 控制台中開啟該服務,並查看整合服務工具列中的「整合服務摘要」窗格。

更新整合項目

授予服務帳戶使用者角色

如要將角色授予使用者,請執行下列指令:

gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT \
    --project=SERVICE_ACCOUNT_PROJECT_ID \
    --member='user:PRINCIPAL' \
    --role='roles/iam.serviceAccountUser'

更改下列內容:

  • SERVICE_ACCOUNT:以執行身分服務帳戶的電子郵件地址,或驗證設定檔中具名的帳戶
  • SERVICE_ACCOUNT_PROJECT_ID擁有服務帳戶的專案 ID
  • PRINCIPAL:使用者的電子郵件地址

如為其他主體類型,請使用對應的 --member 前置字串:

  • 群組:使用 group:。建議您使用 Google 群組,而非個別使用者帳戶,這樣在團隊成員異動時,就能簡化存取權管理作業。
  • 服務帳戶:使用 serviceAccount: 進行自動化程序和應用程式。

如要在 Google Cloud 控制台中執行相同操作,請按照下列步驟操作:

  1. 依序前往「IAM 與管理」>「服務帳戶」
  2. 選取服務帳戶。
  3. 依序點選「權限」 >「授予存取權」

詳情請參閱管理服務帳戶的存取權

設定「以服務帳戶身分執行」

  1. 選擇或建立服務帳戶,並授予整合作業在所觸及資源上所需的角色。如要判斷要授予哪些角色,請查看專案的 Application Integration 服務代理人 (service-PROJECT_NUMBER@gcp-sa-integrations.iam.gserviceaccount.com) 目前擁有的角色,然後只將這項整合服務使用的部分授予新帳戶。
  2. 將服務帳戶使用者權限授予所有執行、核准、編輯或發布整合功能的人員,包括任何自動化程序。
  3. 開啟整合功能,並在整合工具列的「Integration summary」(整合摘要) 窗格中設定服務帳戶。
  4. 發布整合項目。詳情請參閱「測試及發布整合」。

Google Cloud 建議為每個整合項目使用專用的服務帳戶,並授予最低必要權限,而不是在所有整合項目之間共用權限廣泛的帳戶,因為這樣做有下列好處:

  • 包含任何一項整合的效果。
  • 稽核記錄中會顯示名稱。

詳情請參閱「使用服務帳戶的最佳做法」。

排解缺少權限的問題

遭拒絕的動作有兩種原因,值得區分:

  • 執行身分服務帳戶:您無法以該帳戶身分執行操作,或該帳戶無法存取工作所需的資源。
  • 您自己的 IAM 角色:您完全無法執行這項操作。

這兩項檢查都會套用,因此修正其中一項問題並不會解決另一項問題。

以服務帳戶身分執行時發生錯誤

情境 頁面上會顯示的資訊 建議行動
有人觸發整合項目,但無法以其「以服務帳戶身分執行」 觸發條件遭到拒絕,並顯示 PERMISSION_DENIED。這項檢查會在執行作業排入佇列前執行,因此執行記錄中不會顯示任何內容,看起來就像什麼都沒發生,而不是工作失敗 將服務帳戶使用者角色授予觸發該角色的人員
沒有使用者憑證的執行作業沒有「以服務帳戶身分執行」的服務帳戶 連接器、呼叫 REST 端點和 Cloud Run 函式工作會連線失敗,發布時: The integration is missing run-as service account since governance is enabled for your project. 設定以服務帳戶身分執行
工作使用的驗證設定檔,其服務帳戶是呼叫端無法代為執行的動作 該工作遭到拒絕,但其餘執行作業會繼續進行: You do not have permission to use Auth Config ID because you cannot act as its service account: SERVICE_ACCOUNT. 在設定檔中命名的帳戶上授予服務帳戶使用者
核准者無法擔任「以服務帳戶身分執行」的角色 核准程序會無聲無息地失敗,不會產生可見的錯誤。執行作業會暫停,直到過期為止,因此您會發現核准作業似乎已停止運作 授予服務帳戶使用者給所有可能核准的人員
有人未經授權編輯或發布整合服務 Publisher does not have required permission to publish integration with service account: SERVICE_ACCOUNT. 任何已發布的內容都會繼續放送。如果系統自動發布,則會顯示在部署管道中,而非控制台 將服務帳戶使用者權限授予編輯者、發布者和自動化程序
工作會以觸發者的身分執行,而該使用者無法存取資源 執行作業一開始正常,但隨後有一項工作失敗,並命名資源,即使整合功能沒有任何變更也一樣 授予這些人資源存取權,或將整合項目移至已具備存取權的「以服務帳戶身分執行」帳戶 (通常是較好的做法,因為這樣一來,整合項目的存取權就不會因執行者而異)

如需 Application Integration 錯誤代碼的完整清單,請參閱「錯誤代碼」。

IAM 角色錯誤

除了以服務帳戶身分執行外,Application Integration 還會驗證每個動作的使用者 IAM 權限。與整合項目互動時,如果遇到 PERMISSION_DENIED 錯誤,或是執行記錄無法載入,請確認您具備授予必要權限的角色:

如要這麼做, 您需要具備下列任一角色
查看及開啟整合功能 roles/integrations.integrationViewer
查看執行記錄和詳細資料 roles/integrations.integrationViewerroles/integrations.integrationInvoker
執行整合 roles/integrations.integrationInvokerroles/integrations.integrationEditor
建立及編輯整合 roles/integrations.integrationEditor
發布整合項目 roles/integrations.integrationDeployerroles/integrations.integrationEditor
核准或繼續執行已暫停的執行程序 roles/integrations.suspensionResolverroles/integrations.integrationAdmin
所有整合項目的完整存取權 roles/integrations.integrationAdmin

如要授予角色,請執行下列指令:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='user:PRINCIPAL' \
    --role='ROLE'

如要瞭解詳情,請參考下列資源:

常見問題

我已授予角色,但仍無法存取。我錯過了什麼?

  • 撥款用錯了項目。 您必須在服務帳戶所屬的專案中進行這項變更,該專案不一定是整合項目所屬的專案。
  • 尚未生效。請稍候片刻。除了正常的 IAM 傳播延遲時間外,授權決策還會短暫快取。
  • 涉及第二個服務帳戶。執行身分服務帳戶和每個驗證設定檔的服務帳戶是分開的,兩者都需要授權。
  • 封鎖的是您自己的角色,而非服務帳戶。「服務帳戶使用者」是指您是否可以執行身分服務帳戶的身分操作;您是否可以執行動作則由另一個 IAM 角色控管。請參閱「IAM 角色錯誤」。

為什麼「Integration Invoker」角色不再適用?

但您仍可執行整合作業。但從未允許您以整合服務帳戶的身分執行作業,而這項服務帳戶決定了執行作業的存取權量。下列角色均未授予 iam.serviceAccounts.actAs,因此一律為個別授予:

  • roles/integrations.integrationAdmin
  • roles/integrations.integrationEditor
  • roles/integrations.integrationInvoker

我的整合項目只會同步執行。我需要以服務帳戶身分執行嗎?

否。同步執行作業已有身分:觸發作業的人。請參閱「判斷整合是否需要一個」。

控制台中沒有標記任何項目。我是否已安全無虞?

不一定。警告部分取決於觀察到的執行作業,因此如果整合項目不常排定時間,或最近無人觸發,可能需要採取行動,但不會顯示警告。請完成「需要以 Run-as 服務帳戶執行的整合」,而不是將安靜的控制台視為一切正常。

後續步驟