本页面介绍了如何解决 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)。
- 项目的 Repo Admin (
如需了解详情,请参阅使用 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 版或更高版本。
要解决此问题,请执行以下操作:
运行以下命令,确定全局 Git 配置的内容。
git config --list | grep credential如果您在 macOS 上看到类似于
*credential*.helper=store的任何行,或在 Windows 操作系统上看到类似于credential.helper = manager的任何行,请移除这些行,然后使用gcloud auth login重新进行身份验证,然后再尝试 Git 命令。如果响应不包含 macOS 或 Linux 上的
credential.https://*.*.sourcemanager.dev.helper=gcloud.sh,或 Windows 上的credential.https://*.*.sourcemanager.dev.helper=gcloud.cmd,请将 Secure Source Manager 身份验证辅助程序添加到全局 Git 配置中:Linux
如需将 Secure Source Manager 身份验证帮助程序添加到全局 Git 配置中,请运行以下命令:
git config --global credential.'https://*.*.sourcemanager.dev'.helper gcloud.sh运行以下命令,验证身份验证辅助程序行是否已添加到全局 Git 配置中:
git config --list | grep credential输出内容应包含
credential.https://*.*.sourcemanager.dev.helper=gcloud.sh。运行
gcloud auth login进行身份验证。运行 Git 命令以测试身份验证。
Windows
- 按照安装 Git 和 Google Cloud CLI 说明检查 gcloud CLI 版本。
如需将 Secure Source Manager 身份验证帮助程序添加到全局 Git 配置中,请运行以下命令:
git config --global credential.https://*.*.sourcemanager.dev.helper gcloud.cmd运行以下命令,验证身份验证辅助程序行是否已添加到全局 Git 配置中:
git config --list | grep credential输出内容应包含
credential.https://*.*.sourcemanager.dev.helper=gcloud.cmd。运行
gcloud auth login进行身份验证。运行 Git 命令以测试身份验证。
如果您之前将 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-platformhttps://www.googleapis.com/auth/userinfo.email
您可以通过调用
curl https://oauth2.googleapis.com/tokeninfo?access_token=${TOKEN}来检查令牌范围您使用的是通过 GKE 舰队 Workload Identity 生成的令牌:
- 不支持从 GKE 舰队 Workload Identity 生成的原始 token。如需了解详情,请参阅将 KSA 令牌与 GKE 舰队 Workload Identity 搭配使用时,SSM 会返回错误。
您有组织政策会阻止在特定边界(例如情境感知访问权限)之外使用令牌。
如需解决此问题,请将
git_helper_use_adcgcloud CLI 配置属性设置为true,并更新您的应用默认凭证 (ADC):使用应用默认凭据登录:
gcloud auth application-default login设置
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 重新进行身份验证也是如此。
如需解决此问题,请从“钥匙串访问”中手动删除所有过时的凭据:
- 在 Mac 上打开钥匙串访问应用(位于
/Applications/Utilities/中)。 - 搜索
sourcemanager.dev。 - 右键点击与
*.*.sourcemanager.dev或您的 Secure Source Manager 实例网址匹配的任何“互联网密码”类型的条目,然后选择删除。 - 删除这些条目后,请重试 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 角色。