使用直接代码库访问权限下载 Python 软件包

将 Assured OSS 与 Security Command Center 集成后,Assured Open Source Software 软件包会托管在您控制的项目中创建的 Artifact Registry 代码库中。

本页介绍了如何连接到 Artifact Registry 代码库以便使用 Assured OSS 直接访问和下载 Python 软件包。

本文档仅适用于 Assured OSS 高级层级。对于免费层级,请参阅使用免费层级的直接代码库访问权限下载 Python 软件包

准备工作

  1. 将 Assured OSS 与 Security Command Center 集成

  2. 验证请求的服务账号与 Assured OSS 的连接情况

  3. 安装最新版本的 Google Cloud CLI

  4. 如果您之前安装了 Google Cloud CLI,请运行以下命令以确保您拥有最新版本:

    gcloud components update
    

设置身份验证

您可以使用以下任一方法对 Assured OSS Python 软件包仓库进行身份验证:

  • 使用密钥串进行身份验证
  • 使用服务账号密钥进行身份验证

以下部分介绍了如何设置这些身份验证方法。

使用密钥环进行身份验证

如需使用 Python 密钥库对 Artifact Registry 进行身份验证,请参阅使用密钥库进行身份验证以及凭据搜索顺序相关信息。我们建议您使用 Python 密钥库进行身份验证。

如需设置密钥环以进行身份验证,请执行以下操作:

  1. 安装 keyring 库:

    pip install keyring
    
  2. 安装 Artifact Registry 后端:

    pip install keyrings.google-artifactregistry-auth
    
  3. 列出后端以确认安装:

    keyring --list-backends
    

    该列表应包含以下内容:

    • ChainerBackend(priority:10)
    • GooglePythonAuth(priority:9)
  4. 如需了解如何设置应用默认凭据,请参阅设置身份验证

    此步骤可确保 Assured OSS 凭据帮助程序在与代码库连接时获取您的密钥。

使用服务账号密钥进行身份验证

当应用要求使用用户名和密码进行身份验证时,使用服务账号密钥进行身份验证。

将软件包代码库网址 https://us-python.pkg.dev/PROJECT_ID/assuredoss-python/simple 替换为网址 https://_json_key_base64:BASE64_KEY@us-python.pkg.dev/PROJECT_ID/assuredoss-python/simple

替换以下内容:

  • PROJECT_ID 替换为您在设置 Assured Open Source Software 时选择的项目的 ID。
  • BASE64_KEY 替换为经过 base64 编码的服务账号 JSON 密钥文件。如需将整个服务账号 JSON 密钥文件转换为 base64 编码,请使用以下命令:

    BASE64_KEY=$(cat KEY_FILE_LOCATION | base64 -w 0)
    

    KEY_FILE_LOCATION 替换为服务账号 JSON 密钥文件的位置。

安装软件包

以下说明假定您使用 PyPI 作为代码库来下载依赖项。如果您使用的是其他代码库,则必须使用其他步骤来下载依赖项。

安装 Assured OSS 中现有的软件包

如需指定要下载的 Assured OSS Python 软件包,请创建两个 requirements.txt 文件。示例文件如下:

  • requirements-google.txt

    # Packages present in Google's Artifact Registry
    
    urllib3==1.26.11 --hash=sha256:1cffe1aa066363a75c856f261c8fce62d87f7c40ce0f46453ea12bf652b12a13
    jsonschema==4.13.0 --hash=sha256:29895bfe55b93b75552fbdd1e09aa0c82b7c1c9395d4f267e10c7d43cd31a74e
    
  • requirements-pypi.txt

    # Packages present in Google's Artifact Registry are mentioned here so that pip
    # downloads their dependencies from PyPI.
    
    urllib3==1.26.11
    jsonschema==4.13.0
    
    # Below this comment, add any package version which you need but is NOT
    # present in Google's Artifact Registry and therefore needs to be downloaded from
    # PyPI.
    

如需下载软件包,请运行以下命令:

  • 如需下载 Artifact Registry for Assured OSS 中提供的所需软件包,请运行以下命令:

     pip install --require-hashes --requirement=requirements-google.txt \
         --index-url https://_json_key_base64:BASE64_KEY@us-python.pkg.dev/PROJECT_ID/assuredoss-python repo/simple -v \
         --no-deps
    

    请考虑以下事项:

    • --require-hashes 为可选项。如果包含,则会为 requirements.txt 文件中的所有软件包和所有软件包版本指定哈希值。
    • BASE64_KEY 替换为采用 base64 编码的服务账号 JSON 文件。
    • -v 为可选项。如果指定了,该命令会提供更多输出
  • 如需下载 Artifact Registry for Assured OSS 中不存在的所需软件包,请运行以下命令:

     pip install --requirement=requirements-pypi.txt --index-url https://pypi.org/simple -v
    

    此命令还会下载您使用上一个命令下载的软件包缺少的依赖项。

列出 Assured OSS 中提供的所有 Python 软件包

如需使用 API 获取 Artifact Registry 代码库中所有 Python 软件包的列表,请参阅列出 Assured OSS 中提供的所有 Python 软件包

生成 requirements-google.txt 文件

本部分提供了有关生成下载 Python 软件包所需的 requirements-google.txt 文件的更多信息。如需下载哈希并为您的环境生成 requirements-google.txt 文件,您可以使用以下两种方法中的一种:

  • 使用脚本为所有工件生成单个要求文件。

  • 为每个工件下载单独的要求文件。

以下部分详细介绍了这些选项。

方法 1:使用脚本为所有工件生成单个要求文件

使用 generator.sh 脚本为适用于 Linux 操作系统的 Assured OSS 提供的所有 Python 软件包(及其哈希值)生成单个 requirements-google.txt 文件。软件包必须满足 Python 版本、机器架构和操作系统等限制。然后,您可以删除不需要的软件包版本,并使用生成的文件。

generator.sh 脚本有以下两种帮助方式:

  • 该工具会生成最新的 Python 软件包版本列表,其中包含可成功安装在系统上的 Assured OSS 软件包。
  • 它会生成 requirements-google.txt 文件以及所有哈希。

所需的脚本及其 README.md 文件位于 Cloud Storage 存储桶 (gs://cloud-aoss/utils/python-requirements-txt/v1.0) 中,您可以使用 Google Cloud CLI 下载该存储分区。

如需下载脚本和 README.md 文件,请按以下步骤操作:

  1. 使用以下命令通过服务账号进行身份验证,以访问 Cloud Storage 存储桶:

    gcloud auth activate-service-account --key-file KEY_FILE
    

    KEY_FILE 替换为包含设置过程中提供的服务账号凭据的文件的路径。

  2. 使用以下命令将 generator.sh 下载到您的机器上:

    gcloud storage cp gs://cloud-aoss/utils/python-requirements-txt/v1.0/generator.sh PATH_TO_LOCAL_STORE --recursive
    

    PATH_TO_LOCAL_STORE 替换为您要保存下载文件的本地路径。

  3. 使用以下命令下载 README.md 文件:

    gcloud storage cp gs://cloud-aoss/utils/python-requirements-txt/v1.0/README.md PATH_TO_LOCAL_STORE --recursive
    

    PATH_TO_LOCAL_STORE 替换为您要保存下载文件的本地路径。README.md 文件包含有关如何使用脚本的说明。

如需运行脚本,请使用以下命令:

  • 如需生成 requirements-google.txt 文件,请运行以下命令:

     chmod +x generator.sh
     ./generator.sh
    
  • 如需在 CSV 文件中获取软件包的信息,请运行以下命令:

    chmod +x generator.sh
    ./generator.sh -i
    

方法 2:为每个必需工件下载 requirements.txt

您还可以为每个 Python 工件下载单独的 requirements.txt(包含哈希值)文件,然后将它们合并到单个 requirements.txt 文件中。

工件哈希位于 Cloud Storage 存储桶中,您可以使用 gcloud CLI 下载这些哈希。每个软件包和版本的哈希值位于 gs://cloud-aoss/python/PACKAGE_NAME/VERSION Cloud Storage 存储桶位置。

如需下载 requirements.txt 文件,请按以下步骤操作:

  1. 使用以下命令使用服务账号进行身份验证,以访问 Cloud Storage 存储桶:

    gcloud auth activate-service-account --key-file KEY_FILE
    

    KEY_FILE 替换为包含服务账号凭据的文件的路径。

  2. 使用以下命令将特定软件包和版本的 requirements.txt 下载到本地机器:

    gcloud storage cp gs://cloud-aoss/python/PACKAGE_NAME/VERSION PATH_TO_LOCAL_STORE --recursive
    

    替换以下内容:

    • PACKAGE_NAME:软件包名称
    • VERSION:软件包的版本
    • PATH_TO_LOCAL_STORE:要将文件下载到的本地路径

    示例命令:

    gcloud storage cp gs://cloud-aoss/python/bleach/5.0.0 /tmp/bleach --recursive

    示例 requirements.txt 文件:

    bleach==5.0.0 \
     --hash=sha256:6d286e765bfd3e309209cfa1d063e4d46afa966dea8cb97431c02b1e3067d812
    

    每个此类 requirements.txt 文件的内容都可以合并到一个 requirements-google.txt 文件中。

后续步骤