2828import com .google .api .services .cloudkms .v1beta1 .model .KeyRing ;
2929import com .google .api .services .cloudkms .v1beta1 .model .ListCryptoKeyVersionsResponse ;
3030import com .google .api .services .cloudkms .v1beta1 .model .ListCryptoKeysResponse ;
31+ import com .google .api .services .cloudkms .v1beta1 .model .ListKeyRingsResponse ;
3132import com .google .api .services .cloudkms .v1beta1 .model .Policy ;
3233import com .google .api .services .cloudkms .v1beta1 .model .SetIamPolicyRequest ;
3334
@@ -114,6 +115,30 @@ public static CryptoKey createCryptoKey(String projectId, String ringId, String
114115 return createdKey ;
115116 }
116117
118+ /**
119+ * Creates a new crypto key version for the given id.
120+ */
121+ public static void createCryptoKeyVersion (
122+ String projectId , String ringId , String keyId ) throws IOException {
123+ String location = "global" ;
124+ // Create the Cloud KMS client.
125+ CloudKMS kms = createAuthorizedClient ();
126+
127+ // The resource name of the cryptoKey
128+ String cryptoKeys = String .format (
129+ "projects/%s/locations/%s/keyRings/%s/cryptoKeys/%s" ,
130+ projectId , location , ringId , keyId );
131+
132+ CryptoKeyVersion version = new CryptoKeyVersion ();
133+
134+ CryptoKeyVersion newVersion = kms .projects ().locations ().keyRings ().cryptoKeys ()
135+ .cryptoKeyVersions ()
136+ .create (cryptoKeys , version )
137+ .execute ();
138+
139+ System .out .println (newVersion );
140+ }
141+
117142 /**
118143 * Disables the given version of the crypto key.
119144 */
@@ -263,11 +288,12 @@ public static Policy addMemberToCryptoKeyPolicy(
263288 iamPolicy .setBindings (bindings );
264289
265290 // Set the new IAM Policy.
266- Policy newIamPolicy = kms .projects ().locations ().keyRings ().cryptoKeys ()
291+ Policy newIamPolicy = kms .projects ().locations ().keyRings ()
292+ .cryptoKeys ()
267293 .setIamPolicy (cryptoKey , new SetIamPolicyRequest ().setPolicy (iamPolicy ))
268294 .execute ();
269295
270- System .out .println (newIamPolicy );
296+ System .out .println ("Response: " + newIamPolicy );
271297 return newIamPolicy ;
272298 }
273299
@@ -320,11 +346,12 @@ public static Policy addMemberToKeyRingPolicy(
320346 iamPolicy .setBindings (bindings );
321347
322348 // Set the new IAM Policy.
323- Policy newIamPolicy = kms .projects ().locations ().keyRings ()
349+ Policy newIamPolicy = kms .projects ().locations ()
350+ .keyRings ()
324351 .setIamPolicy (keyring , new SetIamPolicyRequest ().setPolicy (iamPolicy ))
325352 .execute ();
326353
327- System .out .println (newIamPolicy );
354+ System .out .println ("Response: " + newIamPolicy );
328355 return newIamPolicy ;
329356 }
330357
@@ -346,21 +373,26 @@ public static Policy removeMemberFromCryptoKeyPolicy(
346373 // Get the current IAM policy and add the new account to it.
347374 Policy iamPolicy = getCryptoKeyPolicy (projectId , ringId , keyId );
348375
349- List <Binding > bindings = iamPolicy .getBindings ();
376+ if (null == iamPolicy .getBindings ()) {
377+ // Nothing to remove
378+ return null ;
379+ }
380+
350381 // Filter out the given member
351- for (Binding b : bindings ) {
382+ for (Binding b : iamPolicy . getBindings () ) {
352383 if (role .equals (b .getRole ()) && b .getMembers ().contains (member )) {
353- b .getMembers ().remove ( member );
384+ b .getMembers ().removeAll ( Collections . singletonList ( member ) );
354385 break ;
355386 }
356387 }
357388
358389 // Set the new IAM Policy.
359- Policy newIamPolicy = kms .projects ().locations ().keyRings ().cryptoKeys ()
390+ Policy newIamPolicy = kms .projects ().locations ().keyRings ()
391+ .cryptoKeys ()
360392 .setIamPolicy (cryptoKey , new SetIamPolicyRequest ().setPolicy (iamPolicy ))
361393 .execute ();
362394
363- System .out .println (newIamPolicy );
395+ System .out .println ("Response: " + newIamPolicy );
364396 return newIamPolicy ;
365397 }
366398
@@ -382,24 +414,54 @@ public static Policy removeMemberFromKeyRingPolicy(
382414 // Get the current IAM policy and add the new account to it.
383415 Policy iamPolicy = getKeyRingPolicy (projectId , ringId );
384416
385- List <Binding > bindings = iamPolicy .getBindings ();
386417 // Filter out the given member
387- for (Binding b : bindings ) {
418+ for (Binding b : iamPolicy . getBindings () ) {
388419 if (role .equals (b .getRole ()) && b .getMembers ().contains (member )) {
389420 b .getMembers ().remove (member );
390421 break ;
391422 }
392423 }
393424
394425 // Set the new IAM Policy.
395- Policy newIamPolicy = kms .projects ().locations ().keyRings ().cryptoKeys ()
426+ Policy newIamPolicy = kms .projects ().locations ()
427+ .keyRings ()
396428 .setIamPolicy (cryptoKey , new SetIamPolicyRequest ().setPolicy (iamPolicy ))
397429 .execute ();
398430
399- System .out .println (newIamPolicy );
431+ System .out .println ("Response: " + newIamPolicy );
400432 return newIamPolicy ;
401433 }
402434
435+ /**
436+ * Prints all the keyrings in the given project.
437+ */
438+ public static void listKeyRings (String projectId ) throws IOException {
439+ String location = "global" ;
440+ // Create the Cloud KMS client.
441+ CloudKMS kms = createAuthorizedClient ();
442+
443+ // The resource name of the cryptoKey
444+ String keyRingPath = String .format (
445+ "projects/%s/locations/%s" ,
446+ projectId , location );
447+
448+ // Make the RPC call
449+ ListKeyRingsResponse response = kms .projects ().locations ()
450+ .keyRings ()
451+ .list (keyRingPath )
452+ .execute ();
453+
454+ // Print the returned key rings
455+ if (null != response .getKeyRings ()) {
456+ System .out .println ("Key Rings: " );
457+ for (KeyRing keyRing : response .getKeyRings ()) {
458+ System .out .println (keyRing .getName ());
459+ }
460+ } else {
461+ System .out .println ("No keyrings defined." );
462+ }
463+ }
464+
403465 /**
404466 * Prints all the keys in the given key ring.
405467 */
0 commit comments