Skip to content

Commit 066c491

Browse files
author
Frank Natividad
committed
---
yaml --- r: 9435 b: refs/heads/kms-integration c: 86830e5 h: refs/heads/master i: 9433: ea02e04 9431: 3165243
1 parent e10b316 commit 066c491

14 files changed

Lines changed: 134 additions & 37 deletions

File tree

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ refs/tags/v0.42.1: 3d9c15dd66bbe736cfd83b695f805833d7a32299
9191
refs/tags/v0.43.0: af4bfcbcc7c86354b26642d65400ee4accb632a9
9292
refs/heads/add-pubsub-publish-error-handler: 54ac3bf7a1396a71a4ffc350cd409de4dad2d63a
9393
refs/heads/java-release-src-1: 23b4842b1c560f3f1d382de1e0797261307490b4
94-
refs/heads/kms-integration: 47701ed4c644a4c19b99ebe8aaef1e896b533f0d
94+
refs/heads/kms-integration: 86830e59f66d58dcd6a9552510509561a006cf62
9595
refs/tags/v0.44.0: 1c7d06813aa4d2ac948b1ddda591406a2448371f
9696
refs/tags/v0.45.0: 4b4eb52d0823f5335cb8acf54a88bae199e013ae
9797
refs/tags/v0.46.0: 40dfc83a11b2cf2c21bf0f5a7b1e47087cbf0259

branches/kms-integration/google-cloud-storage/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
<dependency>
3030
<groupId>com.google.apis</groupId>
3131
<artifactId>google-api-services-storage</artifactId>
32+
<version>v1-rev125-1.23.0</version>
3233
<scope>compile</scope>
3334
<exclusions>
3435
<exclusion>

branches/kms-integration/google-cloud-storage/src/main/java/com/google/cloud/storage/BlobInfo.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -832,9 +832,8 @@ public ObjectAccessControl apply(Acl acl) {
832832
if (customerEncryption != null) {
833833
storageObject.setCustomerEncryption(customerEncryption.toPb());
834834
}
835-
if (kmsKeyName != null) {
836-
storageObject.setKmsKeyName(kmsKeyName);
837-
}
835+
836+
storageObject.setKmsKeyName(kmsKeyName);
838837
storageObject.setMetadata(pbMetadata);
839838
storageObject.setCacheControl(cacheControl);
840839
storageObject.setContentEncoding(contentEncoding);

branches/kms-integration/google-cloud-storage/src/main/java/com/google/cloud/storage/Bucket.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,9 @@ private Tuple<BlobInfo, Storage.BlobTargetOption> toTargetOption(BlobInfo blobIn
190190
case USER_PROJECT:
191191
return Tuple.of(blobInfo,
192192
Storage.BlobTargetOption.userProject((String) getValue()));
193+
case KMS_KEY_NAME:
194+
return Tuple.of(blobInfo,
195+
Storage.BlobTargetOption.kmsKeyName((String) getValue()));
193196
default:
194197
throw new AssertionError("Unexpected enum value");
195198
}
@@ -274,6 +277,13 @@ public static BlobTargetOption userProject(String userProject) {
274277
return new BlobTargetOption(StorageRpc.Option.USER_PROJECT, userProject);
275278
}
276279

280+
/**
281+
* Returns an option for blob's kms key name.
282+
*/
283+
public static BlobTargetOption kmsKeyName(String kmsKeyName) {
284+
return new BlobTargetOption(StorageRpc.Option.KMS_KEY_NAME, kmsKeyName);
285+
}
286+
277287
static Tuple<BlobInfo, Storage.BlobTargetOption[]> toTargetOptions(
278288
BlobInfo info, BlobTargetOption... options) {
279289
Set<StorageRpc.Option> optionSet =
@@ -345,6 +355,8 @@ private Tuple<BlobInfo, Storage.BlobWriteOption> toWriteOption(BlobInfo blobInfo
345355
Storage.BlobWriteOption.encryptionKey((String) value));
346356
case USER_PROJECT:
347357
return Tuple.of(blobInfo, Storage.BlobWriteOption.userProject((String) value));
358+
case KMS_KEY_NAME:
359+
return Tuple.of(blobInfo, Storage.BlobWriteOption.kmsKeyName((String) value));
348360
default:
349361
throw new AssertionError("Unexpected enum value");
350362
}
@@ -470,6 +482,13 @@ public static BlobWriteOption userProject(String userProject) {
470482
return new BlobWriteOption(Storage.BlobWriteOption.Option.USER_PROJECT, userProject);
471483
}
472484

485+
/**
486+
* Returns an option for blob's kms key name.
487+
*/
488+
public static BlobWriteOption kmsKeyName(String kmsKeyName) {
489+
return new BlobWriteOption(Storage.BlobWriteOption.Option.KMS_KEY_NAME, kmsKeyName);
490+
}
491+
473492
static Tuple<BlobInfo, Storage.BlobWriteOption[]> toWriteOptions(
474493
BlobInfo info, BlobWriteOption... options) {
475494
Set<Storage.BlobWriteOption.Option> optionSet =

branches/kms-integration/google-cloud-storage/src/main/java/com/google/cloud/storage/BucketInfo.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,8 @@ public Builder setLabels(Map<String, String> labels) {
595595

596596
@Override
597597
public Builder setDefaultKmsKeyName(String defaultKmsKeyName) {
598-
this.defaultKmsKeyName = defaultKmsKeyName;
598+
this.defaultKmsKeyName = defaultKmsKeyName != null
599+
? new String(defaultKmsKeyName) : Data.<String>nullOf(String.class);
599600
return this;
600601
}
601602

@@ -880,9 +881,9 @@ public Rule apply(DeleteRule deleteRule) {
880881
if (labels != null) {
881882
bucketPb.setLabels(labels);
882883
}
883-
// default kms key name can be null.
884-
bucketPb.setEncryption(new Encryption().setDefaultKmsKeyName(defaultKmsKeyName));
885-
884+
if (defaultKmsKeyName != null) {
885+
bucketPb.setEncryption(new Encryption().setDefaultKmsKeyName(defaultKmsKeyName));
886+
}
886887
return bucketPb;
887888
}
888889

branches/kms-integration/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static com.google.common.base.Preconditions.checkArgument;
2020
import static com.google.common.base.Preconditions.checkNotNull;
2121

22+
import com.google.api.client.util.Data;
2223
import com.google.api.core.BetaApi;
2324
import com.google.api.gax.paging.Page;
2425
import com.google.auth.ServiceAccountSigner;
@@ -94,7 +95,7 @@ enum BucketField implements FieldSelector {
9495
CORS("cors"),
9596
STORAGE_CLASS("storageClass"),
9697
ETAG("etag"),
97-
DEFAULT_KMS_KEY_NAME("defaultKmsKeyName"),
98+
ENCRYPTION("encryption"),
9899
BILLING("billing");
99100

100101
static final List<? extends FieldSelector> REQUIRED_FIELDS = ImmutableList.of(NAME);
@@ -207,6 +208,15 @@ public static BucketTargetOption metagenerationNotMatch() {
207208
public static BucketTargetOption userProject(String userProject) {
208209
return new BucketTargetOption(StorageRpc.Option.USER_PROJECT, userProject);
209210
}
211+
212+
// /**
213+
// * Returns an option to define the defaultKmsKeyName.
214+
// */
215+
// public static BucketTargetOption defaultKmsKeyName(String defaultKmsKeyName) {
216+
// defaultKmsKeyName = defaultKmsKeyName != null
217+
// ? new String(defaultKmsKeyName) : Data.<String>nullOf(String.class);
218+
// return new BucketTargetOption(StorageRpc.Option.KMS_KEY_NAME, defaultKmsKeyName);
219+
// }
210220
}
211221

212222
/**
@@ -384,6 +394,15 @@ public static BlobTargetOption encryptionKey(String key) {
384394
return new BlobTargetOption(StorageRpc.Option.CUSTOMER_SUPPLIED_KEY, key);
385395
}
386396

397+
/**
398+
* Returns an option to set a KMS key resource name of the blob.
399+
*
400+
* @param kmsKeyName the KMS crypto key resource name
401+
*/
402+
public static BlobTargetOption kmsKeyName(String kmsKeyName) {
403+
return new BlobTargetOption(StorageRpc.Option.KMS_KEY_NAME, kmsKeyName);
404+
}
405+
387406
static Tuple<BlobInfo, BlobTargetOption[]> convert(BlobInfo info, BlobWriteOption... options) {
388407
BlobInfo.Builder infoBuilder = info.toBuilder().setCrc32c(null).setMd5(null);
389408
List<BlobTargetOption> targetOptions = Lists.newArrayListWithCapacity(options.length);
@@ -417,7 +436,7 @@ class BlobWriteOption implements Serializable {
417436

418437
enum Option {
419438
PREDEFINED_ACL, IF_GENERATION_MATCH, IF_GENERATION_NOT_MATCH, IF_METAGENERATION_MATCH,
420-
IF_METAGENERATION_NOT_MATCH, IF_MD5_MATCH, IF_CRC32C_MATCH, CUSTOMER_SUPPLIED_KEY, USER_PROJECT;
439+
IF_METAGENERATION_NOT_MATCH, IF_MD5_MATCH, IF_CRC32C_MATCH, CUSTOMER_SUPPLIED_KEY, USER_PROJECT, KMS_KEY_NAME;
421440

422441
StorageRpc.Option toRpcOption() {
423442
return StorageRpc.Option.valueOf(this.name());
@@ -542,6 +561,10 @@ public static BlobWriteOption encryptionKey(String key) {
542561
public static BlobWriteOption userProject(String userProject) {
543562
return new BlobWriteOption(Option.USER_PROJECT, userProject);
544563
}
564+
565+
public static BlobWriteOption kmsKeyName(String kmsKeyName) {
566+
return new BlobWriteOption(Option.KMS_KEY_NAME, kmsKeyName);
567+
}
545568
}
546569

547570
/**

branches/kms-integration/google-cloud-storage/src/main/java/com/google/cloud/storage/StorageImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,9 +437,11 @@ public CopyWriter copy(final CopyRequest copyRequest) {
437437
RewriteResponse rewriteResponse = runWithRetries(new Callable<RewriteResponse>() {
438438
@Override
439439
public RewriteResponse call() {
440+
440441
return storageRpc.openRewrite(new StorageRpc.RewriteRequest(source, sourceOptions,
441442
copyRequest.overrideInfo(), targetObject, targetOptions,
442443
copyRequest.getMegabytesCopiedPerChunk()));
444+
443445
}
444446
}, getOptions().getRetrySettings(), EXCEPTION_HANDLER, getOptions().getClock());
445447
return new CopyWriter(getOptions(), rewriteResponse);

branches/kms-integration/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/HttpStorageRpc.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,7 @@ public StorageObject get(StorageObject object, Map<Option, ?> options) {
426426
public Bucket patch(Bucket bucket, Map<Option, ?> options) {
427427
Span span = startSpan(HttpStorageRpcSpans.SPAN_NAME_PATCH_BUCKET);
428428
Scope scope = tracer.withSpan(span);
429+
429430
try {
430431
return storage.buckets()
431432
.patch(bucket.getName(), bucket)
@@ -790,6 +791,11 @@ private RewriteResponse rewrite(RewriteRequest req, String token) {
790791
userProject = Option.USER_PROJECT.getString(req.targetOptions);
791792
}
792793

794+
String kmsKeyName = Option.KMS_KEY_NAME.getString(req.targetOptions);
795+
if (kmsKeyName == null) {
796+
kmsKeyName = req.target.getKmsKeyName();
797+
}
798+
793799
Long maxBytesRewrittenPerCall = req.megabytesRewrittenPerCall != null
794800
? req.megabytesRewrittenPerCall * MEGABYTE : null;
795801
Storage.Objects.Rewrite rewrite = storage.objects()
@@ -808,7 +814,9 @@ private RewriteResponse rewrite(RewriteRequest req, String token) {
808814
.setIfMetagenerationNotMatch(Option.IF_METAGENERATION_NOT_MATCH.getLong(req.targetOptions))
809815
.setIfGenerationMatch(Option.IF_GENERATION_MATCH.getLong(req.targetOptions))
810816
.setIfGenerationNotMatch(Option.IF_GENERATION_NOT_MATCH.getLong(req.targetOptions))
811-
.setUserProject(userProject);
817+
.setUserProject(userProject)
818+
.setDestinationKmsKeyName(kmsKeyName);
819+
812820
HttpHeaders requestHeaders = rewrite.getRequestHeaders();
813821
setEncryptionHeaders(requestHeaders, SOURCE_ENCRYPTION_KEY_PREFIX, req.sourceOptions);
814822
setEncryptionHeaders(requestHeaders, ENCRYPTION_KEY_PREFIX, req.targetOptions);

branches/kms-integration/google-cloud-storage/src/main/java/com/google/cloud/storage/spi/v1/StorageRpc.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ enum Option {
5555
VERSIONS("versions"),
5656
FIELDS("fields"),
5757
CUSTOMER_SUPPLIED_KEY("customerSuppliedKey"),
58-
USER_PROJECT("userProject");
58+
USER_PROJECT("userProject"),
59+
KMS_KEY_NAME("kmsKeyName");
5960

6061
private final String value;
6162

branches/kms-integration/google-cloud-storage/src/test/java/com/google/cloud/storage/BlobInfoTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,6 @@ public class BlobInfoTest {
6969
private static final String KMS_KEY_NAME = "projects/p/locations/kr-loc/keyRings/kr/cryptoKeys/key";
7070
private static final StorageClass STORAGE_CLASS = StorageClass.COLDLINE;
7171

72-
// Unit tests include Customer Supplied encryption which may be confusing with the KMS KEY NAME
73-
// as both can't be set at the same time. At least not right now.
7472
private static final BlobInfo BLOB_INFO = BlobInfo.newBuilder("b", "n", GENERATION)
7573
.setAcl(ACL)
7674
.setComponentCount(COMPONENT_COUNT)

0 commit comments

Comments
 (0)