google-cloud-platform - sonatype-nexus-community/nexus-blobstore-google-cloud 的 GCP IAM 角色
问题描述
尝试构建 sonatype-nexus-community/nexus-blobstore-google-cloud 但如果没有 GCP 中的项目所有者 iam 角色就无法成功。
如果我正确理解所有内容,至少根据文档,存储管理员 IAM 角色就足够了:
https://github.com/sonatype-nexus-community/nexus-blobstore-google-cloud
还尝试了存储管理员 + 服务帐户用户 + 服务帐户令牌创建者,但也无法成功。
集成测试失败并显示一条消息:
org.sonatype.nexus.blobstore.api.BlobStoreException:BlobId:e0eb4ae2-f425-4598-aa42-fc03fb2e53b2,com.google.cloud.datastore.DatastoreException:缺少权限或权限不足。
详细地说,集成测试使用两种不同的方法创建一个 Blob 存储,然后尝试删除它而不是取消删除它:
- def "取消删除成功使 blob 可访问"
- def "当空运行为真时,取消删除什么都不做"
这就是问题开始的地方。删除时执行失败:
断言 blobStore.delete(blob.id, 'testing')
另一个问题是如何取消删除 Google Storage 中不支持取消删除但仅支持版本控制的内容。
_
以下是文档中有关权限的内容:
谷歌云存储权限
接下来,您将需要创建一个具有适当权限的帐户。
在预定义的帐户角色中,Storage Admin 将授予插件 > 创建您需要的任何 Google Cloud Storage Bucket 并管理其中的所有对象,但它也有权管理与项目关联的任何其他 Google Cloud Storage Bucket。
如果您使用自定义角色,该帐户将需要:
- (必需) storage.objects.*
- (必需) storage.buckets.get
- 或 storage.buckets.*。
存储管理员 IAM 角色涵盖 storage.objects.* 和 storage.buckets.*,因此不确定导致问题的原因。
参考:
https://cloud.google.com/storage/docs/access-control/iam-roles https://cloud.google.com/storage/docs/access-control/iam-json
集成测试在 blob 存储删除尝试时失败:
15:27:10.042 [main] 调试 osnbgiGoogleCloudBlobStore - 将 blob 2e22e0e9-1fef-4620-a66e-d672b75ef924 写入 content/vol-18/chap-33/2e22e0e9-1fef-4620-a66e-d672b75ef924.44.bytes 15:27:2 main] 调试 osnbgiGoogleCloudBlobStore - 软删除 blob 2e22e0e9-1fef-4620-a66e-d672b75ef924
在
org.sonatype.nexus.blobstore.gcloud.internal.GoogleCloudBlobStoreIT.undelete 成功使 blob 可访问(GoogleCloudBlobStoreIT.groovy:164)
引起:org.sonatype.nexus.blobstore.api.BlobStoreException: BlobId: 2e22e0e9-1fef-4620-a66e-d672b75ef924, com.google.cloud.datastore.DatastoreException: Missing or enough permissions., Cause: 缺少权限或权限不足。 ... 1 更多
在 org.sonatype.nexus.blobstore.gcloud.internal.DeletedBlobIndex.add(DeletedBlobIndex.java:55)
在 org.sonatype.nexus.blobstore.gcloud.internal.GoogleCloudBlobStore.delete(GoogleCloudBlobStore.java:276)
如果我忽略了什么,你能帮我吗?
解决方案
除了Storage Admin、Service Account User和Service Account Token Creator之外,还需要创建 Datastore 数据库并添加Datastore Owner角色
推荐阅读
- azure - 是否可以将 Azure AD Web 应用程序的应用程序 API 权限限制为一个帐户?
- webhooks - 如何使用 webhook 开发国际 Slack 应用程序?
- sh - 如果 elasticsearch 服务也停止了,Shell 脚本会停止 tomcat 服务
- roslyn - 从 TICS 分析中排除 .cpp 文件
- javascript - PIPE被多次调用,我怎样才能让它只被调用一次?
- swiftui - viewModel 和 TextField 的问题
- javascript - 如何通过 USER ID 和@Mention 发送 DM 消息?
- c - Eclipse 调试错误“无法识别解释器‘mi2’”
- javascript - 当输入字段不为空且复选框选中时启用提交按钮
- vue.js - VueJS / NuxtJS 访问对象