排查问题

本页面介绍了如何解决 Secure Source Manager 的问题。

创建代码库时收到出错提示

当您尝试创建代码库时,会出现以下错误:

There was an error while loading /repo/create. Try refreshing the page.

此问题会在以下情况下出现:

  • 您的项目中未启用 Secure Source Manager API。
  • 您在项目中没有 Repo Admin 角色,也没有在 Secure Source Manager 实例中创建代码库的权限。

要解决此问题,请执行以下操作:

  • 在项目中启用 Secure Source Manager API。
  • 请让您的管理员为您授予以下角色:
    • 项目的 Repo Admin (roles/securesourcemanager.repoAdmin) 角色。
    • Secure Source Manager 实例上的 Instance Accessor (roles/securesourcemanager.instanceAccessor)。
    • Secure Source Manager 实例上的 Instance Repository Creator (roles/securesourcemanager.instanceRepositoryCreator)。

如需了解详情,请参阅使用 IAM 进行访问权限控制。

在 Mac 上克隆代码库时显示出错提示

当您尝试克隆代码库时,会出现以下错误:

git: 'credential-gcloud.sh' is not a git command.  See 'git --help'.
fatal: Authentication failed for [repo-url]

此问题会在以下情况下出现:

  • gcloud CLI 是使用 Homebrew 或其他非标准安装方式安装的。
  • git-credential-gcloud.sh 未添加到您的 PATH 中。

要解决此问题,请执行以下操作:

  • 运行:source $HOMEBREW_PREFIX/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.zsh.inc
  • 运行以下命令,检查 git-credential-gcloud.sh 是否在您的路径中:

    which git-credential-gcloud.sh
    

SSH 连接失败,并显示“不匹配”错误

尝试通过 SSH 执行 Git 操作时,您可能会收到以下出错提示之一:

  • Unable to negotiate with <host> port <port>: no matching key exchange method found.
  • Unable to negotiate with <host> port <port>: no matching cipher found.
  • Unable to negotiate with <host> port <port>: no matching MAC found.

当您的 SSH 客户端不支持 Secure Source Manager 所需的加密算法时,就会出现此问题。如果您使用的是旧版 SSH 客户端,或者您的客户端未配置为使用受支持的算法,则可能会发生这种情况。

Secure Source Manager 需要以下算法之一:

  • 密钥交换算法:curve25519-sha256、diffie-hellman-group14-sha256
  • 密码:chacha20-poly1305@openssh.com、aes128-ctr、aes192-ctr、aes256-ctr、aes128-gcm@openssh.com、aes256-gcm@openssh.com
  • MAC:hmac-sha2-256-etm@openssh.com、hmac-sha2-256

如需解决此问题,请将 SSH 客户端更新到支持这些算法的最新版本。

Git HTTPS 请求失败,并显示权限遭拒或未经授权错误

当尝试通过 HTTPS 执行 Git 命令时,系统会显示权限遭拒或未经授权的出错提示。

此问题会在以下情况下发生:

  • 全局 Git 配置文件缺少 Secure Source Manager 身份验证辅助程序。
  • 系统使用的是 Git 的内置凭据存储区,而不是调用 Secure Source Manager 身份验证帮助程序来获取新凭据。
  • 系统正在使用系统凭据辅助程序,而不是调用 Secure Source Manager 身份验证辅助程序来获取新凭据。
  • 使用 HTTPS 与 Secure Source Manager 代码库交互时,使用的是旧版 Google Cloud CLI。Secure Source Manager 需要 Google Cloud CLI 395.0.0 版或更高版本。

要解决此问题,请执行以下操作:

  1. 运行以下命令,确定全局 Git 配置的内容。

    git config --list | grep credential
    
  2. 如果您在 macOS 上看到类似于 *credential*.helper=store 的任何行,或在 Windows 操作系统上看到类似于 credential.helper = manager 的任何行,请移除这些行,然后使用 gcloud auth login 重新进行身份验证,然后再尝试 Git 命令。

  3. 如果响应不包含 macOS 或 Linux 上的 credential.https://*.*.sourcemanager.dev.helper=gcloud.sh,或 Windows 上的 credential.https://*.*.sourcemanager.dev.helper=gcloud.cmd,请将 Secure Source Manager 身份验证辅助程序添加到全局 Git 配置中:

    Linux

    1. 如需将 Secure Source Manager 身份验证帮助程序添加到全局 Git 配置中,请运行以下命令:

      git config --global credential.'https://*.*.sourcemanager.dev'.helper gcloud.sh
      
    2. 运行以下命令,验证身份验证辅助程序行是否已添加到全局 Git 配置中:

      git config --list | grep credential
      

      输出内容应包含 credential.https://*.*.sourcemanager.dev.helper=gcloud.sh。

    3. 运行 gcloud auth login 进行身份验证。

    4. 运行 Git 命令以测试身份验证。

    Windows

    1. 按照安装 Git 和 Google Cloud CLI 说明检查 gcloud CLI 版本。
    2. 如需将 Secure Source Manager 身份验证帮助程序添加到全局 Git 配置中,请运行以下命令:

      git config --global credential.https://*.*.sourcemanager.dev.helper gcloud.cmd
      
    3. 运行以下命令,验证身份验证辅助程序行是否已添加到全局 Git 配置中:

      git config --list | grep credential
      

      输出内容应包含 credential.https://*.*.sourcemanager.dev.helper=gcloud.cmd。

    4. 运行 gcloud auth login 进行身份验证。

    5. 运行 Git 命令以测试身份验证。

  4. 如果您之前将 Git 主机的凭据设置为 gcloud.sh,但收到类似 'credential-gcloud.sh' is not a git command 的错误,则表示 Git 无法在机器的 PATH 中找到 git-credential-gcloud.sh 脚本。请更新您的 PATH,或将 gitconfig 文件中的 gcloud.sh 替换为绝对路径。

Git HTTPS 请求因令牌无效而失败

Git HTTPS 操作需要有效的 OAuth 令牌作为密码。这通常由 Git 凭据辅助程序处理,但也可以与使用其他方法(例如应用默认凭据)生成的 OAuth 令牌搭配使用。

如果 Git 请求因令牌无效而被拒绝,通常意味着无法从传入令牌中提取用户信息,此错误可能有多种原因:

  • 您的 gcloud CLI 登录可能已过期。

    使用 gcloud auth login 重新登录。

  • 您的令牌没有足够的范围。OAuth 令牌应具有以下范围:

    • https://www.googleapis.com/auth/cloud-platform
    • https://www.googleapis.com/auth/userinfo.email

    您可以通过调用 curl https://oauth2.googleapis.com/tokeninfo?access_token=${TOKEN} 来检查令牌范围

  • 您使用的是通过 GKE 舰队 Workload Identity 生成的令牌:

  • 您有组织政策会阻止在特定边界(例如情境感知访问权限)之外使用令牌。

    如需解决此问题,请将 git_helper_use_adc gcloud CLI 配置属性设置为 true,并更新您的应用默认凭证 (ADC):

    1. 使用应用默认凭据登录:

      gcloud auth application-default login
      
    2. 设置 git_helper_use_adc 属性:

      gcloud config set auth/git_helper_use_adc true
      

由于凭据过时,Git HTTPS 请求在 macOS 上失败并显示 403 错误

在 macOS 上通过 HTTPS 执行 Git 操作时,您可能会收到 403 错误。

如果您使用 iCloud 钥匙串,则 macOS 上可能会出现此问题,因为 iCloud 钥匙串会存储和同步过时的令牌,从而干扰 gcloud CLI 身份验证令牌。这些过时的令牌可能会导致 Secure Source Manager 身份验证失败,即使您使用 gcloud auth login 重新进行身份验证也是如此。

如需解决此问题,请从“钥匙串访问”中手动删除所有过时的凭据:

  1. 在 Mac 上打开钥匙串访问应用(位于 /Applications/Utilities/ 中)。
  2. 搜索 sourcemanager.dev。
  3. 右键点击与 *.*.sourcemanager.dev 或您的 Secure Source Manager 实例网址匹配的任何“互联网密码”类型的条目,然后选择删除。
  4. 删除这些条目后,请重试 Git 操作。系统可能会提示您使用 gcloud CLI 重新进行身份验证。如果 Git 操作仍然失败,请先运行 gcloud auth login,然后再重试。

将 Kubernetes 服务账号 (KSA) 令牌与 GKE 舰队 Workload Identity 搭配使用时,SSM 会返回错误

使用 GKE 舰队 Workload Identity 时,Secure Source Manager 不支持原始 KSA 令牌。使用这些令牌会导致错误。

如需解决此问题,您必须模拟服务账号并将工作负载绑定到 Google 服务账号。您还需要向 KSA 配置添加以下注解:

iam.gke.io/gcp-service-account: SERVICE_ACCOUNT@PROJECT_ID.

项目未显示在网页界面产品选择器中

使用 Secure Source Manager 网页界面产品选择器时,您的项目不会显示。

当您有多个 Secure Source Manager 登录凭证时,会出现此问题。

要解决此问题,请执行以下操作:

  • 通过将以下内容附加到 Secure Source Manager 实例网址来清除 Cookie: /_oauth/consent

    例如,如果您的实例网址为 https://my-instance-098765432123.us-central1.sourcemanager.dev/,请在浏览器地址栏中输入 https://my-instance-098765432123.us-central1.sourcemanager.dev/_oauth/consent,然后使用正确的凭据登录。

触发器文件不会触发构建

如果提交触发器文件后未按预期触发构建,则可能存在以下问题之一:

  • 触发器文件不在默认分支中。如需解决此问题,请将触发器文件移至默认分支。
  • 触发器文件格式无效。如果代码库页面中显示内容为 Build triggers configuration error: ... 的横幅,则表示存在此错误。如需解决此问题,请参阅触发器文件架构。当触发器文件配置正确时,代码库页面中的横幅会显示 Valid build triggers configuration。

构建触发器配置错误

将 triggers.yaml 文件提交到 Secure Source Manager 代码库后,横幅中会显示以下错误:

Build cannot be created.

出现此问题的原因如下:

  • Cloud Build 配置文件包含无效选项或格式。
  • Secure Source Manager 服务代理在代码库的用户代管式服务账号中不具有 Service Account Token Creator 角色。
  • 用户代管式服务账号在 Cloud Build 服务账号上没有 Service Account User 角色。
  • 用户代管式服务账号在运行构建的项目中没有 Cloud Build Editor 角色。
  • 组织政策 iam.disableCrossProjectServiceAccountUsage 正在阻止使用用户代管式服务账号(如果服务账号位于其他项目中)。

要解决此问题,请按以下步骤操作:

  • 确保您遵循正确的触发器文件架构。
  • 验证是否已授予所有必需的角色。请参阅所需的服务账号角色。
  • 如果使用其他项目中的用户代管式服务账号,请验证在托管该服务账号的项目中是否已停用组织政策 iam.disableCrossProjectServiceAccountUsage。

执行期间构建失败

如果构建成功触发,但在执行期间失败,则关联的提交具有“失败”提交状态。

如需排查失败的构建问题,请在代码库页面中点击失败的提交状态旁边的详细信息。

Cloud Build 执行日志随即打开。如需详细了解如何排查 Cloud Build 中的构建问题,请参阅排查构建错误。

由于检测到敏感数据,Git 推送被拒绝

将提交推送到启用了 Secret 扫描的仓库时,推送会失败,并显示类似于以下内容的出错提示:

remote: Push rejected: Sensitive data detected.

当 Secret 扫描或自定义检查模板在提交历史记录中识别出敏感信息时,就会出现此问题。

要解决此问题,请执行以下操作:

  • 使用 git reset --soft 还原有问题的提交,并在再次提交之前移除敏感信息。
  • 如果检测到的信息可以接受,并且您拥有适当的权限,请使用 -o dlpskip=true 推送选项绕过检查:

    git push -o dlpskip=true origin BRANCH_NAME
    

重新创建后,每日配额未重置

如果您删除 Secure Source Manager 实例,并在同一天使用相同的实例 ID 重新创建该实例,则可能会收到密钥扫描配额用尽或达到上限的错误。

出现此问题的原因是,Secret 扫描配额是与实例 ID 相关联的每日速率配额。如果您在当天删除并重新创建具有相同 ID 的实例,则配额用量不会重置。

如需解决此问题,您可以执行以下任一操作:

  • 等到第二天,每日配额用量会自动重置为 0。
  • 使用其他唯一的实例 ID 重新创建实例。
  • 请暂时跳过密钥扫描,或申请增加配额。如需了解详情,请参阅增加可用配额。

配置代码库服务账号时出错

当您尝试使用用户代管式服务账号创建或更新代码库时,会出现以下错误:

Permission denied on resource ...

如果您在尝试与代码库关联的服务账号上没有 Service Account User (roles/iam.serviceAccountUser) 角色,则会出现此问题。Secure Source Manager 会先验证您是否有权充当服务账号,然后才允许您将其与代码库相关联。

如需解决此问题,请让管理员为您授予此服务账号的 Service Account User 角色。