2016-04-18 10 views
3

Im AWS Java SDK 1.10.69, kann ich eine Instanz starten und EBS Volume-Zuordnungen für die Instanz angeben:AWS Java SDK: Angeben von KMS Key-ID für EBS

RunInstancesRequest runInstancesRequest = new RunInstancesRequest(); 

    String userDataString = Base64.encodeBase64String(userData.toString().getBytes()); 

    runInstancesRequest 
      .withImageId(machineImageId) 
      .withInstanceType(instanceType.toString()) 
      .withMinCount(minCount) 
      .withMaxCount(maxCount) 
      .withKeyName(sshKeyName) 
      .withSecurityGroupIds(securityGroupIds) 
      .withSubnetId(subnetId) 
      .withUserData(userDataString) 
      .setEbsOptimized(true); 


    final EbsBlockDevice ebsBlockDevice = new EbsBlockDevice(); 
    ebsBlockDevice.setDeleteOnTermination(true); 
    ebsBlockDevice.setVolumeType(VolumeType.Gp2); 
    ebsBlockDevice.setVolumeSize(256); 
    ebsBlockDevice.setEncrypted(true); 

    final BlockDeviceMapping mapping = new BlockDeviceMapping(); 
    mapping.setDeviceName("/dev/sdb"); 
    mapping.setEbs(ebsBlockDevice); 

Es scheint, dass zur Zeit kann ich nur Aktivieren/deaktivieren Sie die Verschlüsselung auf dem Volume und geben Sie nicht an, welcher KMS-Kundenstammschlüssel für das Volume verwendet werden soll.

Gibt es einen Weg um dies?

Antwort

2

Edit: meine andere Antwort unten (https://stackoverflow.com/a/47602790/7692970) für die viel einfachere Lösung jetzt

Sehen Sie einen Kunden Master Key (CMK) für ein EBS-Datenträger für eine Instanz angeben möchten, müssen Sie die RunInstancesRequest mit einem Mähdrescher CreateVolumeRequest und ein AttachVolumeRequest. Wenn Sie andernfalls true für die Verschlüsselung auf EbsBlockDevice angeben, wird das Standard-CMK verwendet.

Zuerst erstellen Sie die Instanz (en), ohne die EBS-Volumina in der Blockgerätezuordnung der RunInstancesRequest anzugeben, dann separat , dann attach them.

CreateVolumeRequest hat withKmsKeyId()/setKmsKeyId() Optionen.

Zum Beispiel Code Aktualisierung könnte wie folgt aussehen:

RunInstancesRequest runInstancesRequest = new RunInstancesRequest(); 

String userDataString = Base64.encodeBase64String(userData.toString().getBytes()); 

runInstancesRequest 
     .withImageId(machineImageId) 
     .withInstanceType(instanceType.toString()) 
     .withMinCount(minCount) 
     .withMaxCount(maxCount) 
     .withKeyName(sshKeyName) 
     .withSecurityGroupIds(securityGroupIds) 
     .withSubnetId(subnetId) 
     .withUserData(userDataString) 
     .setEbsOptimized(true); 
RunInstancesResult runInstancesResult = ec2Client.runInstances(runInstancesRequest); 

for (Instance instance : runInstancesResult.getReservation()) { 
    CreateVolumeRequest volumeRequest = new CreateVolumeRequest() 
      .withAvailabilityZone(instance.getPlacement().getAvailabilityZone()) 
      .withKmsKeyId(/* CMK id or alias/yourkeyaliashere */) 
      .withEncrypted(true) 
      .withSize(256) 
      .withVolumeType(VolumeType.Gp2); 
    CreateVolumeResult volumeResult = ec2Client.createVolume(volumeRequest); 
    AttachVolumeRequest attachRequest = new AttachVolumeRequest() 
      .withDevice("/dev/sdb") 
      .withInstanceId(instance.getInstanceId()) 
      .withVolumeId(volumeResult.getVolume().getVolumeId()); 
    ec2Client.attachVolume(attachRequest); 
} 

Hinweis: Wenn Sie die Verwendung der Blockgerätezuordnung in Beispiel Metadaten machen, ist es nicht aktualisiert, wenn Sie einen Volume zu einer laufenden Instanz anhänge . Um es auf den neuesten Stand zu bringen, können Sie die Instanz stoppen/starten.

0

Gute Nachrichten! AWS hat soeben die Möglichkeit hinzugefügt, beim Starten von Instanzen CMK-Schlüssel-IDs in der Blockgerätezuordnung anzugeben.

https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ec2/model/EbsBlockDevice.html#setKmsKeyId-java.lang.String-

Dies wurde in Version 1.11.237 auf die AWS Java SDK hinzugefügt.

daher in Ihrem ursprünglichen Code, den Sie jetzt fügen Sie einfach

ebsBlockDevice.setKmsKeyId(keyId); 

wo keyId ein CMK alias (in Form alias/<alias name>), Schlüssel-ID (sieht aus wie 1234abcd-12ab-34cd-56ef-1234567890ab) oder Voll CMK ARN (arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab) sein kann.