Google Composer无法安装私有Artifacts包



我正在尝试将Google Artifacts中的python包安装到我们的Google Composer环境中。

我遵循了以下步骤:

https://towardsdatascience.com/if-you-are-using-python-and-google-cloud-platform-this-will-simplify-life-for-you-part-2-bef56354fd4c

https://cloud.google.com/composer/docs/how-to/using/installing-python-dependencies#console

gcloud composer environments update test --update-pypi-package testpackage==0.34 --location europe-west2

我从云构建日志中得到了一个非常模糊的错误:

Step 7/11 : RUN bash installer.sh $COMPOSER_PYTHON_VERSION  fail
+ COMPOSER_PYTHON_VERSION=3
+ FAIL_ON_CONFLICT=fail
+ '[' 3 == 3 ']'
+ PYTHON=python3
+ echo 'Installing Python3 Requirements.'
Installing Python3 Requirements.
+ python3 -m pip install -r requirements.txt
Looking in indexes: https://pypi.org/simple, https://europe-west1-python.pkg.dev/gcp-project-name/repo-name/simple/
ERROR: Could not find a version that satisfies the requirement testpackage==0.34 (from -r requirements.txt (line 1)) (from versions: none)
ERROR: No matching distribution found for testpackage==0.34 (from -r requirements.txt (line 1))
The command '/bin/sh -c bash installer.sh $COMPOSER_PYTHON_VERSION  fail' returned a non-zero code: 1
ERROR
ERROR: build step 0 "gcr.io/cloud-builders/docker" failed: step exited with non-zero status: 1

你可以看到它正在增加额外的索引(https://europe-west1-python.pkg.dev/gcp-project-name/repo-name/simple/)从我按照步骤创建的pip.conf文件中,但看起来它甚至没有尝试?因为那样的话,我会得到一个不同的错误。

如果我只在机器上本地测试安装,它可以使用相同的pip.conf设置。我检查了云日志中的所有日志,实际上什么都没有。我看到的只有:

Critical error.
Failed to install pypi packages.

有没有什么地方可以让我找到一个更具描述性的错误呢?

您是否已授予Composer Service Agent服务帐户的权限?这是GCP将用于在您的项目中为Cloud Composer创建资源的服务帐户。

如果此服务帐户无权查看存储库中的工件并从中获取工件,则当您尝试将工件从存储库安装到Cloud Composer环境中时,更新环境将失败。

默认情况下,它具有Cloud Composer API Service Agent角色,其中包括:

  • artifactregistry.repositories.create
  • artifactregistry.repositories.delete
  • artifactregistry.repositories.get
  • artifactregistry.repositories.list
  • artifactregistry.repositories.update

请尝试在项目中授予此服务帐户roles/artifactregistry.reader角色。

Composer服务帐户的文档在这里,您可以在这里查看它附带的角色的权限。

工件注册表的角色和权限在这里。

我最终发现了我遇到的真正问题(在评论Daniel的回答中提到(。这是一个问题,因为(a(需要跨项目访问,以及(b(Composer使用的隐藏服务帐户。

跨项目工件注册表访问

我们需要将IAM成员资格的配置连接器编辑为以下内容:

apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMPolicyMember
metadata:
name: composer-x-prj-dev-artifactregistry-reader
spec:
member: serviceAccount:composer@my-project.iam.gserviceaccount.com
role: roles/artifactregistry.reader
resourceRef:
kind: Project
external: projects/other-project

我认为这会解决问题,因为这是我与Cloud Composer关联的服务帐户。

隐藏的服务帐户

但是,当Cloud Composer正在构建自己时,它不会通过您与其关联的服务帐户来执行此操作。相反,它使用构建代理的服务帐户,而您别无选择,只能使用此构建代理服务帐户

因此,我们需要给予构建代理进一步的访问权限。所以我不得不用正确的服务帐户修复上面的舵图:

apiVersion: iam.cnrm.cloud.google.com/v1beta1
kind: IAMPolicyMember
metadata:
name: composer-x-prj-dev-artifactregistry-reader
spec:
member: serviceAccount:<my-project-NUMBER>@cloudbuild.gserviceaccount.com
role: roles/artifactregistry.reader
resourceRef:
kind: Project
external: projects/other-project

除了列出的成员之外,这与前面的相同。请注意,您不会在IAM控制台或gcloudCLI中的任何位置找到该服务帐户。这是一个隐藏帐户,对于GCP中的任何项目都始终存在,并且该帐户始终为<your_project_NUMBER>@cloudbuild.gserviceaccount.com

相关内容

  • 没有找到相关文章

最新更新