为 SAP BTP 版本的 ABAP SDK for Google Cloud 设置身份验证

本文档介绍了如何从 SAP BTP 版本的 ABAP SDK for Google Cloud 向 Google Cloud 进行身份验证。

使用 SAP BTP 版本的 ABAP SDK for Google Cloud 开发的应用需要进行身份验证才能连接到 Google Cloud API。

对于访问 Google Cloud API 的身份验证和授权,SDK 主要使用令牌。此外,SDK 还支持使用 API 密钥向使用 API 密钥的 Google Cloud API 进行身份验证。只有少数 Google Cloud API 使用 API 密钥进行身份验证。例如 Google Maps Platform。查看您要使用的服务或 API 的身份验证文档,以确定它是否支持 API 密钥。

根据您需要访问的 Google Cloud API,您可以选择适当的身份验证方法。以下列表总结了 SDK 支持的不同身份验证方法:

通过工作负载身份联合使用令牌进行身份验证

工作负载身份联合遵循 OAuth 2.0 令牌交换规范。您可以将身份提供方 (IdP) 的凭据提供给 Security Token Service,该服务会验证凭据的身份,然后通过交换返回联合令牌。您可以使用此令牌模拟服务账号并获取短期有效的 OAuth 2.0 访问令牌。短期有效的访问令牌可让您调用服务账号有权访问的任何 Google Cloud API。

对于通过工作负载身份联合使用令牌进行身份验证,请启用以下 Google Cloud API:

如需了解如何启用 Google Cloud API,请参阅启用 API

对于通过工作负载身份联合使用令牌进行身份验证,简要配置步骤如下:

  1. 在 SAP BTP 中,创建授权和信任 (XSUAA) 服务实例
  2. 在 Google Cloud 中,创建服务账号
  3. 在 Google Cloud 中,配置工作负载身份联合
  4. 在 SAP BTP 中,将 ABAP SDK for Google Cloud 配置为使用工作负载身份联合

创建授权和信任 (XSUAA) 服务实例

如需向后端应用提供必要的服务,请执行以下步骤以创建授权和信任 (XSUAA) 服务实例

  1. 登录 SAP BTP Cockpit。如需了解详情,请参阅 SAP 页面访问 Cockpit
  2. 选择您的子账号。
  3. 创建 XSUAA 服务实例:

    1. 前往 Services > Service Marketplace
    2. 搜索并选择 Authorization & Trust Management Service (XSUAA)
    3. 点击创建
    4. 在显示的 New Instance or Subscription 对话框中,输入以下字段的值:

      • Plan:选择 Application
      • Runtime environment:选择 Cloud Foundry
      • Space:选择空间名称。
      • Instance name:输入 XSUAA 服务实例的名称。
    5. 点击创建

  4. 创建服务密钥:

    1. 前往 Instances and Subscription > Instances
    2. 选择您在上一步中创建的 XSUAA 服务实例,然后点击 Service keys 标签页。
    3. 点击创建
    4. 输入服务密钥名称,然后点击 Create
    5. 对于新创建的服务密钥,点击 Actions () 菜单,然后选择 View
    6. 在服务密钥凭据中,记下以下各项:

      • url
      • clientid
      • clientsecret

    配置向 Google Cloud 进行的身份验证时,您需要使用这些服务密钥凭据。

创建服务账号

在 Google Cloud 控制台中,创建 IAM 服务账号。此服务账号必须是包含您计划通过 SDK 使用的 Google Cloud API 的 Google Cloud 项目中的主账号。

  1. 在 Google Cloud 控制台中,选择您要在其中创建服务账号的项目。

    • 如果您在包含 Google Cloud API 的同一项目中创建服务账号,则服务账号会自动作为主账号添加到该项目。

    • 如果您在除启用了 Google Cloud API 的项目以外的项目中创建服务账号,则需要在额外步骤中将服务账号添加到该项目。如需了解详情,请参阅将服务账号添加到 Google Cloud 项目

  2. 创建一个服务账号以进行身份验证和授权来访问 Google Cloud API。

    转到“服务账号”

    如需了解如何创建服务账号,请参阅创建服务账号

  3. 在 Google Cloud 控制台中,向服务账号授予访问 API 功能所需的 IAM 角色。如需了解 Google Cloud API 的角色要求,请参阅各个 API 文档并遵循最小权限原则。如需详细了解 API 特定预定义角色,请参阅 IAM 基本角色和预定义角色参考文档

  4. 如果您在不同于计划通过 SDK 使用的 Google Cloud API 的项目中创建服务账号,请记下服务账号的名称。 您可以在将服务账号添加到该项目时指定该名称。

将服务账号添加到 Google Cloud 项目

如果您在与计划通过 SDK 使用的 Google Cloud API 的项目不同的项目中为 ABAP SDK for Google Cloud 创建了服务账号,则需要将服务账号添加到包含 Google Cloud API 的 Google Cloud 项目。

如果您在包含 Google Cloud API 的同一项目中创建了服务账号,则可以跳过此步骤。

如需将现有服务账号添加到包含 Google Cloud API 的 Google Cloud 项目,请执行以下步骤:

  1. 在 Google Cloud 控制台中,进入 IAM 权限页面。

    打开 IAM 权限

  2. 确认页面顶部附近显示了包含目标 Google Cloud API 的项目的名称。例如:

    项目“PROJECT_NAME”的权限

    如果未显示,请切换项目。

  3. 在 IAM 权限页面上,点击 授予访问权限

  4. 在显示的授予对“PROJECT_NAME”的访问权限对话框中,执行以下步骤:

    1. 新的主账号字段中,指定服务账号的名称。
    2. 选择角色字段中,指定相关角色。 例如,对于 Pub/Sub,如需修改主题和订阅以及发布和使用消息的权限,您可以指定 Pub/Sub Editor 角色 (roles/pubsub.editor)。

      如需详细了解 API 特定预定义角色,请参阅 IAM 基本角色和预定义角色参考文档

    3. 根据 API 使用要求添加其他角色。 我们建议实施最小权限原则。

    4. 点击保存。该服务账号会显示在 IAM 页面上的项目主账号列表中。

现在,该服务账号可用于访问此项目中的 Google Cloud API。

配置工作负载身份联合

如需获得配置工作负载身份联合所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理访问权限

如需配置工作负载身份联合,请执行以下步骤:

  1. 在 Google Cloud 控制台中,进入新建工作负载提供方和池页面。

    转到“新建工作负载提供方和池”

  2. 创建身份池部分中,输入以下字段的值:

    • 名称:池的名称。该名称还用作池 ID。池 ID 创建后便无法更改。
    • 说明:描述池用途的文本。
  3. 点击继续

  4. 向池添加提供方下,添加提供方设置:

    1. 选择提供方字段中,选择 OpenID Connect (OIDC)
    2. 输入以下提供方详细信息:

      • 提供方名称:输入提供方的名称。
      • 颁发者(网址):输入您在创建 XSUAA 服务实例时记下的服务密钥凭据中的网址。将 /oauth/token 附加到该网址。
      • 受众群体:选择 Allowed audience,然后输入您在创建 XSUAA 服务实例时记下的服务密钥凭据中的客户端 ID。
  5. 点击继续

  6. 配置提供方属性下的 OIDC 1 字段中,输入 assertion.sub

  7. 点击保存

  8. 请记下以下各项:

    • 池 ID
    • 提供方 ID

    在 SDK 配置 Fiori 应用中配置身份验证时,您需要使用这些 ID。

允许外部身份模拟服务账号

如需模拟联合工作负载中的服务账号,请授予对服务账号的 Workload Identity User (roles/iam.workloadIdentityUser)。如需详细了解如何授予角色,请参阅管理访问权限

如需允许外部身份模拟服务账号,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Workload Identity 池页面。

    转到“工作负载身份池”

  2. 选择您在配置工作负载身份联合部分创建的工作负载身份池。

  3. 如需授予对工作负载身份池的访问权限,请点击 授予访问权限

  4. 服务账号列表中,选择有权访问 Google Cloud API 的服务账号。如果您使用多个服务账号,请在此处添加所有服务账号。

  5. 属性名称字段中,选择主体

  6. 属性值字段中,输入您在创建 XSUAA 服务实例时记下的服务密钥凭据中的客户端 ID。

  7. 点击保存

  8. 在显示的配置您的应用对话框中,点击关闭

将 ABAP SDK for Google Cloud 配置为使用工作负载身份联合

您可以使用 SAP 通信管理应用创建通信管理工件。

如需创建通信管理工件以使用 XSUAA 服务和工作负载身份联合进行身份验证,请使用 ABAP SDK for Google Cloud 附带的通信场景 /GOOG/COM_SDK_WIF

稍后,您将使用 SDK 配置 Fiori 应用创建通信映射。在通信映射中,您可以定义在 ABAP 程序中用于向 Google Cloud 进行身份验证的唯一客户端密钥。

  1. 访问安装了 ABAP SDK for Google Cloud 的 BTP ABAP 系统的 SAP Fiori launchpad。
  2. 前往 All spaces > Administration > Communication Management
  3. 创建通信系统:
    1. 打开 Communication Systems 应用。
    2. 点击 New(新建)。
    3. 在显示的 New Communication System 对话框中,输入以下字段的值:
      • System ID:输入系统 ID。
      • System name:输入系统名称。
    4. 点击创建
    5. Host name 字段中,输入您在创建 XSUAA 服务实例时记下的服务密钥凭据中不含 https:// 的网址。
    6. 端口字段中,输入 443
    7. Users for Outbound Communication 标签页上,点击 Add
    8. 提供以下详细信息:
      • Authentication method:选择 User Name and Password
      • User name/client ID:输入您在创建 XSUAA 服务实例时记下的服务密钥凭据中的客户端 ID。
      • Password:输入您在创建 XSUAA 服务实例时记下的服务密钥凭据中的客户端密钥。
    9. 点击保存
  4. 创建通信安排:

    1. 打开 Communication Arrangement 应用。
    2. 点击 New(新建)。
    3. 在显示的 New Communication Arrangement 对话框中,输入以下字段的值:

      • Scenario:选择 Authentication using Workload Identity Federation (/GOOG/COM_SDK_WIF)。
      • Arrangement name:输入通信安排的名称。
    4. 点击创建

    5. 对于显示的通信安排,请在 Communication System 字段中,选择您在上一步中创建的通信系统。

    6. Configure Workload Identity Federation 部分中提供以下详细信息:

      • Workload Identity Federation Pool ID:输入工作负载身份联合池 ID。
      • Workload Identity Federation Provider ID:输入工作负载身份联合提供方 ID。
    7. Outbound services 下的 Path 字段中,输入 /oauth/token

    8. 点击保存

  5. 创建客户端密钥和通信映射:

    1. 前往包含用于 SDK 配置的 Fiori 应用的空间
    2. 打开 Google SDK: Main Configuration 应用。
    3. 点击创建
    4. 在显示的 Create 对话框中,输入客户端密钥名称。
    5. 点击继续
    6. 提供以下详细信息:
      • Service account:输入授予了 Google Cloud API 的访问权限的服务账号。
      • Project ID:输入 Google Cloud 项目 ID。如需了解项目 ID,请参阅标识项目
      • Project number:输入 Google Cloud 项目编号。如需了解项目编号,请参阅标识项目
      • Authentication type:选择 W (Workload Identity Federation)
    7. 对于显示的通信映射,请在 Communication arrangement 字段中,选择您在上一步中创建的通信安排。
    8. 点击创建。系统会显示一个对话框,确认您同意依照标准 Google Cloud 条款使用 ABAP SDK for Google Cloud。
    9. 如需验证身份验证配置,请点击 Check connection。条目的绿色对勾标记表示配置成功。如果出现任何错误,请访问问题排查页面以获取解决常见错误的指导。

使用存储在 Secret Manager 中的 API 密钥进行身份验证

使用 API 密钥向 Google Cloud 进行身份验证时,您可以使用 Google Cloud 的 Secret Manager 服务安全地存储 API 密钥。

对于使用存储在 Secret Manager 中的 API 密钥进行身份验证,请启用以下 Google Cloud API:

如需了解如何启用 Google Cloud API,请参阅启用 API

如需获得配置 Secret Manager 和工作负载身份联合所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:

对于使用存储在 Secret Manager 中的 API 密钥进行身份验证,简要配置步骤如下:

  1. 在 SAP BTP 中,创建授权和信任 (XSUAA) 服务实例
  2. 在 Google Cloud 中,创建服务账号
  3. 在 Google Cloud 中,配置工作负载身份联合
  4. 在 Google Cloud 中,创建 API 密钥
  5. 在 Google Cloud 中,创建 Secret 并存储 API 密钥
  6. 在 SAP BTP 中,将 ABAP SDK for Google Cloud 配置为使用 Secret Manager 中的 API 密钥

使用存储在 Secret Manager 中的 API 密钥进行身份验证时,您可以重复使用为使用令牌进行身份验证而创建的 XSUAA 服务实例、服务账号以及工作负载身份联合池和提供方。

创建 API 密钥

对于使用 API 密钥进行身份验证,您需要创建 API 密钥。API 密钥字符串是加密的字符串,例如 AIzaSyDaGmWKa4JsXZ-HjGw7ISLn_3namBGewQe。ABAP SDK for Google Cloud 在调用 Google Cloud API 时,会使用 HTTP 请求中的 API 密钥字符串,以便安全地进行身份验证。

Google Cloud 提供了多种创建 API 密钥的方式。

如需使用 Google Cloud 控制台创建 API 密钥,请执行以下步骤:

  1. 在 Google Cloud 控制台中,进入凭据页面:

    进入“凭据”页面

  2. 点击创建凭据,然后从菜单中选择 API 密钥

    • 已创建的 API 密钥对话框会显示 API 密钥字符串。请复制您的密钥字符串,并确保其安全。您需要使用此 API 密钥来配置向 Google Cloud 进行的身份验证。

    • 默认情况下,API 密钥不受限制。我们建议您通过选择此 API 密钥可用于的 API 来限制 API 密钥。如需详细了解如何添加 API 限制,请参阅添加 API 限制

创建 Secret 并存储 API 密钥

  1. 在 Google Cloud 控制台中,转到 Secret Manager 页面。

    前往 Secret Manager

  2. 点击创建密钥

  3. 创建 Secret 页面的名称下,输入 Secret 的名称。Secret 名称可以包含大写和小写字母、数字、连字符和下划线。允许的名称长度上限为 255 个字符。

  4. Secret 值字段中,输入您在创建 API 密钥部分中创建的 API 密钥。

  5. 点击创建密钥。 Secret 的内容存储在 Secret 版本中。

  6. 点击您创建的 Secret 的名称。

  7. 在打开的版本标签页上,记下以下各项:

    • Secret 名称
    • 版本

    配置向 Google Cloud 进行的身份验证时,您需要使用这些服务 Secret 详细信息。

将 ABAP SDK for Google Cloud 配置为使用 Secret Manager 中的 API 密钥

您可以使用 SAP 通信管理应用创建通信管理工件。

如需创建通信管理工件以使用 XSUAA 服务和工作负载身份联合进行身份验证,请使用 ABAP SDK for Google Cloud 附带的通信场景 /GOOG/COM_SDK_APIKSM

稍后,您将使用 SDK 配置 Fiori 应用创建通信映射。在通信映射中,您可以定义在 ABAP 程序中用于向 Google Cloud 进行身份验证的唯一客户端密钥。

  1. 访问安装了 ABAP SDK for Google Cloud 的 BTP ABAP 系统的 SAP Fiori launchpad。
  2. 前往 All spaces > Administration > Communication Management
  3. 创建通信系统:
    1. 打开 Communication Systems 应用。
    2. 点击 New(新建)。
    3. 在显示的 New Communication System 对话框中,输入以下字段的值:
      • System ID:输入系统 ID。
      • System name:输入系统名称。
    4. 点击创建
    5. Host name 字段中,输入您在创建 XSUAA 服务实例时记下的服务密钥凭据中不含 https:// 的网址。
    6. 端口字段中,输入 443
    7. Users for Outbound Communication 标签页上,点击 Add
    8. 提供以下详细信息:
      • Authentication method:选择 User Name and Password
      • User name/client ID:输入您在创建 XSUAA 服务实例时记下的服务密钥凭据中的客户端 ID。
      • Password:输入您在创建 XSUAA 服务实例时记下的服务密钥凭据中的客户端密钥。
    9. 点击保存
  4. 创建通信安排:

    1. 打开 Communication Arrangement 应用。
    2. 点击 New(新建)。
    3. 在显示的 New Communication Arrangement 对话框中,输入以下详细信息:

      • Scenario:选择 Authentication using API Key with Secret Manager (/GOOG/COM_SDK_APIKSM)。
      • Arrangement name:输入通信安排的名称。
    4. 点击创建

    5. 对于显示的通信安排,请在 Communication System 字段中,选择您在上一步中创建的通信系统。

    6. Additional properties 下,提供以下属性的值:

    7. Outbound services 下的 Path 字段中,输入 /oauth/token

    8. 点击保存

  5. 创建客户端密钥和通信映射:

    1. 前往包含用于 SDK 配置的 Fiori 应用的空间
    2. 打开 Google SDK: Main Configuration 应用。
    3. 点击创建
    4. 在显示的 Create 对话框中,输入客户端密钥名称。
    5. 点击继续
    6. 提供以下详细信息:

      • Service account:输入授予了 Google Cloud API 的访问权限的服务账号。
      • Project ID:输入 Google Cloud 项目 ID。如需了解项目 ID,请参阅标识项目
      • Project number:输入 Google Cloud 项目编号。如需了解项目编号,请参阅标识项目
      • Authentication type:选择 V (API Key using Secret Manager)
    7. 对于显示的通信映射,请在 Communication arrangement 字段中,选择您在上一步中创建的通信安排。

    8. 点击创建。系统会显示一个对话框,确认您同意依照标准 Google Cloud 条款使用 ABAP SDK for Google Cloud。

    9. 如需验证身份验证配置,请点击 Check connection。条目的绿色对勾标记表示配置成功。如果出现任何错误,请访问问题排查页面以获取解决常见错误的指导。

获取支持

如果您在解决 ABAP SDK for Google Cloud 问题时需要帮助,请执行以下操作: