【发布时间】:2019-06-08 12:18:30
【问题描述】:
尝试构建 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 Buckets 并管理其中的所有对象,但它也有权管理与项目。
如果您使用自定义角色,该帐户将需要:
- (必需) storage.objects.*
- (必需) storage.buckets.get
- 或 storage.buckets.*。
Storage Admin 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] 调试 o.s.n.b.g.i.GoogleCloudBlobStore - 将 blob 2e22e0e9-1fef-4620-a66e-d672b75ef924 写入 content/vol-18/chap-33/2e22e0e9-1fef-4620-a66e-d672b75ef924 字节。 15:27:24.430 [main] DEBUG o.s.n.b.g.i.GoogleCloudBlobStore - 软删除 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: 权限缺失或不足,原因: 权限缺失或不足。 ... 1 更多
在 org.sonatype.nexus.blobstore.gcloud.internal.DeletedBlobIndex.add(DeletedBlobIndex.java:55)
在 org.sonatype.nexus.blobstore.gcloud.internal.GoogleCloudBlobStore.delete(GoogleCloudBlobStore.java:276)
如果我遗漏了什么,你能帮帮我吗?
【问题讨论】:
标签: google-cloud-platform nexus nexus3 google-iam google-cloud-iam