Вызвано: com.google.api.client.googleapis.json.GoogleJsonResponseException: 412 Не удалось выполнить предварительное условие при удалении члена IAM группы. - PullRequest
0 голосов
/ 27 июня 2019

Чтобы удалить удостоверения из облачного хранилища Google, я использую пример, приведенный в репозитории примеров GCP: здесь .Мне интересно, есть ли что-то, чего мне не хватает, у меня есть правильные учетные данные root для учетной записи в облаке, а также учетные данные владельца проекта.

Вот исходная политика:

Policy{
bindings={roles/storage.legacyBucketOwner=[projectOwner:myaccount], 
roles/storage.objectAdmin=[serviceAccount:company-kiehn- 
log@myaccount.iam.gserviceaccount.com, serviceAccount:company-hammes- 
file@myaccount.iam.gserviceaccount.com, serviceAccount:company-howe- 
log@myaccount.iam.gserviceaccount.com, serviceAccount:company-doyle- 
log@myaccount.iam.gserviceaccount.com, serviceAccount:customer-6a53ee71-95eb- 
49b2-8a@myaccount.iam.gserviceaccount.com, serviceAccount:company-kiehn- 
file@myaccount.iam.gserviceaccount.com, serviceAccount:company-howe- 
file@myaccount.iam.gserviceaccount.com, serviceAccount:company-satterfield- 
log@myaccount.iam.gserviceaccount.com, serviceAccount:customer-0c1e8536-8bf5- 
46f4-8e@myaccount.iam.gserviceaccount.com, serviceAccount:company-deckow- 
log@myaccount.iam.gserviceaccount.com], 
roles/storage.legacyBucketReader=[projectViewer:myaccount], 
roles/storage.objectViewer=[serviceAccount:company-block- 
log@myaccount.iam.gserviceaccount.com]},
etag=CGg=,
version=0}

Вот мой фрагмент кода:

Чтение политики корзины и извлечение нежелательных идентификаторов

Set<Identity> wrongIdentities = new HashSet<Identity>();
Role roler = null;    
Policy p = Cache.GCSStorage.getIamPolicy("bucketxyz");
Map<Role, Set<Identity>> policyBindings = p.getBindings();
        for (Map.Entry<Role, Set<Identity>> entry : policyBindings.entrySet()) {
Set<Identity> setidentities = entry.getValue();
                for (Identity set : setidentities) {
                    if (!(entry.getKey().getValue()
                            .equals("serviceAccount:attss@myaccount.iam.gserviceaccount.com"))) {

                        wrongIdentities.add(set);
                    }
 }
for (Identity identity : wrongIdentities) {

            System.out.println("identity: " + identity);
            System.out.println(removeBucketIamMember("bucektxyz",
                    roler, identity, p));
        }
}

Удалите нежелательные удостоверения из политики

public static Policy removeBucketIamMember(String bucketName, Role role, 
Identity identity, Policy policy) {
Policy updatedPolicy = Cache.GCSStorage.setIamPolicy(bucketName,
policy.toBuilder().removeIdentity(role, identity).build());
return updatedPolicy;

Однако я вижу ошибку:

Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 412 
Precondition Failed
{
   "code" : 412,
   "errors" : [ {
   "domain" : "global",
   "location" : "If-Match",
   "locationType" : "header",
   "message" : "Precondition Failed",
   "reason" : "conditionNotMet"
 } ],
   "message" : "Precondition Failed"
 }

at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:146)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at com.google.cloud.storage.spi.v1.HttpStorageRpc.setIamPolicy(HttpStorageRpc.java:886)
... 9 more

1 Ответ

2 голосов
/ 27 июня 2019

При изменении политики хранилища облачных хранилищ или IAM объекта важно сначала прочитать политику. В рамках политики содержание представляет собой тег. Обновленная политика должна включать тот же тег. Тег выглядит так: etag=CGg=.

В этом вопросе обновление политики завершилось неудачно с ошибкой HTTP 412 Precondition Failed. Это сообщение вызвано тем, что тег политики неверен. Поскольку обновление политики заменяет существующую политику, этот тег помогает предотвратить перезапись друг друга двумя обновлениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...