使用 SSH 公钥进行身份验证

用户和服务账号可以使用 SSH 公钥向 Secure Source Manager 代码库进行身份验证。本页介绍了如何生成 SSH 密钥对,然后将其添加为 Secure Source Manager 网页界面中的身份验证方法。

Secure Source Manager 支持 RSA、ECDSA 和 Ed25519 SSH 密钥类型。

所需的角色

如需获得使用 SSH 公钥进行身份验证所需的权限,请让您的管理员为您授予以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含使用 SSH 公钥进行身份验证所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需使用 SSH 公钥进行身份验证,您需要具备以下权限:

  • securesourcemanager.sshkeys.createAny 在 Secure Source Manager 实例上
  • 如需为服务账号分配 SSH 密钥,请执行以下操作: iam.serviceAccounts.actAs 在服务账号上

您也可以使用自定义角色或其他预定义角色来获取这些权限。

如需了解如何授予 Secure Source Manager 角色,请参阅使用 IAM 进行访问权限控制向用户授予实例访问权限

生成密钥对

SSH 密钥对由位于本地系统上的私钥和您在 Google Cloud注册的公钥组成。

Linux 或 macOS

  1. 在本地系统上安装 OpenSSH

  2. 在命令提示符后输入以下内容:

    ssh-keygen -t KEY_TYPE -C "USER_EMAIL"
    

    其中:

    • USER_EMAIL 是您的电子邮件地址。
    • KEY_TYPErsaecdsaed25519 中的一个。

    例如:

    ssh-keygen -t rsa -C "user@example.com"
    
    1. 出现提示时,输入公钥文件的位置和文件名。 如需接受默认位置和文件名,请按 Enter 键。

    2. 出现提示时,请将密码留空,然后按 Enter 键。

Windows

  1. 如果没有,请在本地系统上安装 OpenSSH 客户端(包含在 Windows 10 及更高版本中)和 Git for Windows。以下说明使用 OpenSSH 和 Git for Windows。

  2. 在 PowerShell 或命令提示符中,运行以下命令:

    ssh-keygen -t KEY_TYPE -C "USER_EMAIL"
    

    其中:

    • USER_EMAIL 是您的电子邮件地址。
    • KEY_TYPErsaecdsaed25519 中的一个。

    例如:

    ssh-keygen -t rsa -C "user@example.com"
    
    1. 出现提示时,输入公钥文件的位置和文件名。 如需接受默认位置和文件名(“%USERPROFILE%.ssh”),请按 Enter 键。

    2. 出现提示时,请将密码留空,然后按 Enter 键。

将 SSH 密钥添加到 SSH 代理

如需使用您生成的 SSH 密钥对,请将您的密钥添加到 SSH 代理。如果您未将密钥保存在默认位置,则将其添加到 SSH 代理有助于 SSH 找到您的密钥。

Linux 或 macOS

  1. 在后台启动 ssh-agent

    eval "$(ssh-agent -s)"
    

    该命令会返回代理进程 ID (PID),例如:

    Agent pid 3245
    

    根据您的环境,您可能需要使用其他命令,例如:

    • 如需使用 root 访问权限,请在启动 ssh-agent 之前运行 sudo -s -H
    • 如需直接运行 ssh-agent,请使用 exec ssh-agent bashexec ssh-agent zsh
  2. 将 SSH 私钥添加到 ssh-agent

    ssh-add ~/.ssh/FILENAME
    

    其中,FILENAME 是您的私钥文件的名称,例如 id_rsaid_ed25519

Windows

  1. 启动 ssh-agent

    • 如果您使用的是 Git Bash,请启动 ssh-agent

      eval "$(ssh-agent -s)"
      
    • 如果您使用的是 PowerShell 或命令提示符,请启动 ssh-agent 服务。在 PowerShell 中,运行以下命令:

      Set-Service ssh-agent -StartupType Automatic; Start-Service ssh-agent
      
  2. 将 SSH 私钥添加到 ssh-agent

    • 如果您使用的是 Git Bash:

      ssh-add ~/.ssh/FILENAME
      
    • 如果您使用的是 PowerShell 或命令提示符:

      ssh-add $env:USERPROFILE\.ssh\FILENAME
      

    其中,FILENAME 是您的私钥文件的名称,例如 id_rsaid_ed25519

为用户添加 SSH 密钥

  1. 在 Secure Source Manager 网页界面中,从实例或代码库页面点击 更多选项菜单。
  2. 点击用户 SSH 密钥

    系统会打开用户 SSH 密钥页面,并显示您创建的所有现有密钥的列表。

  3. 用户 SSH 密钥页面中,点击添加密钥

  4. 添加 SSH 密钥页面中,为您的密钥输入以下值:

    1. 标题:为密钥添加描述性标题。
    2. SSH 公钥:粘贴您的公钥字符串。如需获取公钥字符串,请在文本编辑器中打开公钥文件 (FILENAME.pub),或运行以下命令之一:

      Linux 或 macOS

      cat ~/.ssh/FILENAME.pub
      

      Windows

      cat $env:USERPROFILE\.ssh\FILENAME.pub
      

      FILENAME 替换为您的密钥文件的名称。

您可以使用 SSH 密钥对任何 Secure Source Manager 代码库进行身份验证,前提是您对该代码库拥有所需的权限。

为服务账号添加 SSH 密钥

如需以程序化方式访问您的代码库,您可以为服务账号添加 SSH 密钥。

  1. 如果您还没有要使用的服务账号,请创建一个服务账号
  2. 在 Secure Source Manager 网页界面中,点击 更多选项菜单。
  3. 点击服务账号 SSH 密钥。系统会打开服务账号 SSH 密钥 页面,并显示您添加的所有现有密钥的列表。
  4. 服务账号 SSH 密钥页面上,点击添加密钥
  5. 添加服务账号 SSH 密钥页面中,为您的密钥输入以下值:

    1. Title:密钥的描述性标题
    2. 服务账号:您要使用 SSH 密钥的服务账号的电子邮件地址,格式为 SA_NAME@PROJECT_ID.iam.gserviceaccount.com

      地点

      • SA_NAME 是服务账号名称。
      • PROJECT_ID 是创建服务账号的项目 ID。
    3. SSH 公钥:您的 SSH 公钥。如需了解如何生成 SSH 密钥对,请参阅生成密钥对

  6. 如果服务账号与 Secure Source Manager 实例不在同一项目中,请向 Secure Source Manager 的服务代理授予您要使用的服务账号的以下角色或权限之一:

    • iam.serviceAccounts.signJwt 权限
    • Service Account Token Creator (roles/iam.serviceAccountTokenCreator) 角色

    运行以下命令,向您的 Secure Source Manager 服务账号添加 IAM 政策,以向其授予 Service Account Token Creator 角色。

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT \
        --member="serviceAccount:service-INSTANCE_PROJECT_NUMBER@gcp-sa-sourcemanager.iam.gserviceaccount.com" \
        --role="roles/iam.serviceAccountTokenCreator"
    

    其中,SERVICE_ACCOUNT 是您要使用的服务账号,INSTANCE_PROJECT_NUMBER 是 Secure Source Manager 实例的项目编号。

    SERVICE_ACCOUNT 的格式应为数字服务账号 ID 或电子邮件地址,例如:123456789876543212345 或 my-iam-account@somedomain.com。

后续步骤