验证连接

本文档可帮助您确认服务账号和 AWS 账号是否已成功启用,以便访问有保障的开源软件服务。

如需验证您的 Google Cloud 服务账号或(仅限免费层级)AWS 账号 ID 是否已获准访问 Assured OSS 仓库和精选软件包组合,请使用 API 列出可用的 Java 或 Python 软件包。为此,您可以直接调用 API,也可以使用 Cloud Shell 运行 curl 命令行调用来调用 API。

如果您使用的是免费层级,在极少数情况下,您提交客户启用表单后,可能会在 1 小时或更长时间内遇到权限被拒错误。

本文档同时适用于高级层级和免费层级。

准备工作

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

    gcloud components update
    
  2. 如需使用 Google Cloud访问 Assured OSS,请为已启用 Assured OSS 的服务账号的父 Google Cloud 项目启用 Artifact Registry API。如果您使用的是高级层级,则在设置期间会启用该 API。

  3. 将以下网址添加到网络的许可名单中:

    • *.pkg.dev
    • artifactregistry.googleapis.com

设置身份验证

对于 Google Cloud

  1. 生成并下载服务账号密钥。我们建议遵循管理服务账号的最佳实践

  2. 如果您已登录 Google Cloud CLI,请撤消所有现有的身份验证:

    gcloud auth revoke
    
  3. 向 Google Cloud进行身份验证:

    gcloud auth login --cred-file=FILEPATH.json
    

    其中,FILEPATH 是服务账号密钥的路径。

  4. 更新应用默认凭据

    export GOOGLE_APPLICATION_CREDENTIALS=FILEPATH.json
    

    其中,FILEPATH 是服务账号密钥的路径。

对于 AWS

这些步骤仅适用于 Assured OSS 的免费层级。

  1. 设置 EC2 实例以允许请求临时凭据

    1. 登录 AWS Management Console
    2. 在 AWS 管理控制台中,前往 EC2 信息中心,然后选择目标 EC2 实例。
    3. 依次选择操作 > 安全 > 修改 IAM 角色
    4. 依次选择创建新的 IAM 角色 > 创建角色
    5. 对于可信实体的类型,请选择 AWS 服务
    6. 对于此使用情形,请选择 EC2
    7. 添加 AmazonEC2ReadOnlyAccess 权限,然后点击下一步
    8. 为 IAM 角色提供一个有意义的名称,然后点击下一步
    9. 返回到修改 IAM 角色。选择新创建的角色,然后点击更新 IAM 角色
  2. 生成凭据配置文件:

    gcloud iam workload-identity-pools create-cred-config \
    projects/ASSIGNED_PROJECT_NUMBER/locations/global/workloadIdentityPools/aoss-wif-pool/providers/aws-AWS_ACCOUNT_ID-provider \
    --service-account=aoss-wif-aws-AWS_ACCOUNT_ID-sa@ASSIGNED_PROJECT_ID.iam.gserviceaccount.com \
    --aws \
    --output-file=FILEPATH.json
    

    替换以下内容:

    • AWS_ACCOUNT_ID:您的 AWS 账号的 12 位数字(例如 123456789012)。
    • FILEPATH:用于保存配置的文件。+ ASSIGNED_PROJECT_ID:分配给您的 Google Cloud 项目 ID,如启用邮件中所述。+ ASSIGNED_PROJECT_NUMBER:分配给您的 Google Cloud 项目编号,如启用电子邮件中所述。

    如果您使用的是 AWS IMDSv2,请向上述命令添加标志 --enable-imdsv2。如需了解详情,请参阅创建凭据配置

  3. 如果您已登录 Google Cloud CLI,请撤消所有现有的身份验证:

    gcloud auth revoke
    
  4. 向 Google Cloud进行身份验证:

    gcloud auth login --cred-file=FILEPATH.json
    

    其中,FILEPATH 是凭据配置文件的路径。

  5. 更新应用默认凭据

    export GOOGLE_APPLICATION_CREDENTIALS=FILEPATH.json
    

    其中,FILEPATH 是服务账号密钥或凭据配置文件的路径。

如需排查与身份验证相关的问题,请参阅排查身份验证错误

列出 Assured OSS 中所有可用的 Java 软件包

您可以使用 REST API 列出所有 Java 软件包及其版本。

对于 Assured OSS 的免费层级,请输入以下 HTTP 请求:

  curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
      "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-java/mavenArtifacts"

对于 Assured OSS 高级层级,请输入以下 HTTP 请求:

  curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
      https://artifactregistry.googleapis.com/v1/projects/PROJECT_ID/locations/us/repositories/assuredoss-java/packages

PROJECT_ID 替换为您在设置 Assured OSS 时选择的项目的 ID。

以下是连接到免费层级 Java 制品库的 curl 命令示例:

  curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
      "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-java/mavenArtifacts"

该请求会返回类似于以下示例响应的响应:

  {
    "mavenArtifacts": [
      {
        "name":
  "projects/cloud-aoss/locations/us/repositories/cloud-aoss-java/mavenArtifacts/com.alibaba:fastjson:1.2.83",
        "pomUri":
  "us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/com/alibaba/fastjson/1.2.83/fastjson-1.2.83.pom",
        "groupId": "com.alibaba",
        "artifactId": "fastjson",
        "version": "1.2.83",
        "createTime": "2022-06-24T09:10:05.166879Z",
        "updateTime": "2022-06-24T09:10:05.166879Z"
      },
      {
        "name":
  "projects/cloud-aoss/locations/us/repositories/cloud-aoss-java/mavenArtifacts/org.apache.logging.log4j:log4j-api:2.17.1",
        "pomUri":
  "us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/org/apache/logging/log4j/log4j-api/2.17.1/log4j-api-2.17.1.pom",
        "groupId": "org.apache.logging.log4j",
        "artifactId": "log4j-api",
        "version": "2.17.1",
        "createTime": "2022-03-16T12:22:50.113695Z",
        "updateTime": "2022-03-16T12:22:50.113695Z"
      },
      {
        "name":
  "projects/cloud-aoss/locations/us/repositories/cloud-aoss-java/mavenArtifacts/org.apache.logging.log4j:log4j-core:2.17.1",
      "pomUri":
  "us-maven.pkg.dev/cloud-aoss/cloud-aoss-java/org/apache/logging/log4j/log4j-core/2.17.1/log4j-core-2.17.1.pom",
        "groupId": "org.apache.logging.log4j",
        "artifactId": "log4j-core",
        "version": "2.17.1",
        "createTime": "2022-03-16T12:26:40.317215Z",
        "updateTime": "2022-03-16T12:26:40.317215Z"
      }
    ]
  }

如果有许多可用的软件包,API 响应可能会进行分页。如果列表不完整,则响应中会返回连续令牌 nextPageTokennextPageToken 表示返回的最后一个结果。将 nextPageToken 的值传递给后续请求的 pageToken 参数时,系统将从最后一个结果之后开始返回下一页结果。

如需查看下一页结果,或增加每页返回的对象数量,请使用以下网址:

  "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-java/mavenArtifacts?pageSize=NUMBER&pageToken=NEXT_PAGE_TOKEN"

替换以下内容:

  • NUMBER:每页要返回的商品数量。接受的最大值为 1000。
  • NEXT_PAGE_TOKEN:JSON 响应中返回的 nextPageToken 令牌值。

或者,您也可以使用以下脚本将上述 API 请求的分页结果收集到一个文件中:

tempFile=$(mktemp)
nextPageToken=""
while
    curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-java/mavenArtifacts?pageSize=1000&pageToken=$nextPageToken" > $tempFile
    nextPageToken=$(grep nextPageToken $tempFile | sed 's/  "nextPageToken": "//' | sed 's/.$//')
    grep -v nextPageToken $tempFile >> FILENAME1
    [ -n "$nextPageToken" ]
do
:
done

可选:将已排序的主要 Java 软件包名称列表写入 FILENAME2

以下额外的命令行操作会过滤返回的原始 Java 软件包列表,以便仅显示主要软件包名称的列表。

  curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
      "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-java/mavenArtifacts?pageSize=1000" \
      | grep artifactId | sort -f | uniq >  FILENAME2

可选:将已排序的 Java 软件包版本列表写入 FILENAME3

以下额外的命令行操作会过滤返回的原始 Java 软件包列表,以便仅显示软件包版本列表。

  curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
      "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-java/mavenArtifacts?pageSize=1000" \
      | grep name | sort -f | uniq >  FILENAME3

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

您可以使用 REST API 列出所有 Python 软件包及其版本。这些软件包适用于 Python 3.8。

对于 Assured OSS 的免费层级,请输入以下 HTTP 请求:

  GET https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-python/pythonPackages

对于 Assured OSS 高级层级,请输入以下 HTTP 请求:

  curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    "https://artifactregistry.googleapis.com/v1/projects/PROJECT_ID/locations/us/repositories/assuredoss-python/packages"

PROJECT_ID 替换为您在设置 Assured OSS 时选择的项目的 ID。

如需列出特定于您环境的所有软件包,请使用 generator.sh 脚本

以下命令是一个示例 curl 命令,用于连接到免费层的 Assured OSS Python 代码库:

  curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
      "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-python/pythonPackages"

该请求会返回类似于以下示例响应的响应:

  {
  "pythonPackages": [
    {
      "name":
  "projects/cloud-aoss/locations/us/repositories/cloud-aoss-python/pythonPackages/Flask:2.1.2",
      "uri":
  "us-python.pkg.dev/cloud-aoss/cloud-aoss-python/flask/Flask-2.1.2-py3-none-any.whl",
        "packageName": "Flask",
        "version": "2.1.2",
        "createTime": "2022-07-13T11:06:54.163313Z",
        "updateTime": "2022-07-13T11:06:54.163313Z"
    },
    {
      "name":
  "projects/cloud-aoss/locations/us/repositories/cloud-aoss-python/pythonPackages/ujson:5.3.0",
        "uri":
  "us-python.pkg.dev/cloud-aoss/cloud-aoss-python/ujson/ujson-5.3.0-cp38-cp38-linux_x86_64.whl",
        "packageName": "ujson",
        "version": "5.3.0",
        "createTime": "2022-07-13T11:06:17.263638Z",
        "updateTime": "2022-07-13T11:06:17.263638Z"
      },
      {
        "name":
  "projects/cloud-aoss/locations/us/repositories/cloud-aoss-python/pythonPackages/ujson:5.4.0",
        "uri":
  "us-python.pkg.dev/cloud-aoss/cloud-aoss-python/ujson/ujson-5.4.0-cp38-cp38-linux_x86_64.whl",
        "packageName": "ujson",
        "version": "5.4.0",
        "createTime": "2022-07-13T11:09:00.865162Z",
        "updateTime": "2022-07-13T11:09:00.865162Z"
      },
      {
        "name":
  "projects/cloud-aoss/locations/us/repositories/cloud-aoss-python/pythonPackages/urllib3:1.26.8",
        "uri":
  "us-python.pkg.dev/cloud-aoss/cloud-aoss-python/urllib3/urllib3-1.26.8-py2.py3-none-any.whl",
        "packageName": "urllib3",
        "version": "1.26.8",
        "createTime": "2022-07-13T11:05:56.529484Z",
        "updateTime": "2022-07-13T11:05:56.529484Z"
      }
    ]
  }

如果有许多可用的软件包,API 响应可能会进行分页。如果列表不完整,则响应中会返回连续令牌 nextPageTokennextPageToken 表示返回的最后一个结果。将 nextPageToken 的值传递给后续请求的 pageToken 参数时,系统将从最后一个结果之后开始返回下一页结果。

如需查看下一页结果,或增加每页返回的对象数量,请在免费层中使用以下网址:

  "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-python/pythonPackages?pageSize=NUMBER&pageToken=NEXT_PAGE_TOKEN"

替换以下内容:

  • NUMBER:每页要返回的商品数量。接受的最大值为 1000。
  • NEXT_PAGE_TOKEN:JSON 响应中返回的 nextPageToken 令牌值。

或者,您也可以使用以下脚本将上述 API 请求的分页结果收集到一个文件中。

tempFile=$(mktemp)
nextPageToken=""
while
    curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-python/pythonPackages?pageSize=1000&pageToken=$nextPageToken" > $tempFile
    nextPageToken=$(grep nextPageToken $tempFile | sed 's/  "nextPageToken": "//' | sed 's/.$//')
    grep -v nextPageToken $tempFile >> FILENAME4
    [ -n "$nextPageToken" ]
do
:
done

可选:将主要 Python 软件包名称的排序列表写入 FILENAME5

以下额外的命令行操作会过滤返回的原始 Python 软件包列表,以便仅列出主要软件包名称。

  curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
      "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-python/pythonPackages?pageSize=1000" \
      | grep packageName | sort -f | uniq > FILENAME5

可选:将已排序的 Python 软件包版本列表写入 FILENAME6

以下额外的命令行操作会过滤返回的原始 Python 软件包列表,以便仅显示软件包版本列表。

  curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
      "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/cloud-aoss-python/pythonPackages?pageSize=1000" \
      | grep name | sort -f | uniq >  FILENAME6

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

您可以使用 REST API 列出所有 Go 软件包及其版本。

对于 Assured OSS 的免费层级,请输入以下 HTTP 请求:

curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
"https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/assuredoss-go-free/packages"

对于 Assured OSS 的高级层级,请输入以下 HTTP 请求:

curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
https://artifactregistry.googleapis.com/v1/projects/PROJECT_ID/locations/us/repositories/assuredoss-go/packages

PROJECT_ID 替换为您在设置 Assured OSS 时选择的项目的 ID。

以下是连接到免费层级 Go 代码库的 curl 命令示例:

curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/assuredoss-go-free/packages

该请求会返回类似于以下内容的响应:

{
  "packages": [
    {
      "name": "projects/cloud-aoss/locations/us/repositories/assuredoss-go-free/packages/cloud.google.com%2Fgo%2Fauth",
      "createTime": "2025-08-05T06:04:54.442071Z",
      "updateTime": "2025-08-05T06:04:54.442071Z"
    },
    {
      "name": "projects/cloud-aoss/locations/us/repositories/assuredoss-go-free/packages/cloud.google.com%2Fgo%2Fauth%2Foauth2adapt",
      "createTime": "2025-08-05T06:04:41.242052Z",
      "updateTime": "2025-08-05T06:04:41.242052Z"
    },
    {
      "name": "projects/cloud-aoss/locations/us/repositories/assuredoss-go-free/packages/cloud.google.com%2Fgo%2Fcompute%2Fmetadata",
      "createTime": "2025-08-05T06:05:31.140186Z",
      "updateTime": "2025-08-05T06:05:31.140186Z"
    },
    {
      "name": "projects/cloud-aoss/locations/us/repositories/assuredoss-go-free/packages/cloud.google.com%2Fgo%2Fiam",
      "createTime": "2025-08-05T06:04:54.455300Z",
      "updateTime": "2025-08-05T06:04:54.455300Z"
    },
    {
      "name": "projects/cloud-aoss/locations/us/repositories/assuredoss-go-free/packages/cloud.google.com%2Fgo%2Flogging",
      "createTime": "2025-08-05T06:05:36.186851Z",
      "updateTime": "2025-08-05T06:05:36.186851Z"
    }
  ]
}

如果有许多软件包可用,API 响应可能会进行分页。如果列表不完整,则响应中会返回连续令牌 nextPageTokennextPageToken 表示返回的最后一个结果。 将 nextPageToken 的值传递给后续请求的 pageToken 参数时,系统将从最后一个结果之后开始返回下一页结果。

如需查看下一页结果或增加每页返回的对象数量,请使用以下网址:

"https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/assuredoss-go-free/packages?pageSize=NUMBER&pageToken=NEXT_PAGE_TOKEN"

替换以下内容:

  • NUMBER:每页要返回的商品数量。接受的最大值为 1000。
  • NEXT_PAGE_TOKEN:JSON 响应中返回的 nextPageToken 令牌值。

或者,您也可以使用以下脚本将 API 请求的分页结果收集到一个文件中:

tempFile=$(mktemp)
nextPageToken=""
while
    curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
    "https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/assuredoss-go-free/packages?pageSize=1000&pageToken=$nextPageToken" > $tempFile
    nextPageToken=$(grep nextPageToken $tempFile | sed 's/  "nextPageToken": "//' | sed 's/.$//')
    grep -v nextPageToken $tempFile >> FILENAME7
    [ -n "$nextPageToken" ]
do
:
done

可选:将主要 Go 软件包名称的排序列表写入 FILENAME8

以下操作会过滤返回的 Go 模块原始列表,从而为您提供主软件包名称列表:

curl -X GET -H "Authorization: Bearer "$(gcloud auth application-default print-access-token) \
"https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/assuredoss-go-free/packages?pageSize=1000" \
      | grep name | sort -f | uniq >  FILENAME8

可选:将排序后的 Go 软件包版本列表写入 FILENAME9

虽然无法直接通过 HTTP 请求列出所有 Go 软件包版本,但您可以列出特定 Go 软件包的所有版本。您可以生成所有 Go 软件包版本的完整列表,方法是迭代列出 FILENAME8 中列出的每个 Go 软件包的版本。

以下操作会过滤返回的 Go 软件包版本原始列表,以便为您提供软件包版本列表:

grep -o "packages/.*" FILENAME8 | tr -d '",' | cut -d '/' -f 2 | while read package_name; do curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" https://artifactregistry.googleapis.com/v1/projects/cloud-aoss/locations/us/repositories/assuredoss-go-free/packages/$package_name/versions | grep name | sort -f | uniq >> FILENAME9; done

后续步骤