2
votes

Trying o build sonatype-nexus-community/nexus-blobstore-google-cloud but cannot succeed without Project Owner iam role in GCP.

If I understand everything correctly Storage Admin IAM role should be sufficient, at least according to the documentation:

https://github.com/sonatype-nexus-community/nexus-blobstore-google-cloud

Also tried Storage Admin + Service Account User + Service Account Token Creator but could not succeed either.

Integration test fails with a message:

org.sonatype.nexus.blobstore.api.BlobStoreException: BlobId: e0eb4ae2-f425-4598-aa42-fc03fb2e53b2, com.google.cloud.datastore.DatastoreException: Missing or insufficient permissions.

In details, the integration test creates a blob storage than tries to delete than undelete it, using two different methods:

  • def "undelete successfully makes blob accessible"
  • def "undelete does nothing when dry run is true"

This is where the issue starts. Execution fails on delete:

assert blobStore.delete(blob.id, 'testing')

It's another question how to undelete something in Google Storage that does not support undelete but versioning only.

_

Here is what the documentation says about permissions:

Google Cloud Storage Permissions

Next, you will need to create an account with appropriate permissions.

Of the predefined account roles, Storage Admin will grant the plugin to > create any Google Cloud Storage Buckets you require and administer all of the objects within, but it will also have access to manage any other Google Cloud Storage Buckets associated with the project.

If you are using custom roles, the account will need:

  1. (required) storage.objects.*
  2. (required) storage.buckets.get
  3. or storage.buckets.*.

Storage Admin IAM role covers both storage.objects.* and storage.buckets.* so not sure what causes the issue.

References:

https://cloud.google.com/storage/docs/access-control/iam-roles https://cloud.google.com/storage/docs/access-control/iam-json

The integration test fails at a blob storage delete attempt:

15:27:10.042 [main] DEBUG o.s.n.b.g.i.GoogleCloudBlobStore - Writing blob 2e22e0e9-1fef-4620-a66e-d672b75ef924 to content/vol-18/chap-33/2e22e0e9-1fef-4620-a66e-d672b75ef924.bytes 15:27:24.430 [main] DEBUG o.s.n.b.g.i.GoogleCloudBlobStore - Soft deleting blob 2e22e0e9-1fef-4620-a66e-d672b75ef924

at

org.sonatype.nexus.blobstore.gcloud.internal.GoogleCloudBlobStoreIT.undelete successfully makes blob accessible(GoogleCloudBlobStoreIT.groovy:164)

Caused by: org.sonatype.nexus.blobstore.api.BlobStoreException: BlobId: 2e22e0e9-1fef-4620-a66e-d672b75ef924, com.google.cloud.datastore.DatastoreException: Missing or insufficient permissions., Cause: Missing or insufficient permissions. ... 1 more

at org.sonatype.nexus.blobstore.gcloud.internal.DeletedBlobIndex.add(DeletedBlobIndex.java:55)

at org.sonatype.nexus.blobstore.gcloud.internal.GoogleCloudBlobStore.delete(GoogleCloudBlobStore.java:276)

Could you please help me out if I overlook something?

1

1 Answers

1
votes

A Datastore database needs to be created and Datastore Owner role need to be added besides Storage Admin, Service Account User, and Service Account Token Creator