為近期授權變更做好準備
Application Integration 即將更新授權整合的方式。這些變更即將生效。大多數整合功能會繼續運作,但部分整合功能需要變更設定才能繼續運作。本頁面說明的內容都使用您已控管的設定,因此您現在即可進行這些變更。
近期授權異動
Application Integration 即將更新整合執行作業的身分處理方式。現在,每個執行作業都必須有明確的身分,做為下列其中一項:
- 觸發執行的使用者。被呼叫的系統會套用該使用者的存取權限。
- 以服務帳戶身分執行。您可以像管理 Google Cloud 雲端專案中的任何其他服務帳戶一樣,控管、設定這個帳戶的範圍及稽核。
這項更新的影響如下:
- 如要執行整合,您必須具備以執行身分服務帳戶執行的權限。
- 如果沒有任何身分識別資訊,整合作業就會失敗。
事前準備
請依序完成下列工作。請先執行第一個動作,因為其他兩個動作都會以發布做為結尾,而發布本身會檢查權限。
- 對您已使用的每個「以服務帳戶身分執行」服務,授予「服務帳戶使用者」權限給所有執行、核准、編輯或發布整合的使用者,包括自動化程序使用的服務帳戶。
- 在無人執行且沒有服務帳戶的整合中,設定執行身分服務帳戶。
- 在每個類型為「服務帳戶」或「OIDC 權杖」的驗證設定檔中,將「服務帳戶使用者」授予所命名的服務帳戶。這些帳戶通常與執行身分服務帳戶不同。
需要以服務帳戶身分執行的整合功能
判斷整合是否需要
只有在整個執行期間都無法使用任何人的憑證時,才需要以服務帳戶身分執行。只有在以下兩種情況下,系統才會這麼做:
| 整合功能的執行方式 | 是否有人提供憑證? | 需要以服務帳戶身分執行嗎? |
|---|---|---|
| 同步:使用者啟動作業並等待結果 | 是,整個跑步過程都會錄製 | 否 |
| 非同步 - 系統會將作業加入佇列,稍後完成 | 僅在觸發時 | 是 |
| 無人值守:由時間表或事件啟動 | 否,不會有真人 | 是 |
找出受影響的整合項目
首先,這項功能是否會在沒有人在場時運作?如果符合下列任一條件,系統就會顯示:
- 具有 Cloud Scheduler、Cloud Pub/Sub、Salesforce 或 Integration 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:擁有服務帳戶的專案 IDPRINCIPAL:使用者的電子郵件地址
如為其他主體類型,請使用對應的 --member 前置字串:
- 群組:使用
group:。建議您使用 Google 群組,而非個別使用者帳戶,這樣在團隊成員異動時,就能簡化存取權管理作業。 - 服務帳戶:使用
serviceAccount:進行自動化程序和應用程式。
如要在 Google Cloud 控制台中執行相同操作,請按照下列步驟操作:
- 依序前往「IAM 與管理」>「服務帳戶」。
- 選取服務帳戶。
- 依序點選「權限」 >「授予存取權」。
詳情請參閱管理服務帳戶的存取權。
設定「以服務帳戶身分執行」
- 選擇或建立服務帳戶,並授予整合作業在所觸及資源上所需的角色。如要判斷要授予哪些角色,請查看專案的 Application Integration 服務代理人 (
service-PROJECT_NUMBER@gcp-sa-integrations.iam.gserviceaccount.com) 目前擁有的角色,然後只將這項整合服務使用的部分授予新帳戶。 - 將服務帳戶使用者權限授予所有執行、核准、編輯或發布整合功能的人員,包括任何自動化程序。
- 開啟整合功能,並在整合工具列的「Integration summary」(整合摘要) 窗格中設定服務帳戶。
- 發布整合項目。詳情請參閱「測試及發布整合」。
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.integrationViewer 或
roles/integrations.integrationInvoker |
| 執行整合 | roles/integrations.integrationInvoker 或
roles/integrations.integrationEditor |
| 建立及編輯整合 | roles/integrations.integrationEditor |
| 發布整合項目 | roles/integrations.integrationDeployer 或
roles/integrations.integrationEditor |
| 核准或繼續執行已暫停的執行程序 | roles/integrations.suspensionResolver 或
roles/integrations.integrationAdmin |
| 所有整合項目的完整存取權 | roles/integrations.integrationAdmin |
如要授予角色,請執行下列指令:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member='user:PRINCIPAL' \
--role='ROLE'
如要瞭解詳情,請參考下列資源:
- 預先定義的 IAM 角色,可查看完整的角色清單,以及每個角色包含的權限。
- 存取控管:瞭解 Application Integration 如何使用 IAM。
常見問題
我已授予角色,但仍無法存取。我錯過了什麼?
- 撥款用錯了項目。 您必須在服務帳戶所屬的專案中進行這項變更,該專案不一定是整合項目所屬的專案。
- 尚未生效。請稍候片刻。除了正常的 IAM 傳播延遲時間外,授權決策還會短暫快取。
- 涉及第二個服務帳戶。執行身分服務帳戶和每個驗證設定檔的服務帳戶是分開的,兩者都需要授權。
- 封鎖的是您自己的角色,而非服務帳戶。「服務帳戶使用者」是指您是否可以以執行身分服務帳戶的身分操作;您是否可以執行動作則由另一個 IAM 角色控管。請參閱「IAM 角色錯誤」。
為什麼「Integration Invoker」角色不再適用?
但您仍可執行整合作業。但從未允許您以整合服務帳戶的身分執行作業,而這項服務帳戶決定了執行作業的存取權量。下列角色均未授予 iam.serviceAccounts.actAs,因此一律為個別授予:
roles/integrations.integrationAdminroles/integrations.integrationEditorroles/integrations.integrationInvoker
我的整合項目只會同步執行。我需要以服務帳戶身分執行嗎?
否。同步執行作業已有身分:觸發作業的人。請參閱「判斷整合是否需要一個」。
控制台中沒有標記任何項目。我是否已安全無虞?
不一定。警告部分取決於觀察到的執行作業,因此如果整合項目不常排定時間,或最近無人觸發,可能需要採取行動,但不會顯示警告。請完成「需要以 Run-as 服務帳戶執行的整合」,而不是將安靜的控制台視為一切正常。
後續步驟
- 請參閱應用程式整合安全指南。
- 查看 Application Integration 的預先定義 IAM 角色。
- 瞭解如何設定驗證設定檔。
- 請參閱服務帳戶最佳做法。