本文說明如何透過 Workload Identity Federation,使用權杖向 Google Cloud驗證身分。透過 Workload Identity Federation,您可以授予地端部署或多雲端 SAP 工作負載存取 Google Cloud資源的權限,不必使用服務帳戶金鑰。
Workload Identity 聯盟遵循 OAuth 2.0 權杖交換規格。您將 IdP 的憑證提供給安全權杖服務,該服務會驗證憑證上的身分,然後傳回同盟存取權杖做為交換。您可以直接搭配支援的服務使用這個同盟存取權杖,也可以使用這個權杖模擬服務帳戶,並取得短期存取權杖。 您可以使用短期存取權杖,呼叫服務帳戶有權存取的任何 Google Cloud API。
您可以搭配中繼資料伺服器或外部身分識別提供者 (IdP),使用 Workload Identity 聯盟。
搭配 VM 中繼資料的 Workload Identity 聯盟
如果您的 SAP 系統託管於 Google Cloud ,但由 SAP 管理,則可以使用 Workload Identity Federation,從 SAP 系統安全地存取其他Google Cloud 專案中的資源。透過 Workload Identity 聯盟,您的 SAP 系統可以使用 VM 中繼資料向其他 Google Cloud 專案進行驗證。這樣一來,您就不必管理服務帳戶金鑰,可提升安全性並簡化驗證程序。
高階設定步驟如下:
- 在 Google Cloud中設定 Workload Identity 聯盟。
- 在 Google Cloud中建立服務帳戶。
- 在 Google Cloud中,授予服務帳戶 Workload Identity 聯盟集區的存取權。
- 在 ABAP SDK for Google Cloud 中,設定用戶端金鑰。
設定 Workload Identity 聯盟
如要取得設定 Workload Identity 聯盟所需的權限,請要求管理員授予您專案的下列 IAM 角色:
如要進一步瞭解如何授予角色,請參閱「管理存取權」。
如要設定 Workload Identity 聯盟,請執行下列步驟:
前往 Google Cloud 控制台的「New workload provider and pool」(新增工作負載供應商和集區) 頁面。
在「建立身分集區」部分,為下列欄位輸入值:
- 名稱:集區名稱。這個名稱也會用來做為集區 ID。 集區 ID 設定後即無法變更。
- 說明:說明集區用途的文字。
按一下「繼續」。
在「將提供者新增至集區」下方,將中繼資料伺服器新增為提供者:
- 在「選取提供者」欄位中,選取「OpenID Connect (OIDC)」。
輸入下列供應商詳細資料:
- 供應商名稱:輸入供應商名稱。
- 簽發者(網址):輸入中繼資料伺服器權杖網址
https://accounts.google.com
。 - 目標對象:選取「允許的目標對象」,然後輸入要存取 Google Cloud 專案的 Google Cloud 專案編號。如要瞭解如何取得專案編號,請參閱「收集 Google 中繼資料伺服器執行個體的詳細資料」。
按一下「繼續」。
在「設定提供者屬性」下方,執行下列操作:
- 在「Google 1」欄位中,確認值為
google.subject
。 - 在「OIDC 1」欄位中輸入
assertion.sub
。
- 在「Google 1」欄位中,確認值為
按一下 [儲存]。
請注意下列事項:
- 集區 ID
- 供應商 ID
設定用戶端金鑰時,需要用到這些 ID。
收集 Google 中繼資料伺服器執行個體的詳細資料
如要取得設定 Workload Identity Federation 時所需的 Google 中繼資料伺服器執行個體詳細資料,請完成下列步驟:
-
在 SAP GUI 中執行交易代碼
/GOOG/SDK_IMG
。或者,執行交易代碼
SPRO
,然後按一下「SAP Reference IMG」。 - 依序點選「ABAP SDK for Google Cloud」>「Utilities」>「Get specific metadata values for Google Metadata Server Instance」。
- 視情況選取下列選項:
- 專案 ID (數值)
- 預設服務帳戶電子郵件地址
- 按一下「執行」即可查看詳細資料。
- 請記下詳細資料。在 Google Cloud 控制台中設定工作負載身分聯盟時,需要用到這些值。
建立服務帳戶
在 Google Cloud 控制台中,建立 IAM 服務帳戶。這個服務帳戶必須是 Google Cloud 專案中的主體,該專案包含您打算使用 SDK 執行的Google Cloud API。
在 Google Cloud 控制台中,選取要建立服務帳戶的專案。
如果您在包含 Google Cloud API 的專案中建立服務帳戶,系統會自動將該服務帳戶新增為專案主體。
如果您在啟用Google Cloud API 的專案以外的專案中建立服務帳戶,則需要額外步驟,將服務帳戶新增至該專案。詳情請參閱「將服務帳戶加進 Google Cloud 專案」。
建立服務帳戶,以驗證及授權存取 Google Cloud API。
如要瞭解如何建立服務帳戶,請參閱「建立服務帳戶」。
在 Google Cloud 控制台中,授予服務帳戶存取 API 功能所需的 IAM 角色。如要瞭解 Google Cloud API 的角色需求,請參閱個別 API 說明文件,並遵循最低權限原則。如要進一步瞭解 API 專用的預先定義角色,請參閱 IAM 基本和預先定義角色參考資料。
如果您在其他專案中建立服務帳戶,而不是在包含您打算使用 SDK 執行的 Google Cloud API 的專案中建立,請記下服務帳戶名稱。將服務帳戶新增至專案時,您會指定名稱。
將服務帳戶新增至 Google Cloud 專案
如果您在專案中建立 ABAP SDK for Google Cloud 的服務帳戶,但該專案不包含您打算使用 SDK 執行的 Google Cloud API,則必須將服務帳戶新增至包含 Google Cloud API 的 Google Cloud 專案。
如果您在包含Google Cloud API 的專案中建立服務帳戶,可以略過這個步驟。
如要將現有服務帳戶新增至包含 Google Cloud API 的 Google Cloud 專案,請按照下列步驟操作:
前往 Google Cloud 控制台的「IAM Permissions」(IAM 權限) 頁面。
確認頁面頂端附近顯示的專案名稱,是否為包含目標Google Cloud API 的專案。例如:
專案「
PROJECT_NAME
」的權限如果不是,請切換專案。
在 IAM「Permissions」(權限) 頁面中,按一下
「Grant access」(授予存取權)。在隨即顯示的「Grant access to '
PROJECT_NAME
'」(授予「PROJECT_NAME
」的存取權) 對話方塊中,執行下列步驟:- 在「新增主體」欄位中,指定服務帳戶名稱。
在「Select a role」(請選擇角色) 欄位中,指定相關角色。 舉例來說,如要修改 Pub/Sub 的主題和訂閱項目,以及發布和調用訊息,可以指定 Pub/Sub 編輯者角色 (
roles/pubsub.editor
)。如要進一步瞭解 API 專用的預先定義角色,請參閱 IAM 基本和預先定義角色參考資料。
視 API 用途新增其他角色。 建議您實作最低權限原則。
按一下 [儲存]。服務帳戶會顯示在「IAM」IAM頁面的專案主體清單中。
現在可以使用服務帳戶存取這個專案中的 Google Cloud API。
授予服務帳戶 Workload Identity Federation 集區的存取權
如要模擬聯合工作負載的服務帳戶,請在服務帳戶上授予工作負載身分使用者 (roles/iam.workloadIdentityUser
) 權限。如要進一步瞭解如何授予角色,請參閱「管理存取權」。
如要授予服務帳戶 Workload Identity Federation 集區的存取權,請執行下列操作:
前往 Google Cloud 控制台的「Workload Identity Pools」(工作負載身分集區) 頁面。
如要授予工作負載身分集區的存取權,請按一下
「授予存取權」。在「服務帳戶」清單中,選取有權存取 Google Cloud API 的服務帳戶。如果您使用多個服務帳戶,請在這裡全部新增。
在「Attribute name」(屬性名稱) 欄位中,選取「Subject」(主旨)。
在「屬性值」欄位中,輸入從中繼資料伺服器擷取的服務帳戶電子郵件地址,並加上雙引號。 例如:
"svc-acct-compute@example-project-123456.iam.gserviceaccount.com"
。如要瞭解如何從中繼資料伺服器擷取服務帳戶電子郵件地址,請參閱「收集 Google 中繼資料伺服器執行個體的詳細資料」。
在隨即顯示的「設定應用程式」對話方塊中,按一下「關閉」。
設定用戶端金鑰
-
在 SAP GUI 中執行交易代碼
/GOOG/SDK_IMG
。或者,執行交易代碼
SPRO
,然後按一下「SAP Reference IMG」。 - 依序點選「ABAP SDK for Google Cloud」「Basic Settings」「Configure Client Key」。
- 按一下「New Entries」。
在下列欄位中輸入值:
欄位 說明 Google Cloud 金鑰名稱 指定用戶端金鑰設定的名稱。 Google Cloud 服務帳戶名稱 以電子郵件地址格式指定服務帳戶名稱,該帳戶是在「建立服務帳戶」步驟中建立,用於存取 Google Cloud API。例如: sap-example-svc-acct@example-project-123456.iam.gserviceaccount.com
。Google Cloud 範圍 指定 API 存取範圍 https://www.googleapis.com/auth/cloud-platform
。Google Cloud 專案 ID 指定您建立 workload identity pool 的 Google Cloud 專案 ID。 指令名稱 請將這個欄位留空。 授權類別 視需要指定驗證類別: /GOOG/CL_AUTH_WIF_META_ACCESS
:產生 Google 簽署的 OAuth 權杖。/GOOG/CL_AUTH_WIF_META_IDTOKEN
:產生 Google 簽署的 ID 符記。
權杖快取 這個旗標會決定是否要快取從 Google Cloud 擷取的存取權杖。
建議您在完成設定並測試與 Google Cloud的連線後,再啟用權杖快取。
權杖更新秒數 請將這個欄位留空。 授權參數 1 指定工作負載身分集區 ID。 授權參數 2 指定工作負載身分識別提供者 ID。 儲存項目。
搭配外部 IdP 使用 Workload Identity 聯盟
您可以搭配外部 IdP (例如 Amazon Web Services (AWS)) 使用 Workload Identity Federation,也可以搭配支援 OpenID Connect (OIDC) 的任何識別資訊提供者 (IdP),例如 Microsoft Azure 或 SAML 2.0。
如要透過 Workload Identity 聯盟使用權杖進行驗證, 請按照下列高階設定步驟操作:
- 準備外部 IdP。
- 在 Google Cloud中設定 Workload Identity 聯盟。
- 在 Google Cloud中建立服務帳戶。
- 在 Google Cloud中,允許外部工作負載模擬服務帳戶。
- 在 ABAP SDK for Google Cloud 中,實作 ABAP 程式碼,從 IdP 擷取安全權杖。
- 在 ABAP SDK for Google Cloud 中,設定用戶端金鑰。
並非所有 Google Cloud 產品都支援 Workload Identity 聯盟。 使用 Workload Identity 聯盟設定驗證機制前,請先詳閱支援的產品和限制清單。詳情請參閱「員工身分聯盟:支援的產品和限制」。
準備外部 IdP
您必須準備 IdP,讓 SAP 工作負載取得可交換為 Google OAuth 2.0 安全性權杖的憑證。
如要準備外部 IdP,請根據您的 IdP 執行下列步驟:
設定 Workload Identity 聯盟
在 Google Cloud中,設定 workload identity pool 和提供者。
您要設定身分集區,這個實體可讓您管理外部身分。您也可以設定 workload identity pool 提供者,這個實體會說明 Google Cloud和 IdP 之間的關係。
如要設定 Workload Identity Federation,請視外部 IdP 執行下列步驟:
- 如果您使用 AWS 或 Azure 做為 IdP,請按照操作說明建立工作負載身分集區和提供者。
- 如果您使用其他 IdP,請按照說明建立 workload identity pool 和提供者。
請注意下列事項:
- 專案編號:您建立工作負載身分集區的 Google Cloud 專案專案編號。
- 集區 ID:用於識別 workload identity pool 的專屬 ID。
- 提供者 ID:用於識別 workload identity pool 提供者的 ID。
您需要這些金鑰來設定 ABAP SDK 用戶端金鑰。
建立服務帳戶
在 Google Cloud 控制台中,建立專屬的 IAM 服務帳戶,以存取 Google Cloud API。這個服務帳戶必須是 Google Cloud 專案中的主體,該專案包含您打算使用 SDK 執行的Google Cloud API。
在 Google Cloud 控制台中,啟用 IAM Service Account Credentials API、Security Token Service API,以及您打算使用 SDK 存取的任何其他支援的 API。
如要瞭解如何啟用 API,請參閱「啟用 API」。 Google Cloud
建立服務帳戶,代表工作負載。
授予服務帳戶必要的 IAM 角色,才能存取 API 功能。如要瞭解 Google Cloud API 的角色需求,請參閱個別 API 說明文件,並遵循最低權限原則。如要進一步瞭解 API 專用的預先定義角色,請參閱「尋找 API 適用的 IAM 角色 Google Cloud 」。
允許外部工作負載模擬服務帳戶
如要允許外部工作負載模擬服務帳戶,請根據外部 IdP 執行下列步驟:
- 如果您使用 AWS 或 Azure 做為 IdP,請按照操作說明允許外部工作負載模擬服務帳戶。
- 如果您使用其他 IdP,請按照操作說明允許外部工作負載模擬服務帳戶。
導入 ABAP 程式碼,從 IdP 擷取安全權杖
Google Cloud 的 ABAP SDK 提供抽象類別 /GOOG/CL_AUTH_WIF_BASE
,其中包含從 Security Token Service 擷取 OAuth 2.0 安全性權杖,以及從 IAM Service Account Credentials API 擷取 OAuth 2.0 存取權杖的邏輯。開發人員需要在命名空間中建立子項類別,並從抽象類別 /GOOG/CL_AUTH_WIF_BASE
繼承。
如要透過 Workload Identity Federation,從 ABAP SDK for Google Cloud 叫用 Cloud Run 函式,SDK 會提供另一個抽象類別 /GOOG/CL_AUTH_WIF_ID_TOKEN
。如果您使用 Workload Identity Federation 設定驗證,則需要在命名空間中建立另一個子類別,並從抽象類別 /GOOG/CL_AUTH_WIF_ID_TOKEN
繼承。設定用戶端金鑰來叫用 Cloud Run 函式時,您會在「授權類別」欄位中指定這個子類別。
請務必在子類別中實作方法 GET_EXT_IDP_TOKEN
,並編寫邏輯,從 IdP 取得安全權杖。填入下列欄位:
CV_TOKEN
:以string
格式從 IdP 擷取的權杖。CV_TOKEN_TYPE
:從 IdP 擷取的安全性權杖類型。 支援的權杖類型如下:urn:ietf:params:oauth:token-type:jwt
urn:ietf:params:oauth:token-type:id_token
urn:ietf:params:aws:token-type:aws4_request
urn:ietf:params:oauth:token-type:access_token
urn:ietf:params:oauth:token-type:saml2
抽象類別 /GOOG/CL_AUTH_WIF_BASE
的方法會使用 CV_TOKEN
和 CV_TOKEN_TYPE
中填入的值,交換及擷取最終的 OAuth 2.0 權杖,用於 API 呼叫。
以下範例顯示其他雲端供應商 (如 AWS 和 Azure) 的 GET_EXT_IDP_TOKEN
方法範例實作。
AWS
Azure
設定用戶端金鑰
-
在 SAP GUI 中執行交易代碼
/GOOG/SDK_IMG
。或者,執行交易代碼
SPRO
,然後按一下「SAP Reference IMG」。 - 依序點選「ABAP SDK for Google Cloud」「Basic Settings」「Configure Client Key」。
- 按一下「New Entries」。
在下列欄位中輸入值:
欄位 說明 Google Cloud 金鑰名稱 指定用戶端金鑰設定的名稱。 Google Cloud 服務帳戶名稱 以電子郵件地址格式指定服務帳戶名稱,該帳戶是在「建立服務帳戶」步驟中建立,用於存取 Google Cloud API。例如: sap-example-svc-acct@example-project-123456.iam.gserviceaccount.com
。Google Cloud 範圍 指定 API 存取範圍 https://www.googleapis.com/auth/cloud-platform
。Google Cloud 專案 ID 指定您建立 workload identity pool 的 Google Cloud 專案 ID。 指令名稱 請將這個欄位留空。 授權類別 指定子類別,其中包含類別 /GOOG/CL_AUTH_WIF_BASE
的實作項目。詳情請參閱「導入 ABAP 程式碼,從 IdP 擷取安全權杖」。權杖快取 這個旗標會決定是否要快取從 Google Cloud 擷取的存取權杖。
建議您在完成設定並測試與 Google Cloud的連線後,再啟用權杖快取。
權杖更新秒數 請將這個欄位留空。 授權參數 1 指定工作負載身分集區 ID。 授權參數 2 指定工作負載身分識別提供者 ID。 儲存項目。
驗證驗證設定
如要驗證驗證設定是否就緒,請按照下列步驟操作:
在 SAP GUI 中執行交易代碼
/GOOG/SDK_IMG
。或者,執行交易代碼
SPRO
,然後按一下「SAP Reference IMG」。依序點選「ABAP SDK for Google Cloud」>「Utilities」>「Validate Authentication Configuration」。
輸入用戶端金鑰名稱。
按一下 [Execute] (執行)。
「結果」欄中的綠色勾號表示所有設定步驟都已順利完成。
取得支援
如需協助解決 ABAP SDK for Google Cloud 的問題,請按照下列步驟操作:
在 Cloud 論壇上向社群提問,並討論 ABAP SDK for Google Cloud。
收集所有可用的診斷資訊,然後與 Cloud Customer Care 團隊聯絡。如要瞭解如何與 Customer Care 聯絡,請參閱「取得 SAP on Google Cloud支援服務」。