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

将 Assured OSS 与 Security Command Center 集成后,有保障的开源软件提供的软件包会托管在您拥有控制权的项目中创建的 Artifact Registry 代码库中。

本页面介绍了如何关联到该 Assured OSS 专用的 Artifact Registry 代码库,以便直接访问和下载 Python 软件包。

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

准备工作

  1. 请让您的管理员向您授予组织的 Service Account Key Admin (roles/iam.serviceAccountKeyAdmin) IAM 角色。您需要此权限才能获取服务账号密钥的 base64 编码字符串。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

  2. 将 Assured OSS 与 Security Command Center 集成

  3. 验证所请求的服务账号与 Assured OSS 的连接。

  4. 安装最新版本的 Google Cloud CLI。如果您之前安装了 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。

安装软件包

以下说明假定您使用 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 中适用于 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 文件中的所有软件包和所有软件包版本指定哈希值。
    • -v 为可选项。如果指定,该命令会提供更多输出
  • 如需下载 Assured OSS 的 Artifact Registry 中没有的必需软件包,请运行以下命令:

     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 文件

本部分提供有关生成 requirements-google.txt 文件(下载 Python 软件包时需要用到该文件)的其他信息。如需下载哈希并为您的环境生成 requirements-google.txt 文件,您可以使用以下两种方法中的任一种:

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

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

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

方法 1:使用脚本为所有制品生成单个 requirements 文件

使用 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 文件中。

后续步骤