Skip to content

Commit 78c679d

Browse files
author
gitlab
committed
Merge branch 'secret-get@@2' into 'feature-zsv-5.0.0-vm-support-vtpm-and-secuceboot'
<fix>[crypto]: secret get in vm pre instantiate See merge request zstackio/zstack!9582
2 parents e9c1418 + 0cb22fd commit 78c679d

17 files changed

Lines changed: 1029 additions & 42 deletions

File tree

compute/src/main/java/org/zstack/compute/vm/devices/DummyTpmEncryptedResourceKeyBackend.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@ public String findKeyProviderNameByTpm(String tpmUuid) {
3333
return null;
3434
}
3535

36+
@Override
37+
public Integer findKeyVersionByTpm(String tpmUuid) {
38+
return null;
39+
}
40+
3641
@Override
3742
public String defaultKeyProviderUuid() {
3843
return null;

compute/src/main/java/org/zstack/compute/vm/devices/TpmEncryptedResourceKeyBackend.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ public interface TpmEncryptedResourceKeyBackend {
3535
*/
3636
String findKeyProviderNameByTpm(String tpmUuid);
3737

38+
/**
39+
* maybe null (when crypto module is not installed)
40+
*/
41+
Integer findKeyVersionByTpm(String tpmUuid);
42+
3843
/**
3944
* maybe null (when crypto module is not installed)
4045
*/

conf/springConfigXml/Kvm.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,9 @@
256256
<zstack:plugin>
257257
<zstack:extension interface="org.zstack.kvm.KVMStartVmExtensionPoint" />
258258
<zstack:extension interface="org.zstack.header.vm.PreVmInstantiateResourceExtensionPoint" />
259+
<zstack:extension interface="org.zstack.header.vm.VmInstanceMigrateExtensionPoint" />
260+
<zstack:extension interface="org.zstack.header.vm.VmAfterExpungeExtensionPoint" />
261+
<zstack:extension interface="org.zstack.header.vm.VmStateChangedExtensionPoint" />
259262
</zstack:plugin>
260263
</bean>
261264

header/src/main/java/org/zstack/header/keyprovider/EncryptedResourceKeyManager.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ class ResourceKeyResult {
8787
private String resourceType;
8888
private String keyProviderUuid;
8989
private String keyProviderName;
90+
private Integer keyVersion;
9091
private String dekBase64;
9192
private String secretRef;
9293
private boolean createdNewKey;
@@ -124,6 +125,14 @@ public void setKeyProviderName(String keyProviderName) {
124125
this.keyProviderName = keyProviderName;
125126
}
126127

128+
public Integer getKeyVersion() {
129+
return keyVersion;
130+
}
131+
132+
public void setKeyVersion(Integer keyVersion) {
133+
this.keyVersion = keyVersion;
134+
}
135+
127136
public String getDekBase64() {
128137
return dekBase64;
129138
}

header/src/main/java/org/zstack/header/secret/SecretHostDefineMsg.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55
import org.zstack.header.message.NeedReplyMessage;
66

77
/**
8-
* Request to define secret on KVM host (for VM e.g. vTPM). Caller provides plaintext DEK (dekBase64).
9-
* Host seals it with host public key (HPKE) and sends envelope to agent.
10-
* vmUuid, purpose, providerName are required by key-agent for DEK cache key.
8+
* Request to ensure secret on KVM host (for VM e.g. vTPM).
9+
* Caller provides plaintext DEK (dekBase64), then host seals it with host public key
10+
* and forwards the envelope to key-agent.
1111
*/
1212
public class SecretHostDefineMsg extends NeedReplyMessage implements HostMessage {
1313
private String hostUuid;
1414
@NoLogging
1515
private String dekBase64;
1616
private String vmUuid;
1717
private String purpose;
18-
private String providerName;
18+
private Integer keyVersion;
1919
private String description;
2020

2121
@Override
@@ -51,12 +51,12 @@ public void setPurpose(String purpose) {
5151
this.purpose = purpose;
5252
}
5353

54-
public String getProviderName() {
55-
return providerName;
54+
public Integer getKeyVersion() {
55+
return keyVersion;
5656
}
5757

58-
public void setProviderName(String providerName) {
59-
this.providerName = providerName;
58+
public void setKeyVersion(Integer keyVersion) {
59+
this.keyVersion = keyVersion;
6060
}
6161

6262
public String getDescription() {
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.zstack.header.secret;
2+
3+
import org.zstack.header.host.HostMessage;
4+
import org.zstack.header.message.NeedReplyMessage;
5+
6+
public class SecretHostDeleteMsg extends NeedReplyMessage implements HostMessage {
7+
private String hostUuid;
8+
private String vmUuid;
9+
private String purpose;
10+
private Integer keyVersion;
11+
12+
@Override
13+
public String getHostUuid() {
14+
return hostUuid;
15+
}
16+
17+
public void setHostUuid(String hostUuid) {
18+
this.hostUuid = hostUuid;
19+
}
20+
21+
public String getVmUuid() {
22+
return vmUuid;
23+
}
24+
25+
public void setVmUuid(String vmUuid) {
26+
this.vmUuid = vmUuid;
27+
}
28+
29+
public String getPurpose() {
30+
return purpose;
31+
}
32+
33+
public void setPurpose(String purpose) {
34+
this.purpose = purpose;
35+
}
36+
37+
public Integer getKeyVersion() {
38+
return keyVersion;
39+
}
40+
41+
public void setKeyVersion(Integer keyVersion) {
42+
this.keyVersion = keyVersion;
43+
}
44+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.zstack.header.secret;
2+
3+
import org.zstack.header.message.MessageReply;
4+
5+
/** Reply for SecretHostDeleteMsg. */
6+
public class SecretHostDeleteReply extends MessageReply {
7+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.zstack.header.secret;
2+
3+
import org.zstack.header.host.HostMessage;
4+
import org.zstack.header.message.NeedReplyMessage;
5+
6+
/**
7+
* Request to get an existing secret on KVM host by vmUuid, purpose and keyVersion.
8+
*/
9+
public class SecretHostGetMsg extends NeedReplyMessage implements HostMessage {
10+
private String hostUuid;
11+
private String vmUuid;
12+
private String purpose;
13+
private Integer keyVersion;
14+
15+
@Override
16+
public String getHostUuid() {
17+
return hostUuid;
18+
}
19+
20+
public void setHostUuid(String hostUuid) {
21+
this.hostUuid = hostUuid;
22+
}
23+
24+
public String getVmUuid() {
25+
return vmUuid;
26+
}
27+
28+
public void setVmUuid(String vmUuid) {
29+
this.vmUuid = vmUuid;
30+
}
31+
32+
public String getPurpose() {
33+
return purpose;
34+
}
35+
36+
public void setPurpose(String purpose) {
37+
this.purpose = purpose;
38+
}
39+
40+
public Integer getKeyVersion() {
41+
return keyVersion;
42+
}
43+
44+
public void setKeyVersion(Integer keyVersion) {
45+
this.keyVersion = keyVersion;
46+
}
47+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.zstack.header.secret;
2+
3+
import org.zstack.header.message.MessageReply;
4+
5+
/** Reply for SecretHostGetMsg. */
6+
public class SecretHostGetReply extends MessageReply {
7+
public static final String ERROR_CODE_SECRET_NOT_FOUND = "KEY_AGENT_SECRET_NOT_FOUND";
8+
9+
private String secretUuid;
10+
11+
public String getSecretUuid() {
12+
return secretUuid;
13+
}
14+
15+
public void setSecretUuid(String secretUuid) {
16+
this.secretUuid = secretUuid;
17+
}
18+
}

plugin/kvm/src/main/java/org/zstack/kvm/KVMAgentCommands.java

Lines changed: 107 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -410,8 +410,9 @@ public static class SecretHostDefineCmd extends AgentCommand {
410410
private String encryptedDek;
411411
private String vmUuid;
412412
private String purpose;
413-
private String providerName;
413+
private Integer keyVersion;
414414
private String description;
415+
private String usageInstance;
415416

416417
public String getEncryptedDek() {
417418
return encryptedDek;
@@ -437,12 +438,12 @@ public void setPurpose(String purpose) {
437438
this.purpose = purpose;
438439
}
439440

440-
public String getProviderName() {
441-
return providerName;
441+
public Integer getKeyVersion() {
442+
return keyVersion;
442443
}
443444

444-
public void setProviderName(String providerName) {
445-
this.providerName = providerName;
445+
public void setKeyVersion(Integer keyVersion) {
446+
this.keyVersion = keyVersion;
446447
}
447448

448449
public String getDescription() {
@@ -452,6 +453,14 @@ public String getDescription() {
452453
public void setDescription(String description) {
453454
this.description = description;
454455
}
456+
457+
public String getUsageInstance() {
458+
return usageInstance;
459+
}
460+
461+
public void setUsageInstance(String usageInstance) {
462+
this.usageInstance = usageInstance;
463+
}
455464
}
456465

457466
public static class SecretHostDefineResponse extends AgentResponse {
@@ -466,6 +475,99 @@ public void setSecretUuid(String secretUuid) {
466475
}
467476
}
468477

478+
public static class SecretHostGetCmd extends AgentCommand {
479+
private String vmUuid;
480+
private String purpose;
481+
private Integer keyVersion;
482+
private String usageInstance;
483+
484+
public String getVmUuid() {
485+
return vmUuid;
486+
}
487+
488+
public void setVmUuid(String vmUuid) {
489+
this.vmUuid = vmUuid;
490+
}
491+
492+
public String getPurpose() {
493+
return purpose;
494+
}
495+
496+
public void setPurpose(String purpose) {
497+
this.purpose = purpose;
498+
}
499+
500+
public Integer getKeyVersion() {
501+
return keyVersion;
502+
}
503+
504+
public void setKeyVersion(Integer keyVersion) {
505+
this.keyVersion = keyVersion;
506+
}
507+
508+
public String getUsageInstance() {
509+
return usageInstance;
510+
}
511+
512+
public void setUsageInstance(String usageInstance) {
513+
this.usageInstance = usageInstance;
514+
}
515+
}
516+
517+
public static class SecretHostGetResponse extends AgentResponse {
518+
private String secretUuid;
519+
520+
public String getSecretUuid() {
521+
return secretUuid;
522+
}
523+
524+
public void setSecretUuid(String secretUuid) {
525+
this.secretUuid = secretUuid;
526+
}
527+
}
528+
529+
public static class SecretHostDeleteCmd extends AgentCommand {
530+
private String vmUuid;
531+
private String purpose;
532+
private Integer keyVersion;
533+
private String usageInstance;
534+
535+
public String getVmUuid() {
536+
return vmUuid;
537+
}
538+
539+
public void setVmUuid(String vmUuid) {
540+
this.vmUuid = vmUuid;
541+
}
542+
543+
public String getPurpose() {
544+
return purpose;
545+
}
546+
547+
public void setPurpose(String purpose) {
548+
this.purpose = purpose;
549+
}
550+
551+
public Integer getKeyVersion() {
552+
return keyVersion;
553+
}
554+
555+
public void setKeyVersion(Integer keyVersion) {
556+
this.keyVersion = keyVersion;
557+
}
558+
559+
public String getUsageInstance() {
560+
return usageInstance;
561+
}
562+
563+
public void setUsageInstance(String usageInstance) {
564+
this.usageInstance = usageInstance;
565+
}
566+
}
567+
568+
public static class SecretHostDeleteResponse extends AgentResponse {
569+
}
570+
469571
public static class PingCmd extends AgentCommand {
470572
public String hostUuid;
471573
public Map<String, Object> configs;

0 commit comments

Comments
 (0)