Serverseitige Verschlüsselung mit verwalteten Amazon S3 S3-Schlüsseln (SSE-S3) angeben - Amazon Simple Storage Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Serverseitige Verschlüsselung mit verwalteten Amazon S3 S3-Schlüsseln (SSE-S3) angeben

Wichtig

Amazon S3 wendet jetzt serverseitige Verschlüsselung mit von Amazon S3 verwalteten Schlüsseln (SSE-S3) als Basisverschlüsselungsebene für jeden Bucket in Amazon S3 an. Ab dem 5. Januar 2023 werden alle neuen Objekt-Uploads auf Amazon S3 ohne zusätzliche Kosten und ohne Auswirkungen auf die Leistung automatisch verschlüsselt. Der automatische Verschlüsselungsstatus für die Standardverschlüsselungskonfiguration des S3-Buckets und für das Hochladen neuer Objekte ist verfügbar in AWS CloudTrail Logs, S3 Inventory, S3 Storage Lens, die Amazon S3 S3-Konsole und als zusätzlicher Amazon S3 API S3-Antwort-Header in der AWS Command Line Interface and AWS SDKs. Weitere Informationen finden Sie unter Standardverschlüsselung FAQ.

Für alle Amazon-S3-Buckets ist die Verschlüsselung standardmäßig konfiguriert und alle neuen Objekte, die in einen S3-Bucket hochgeladen werden, werden im Ruhezustand automatisch verschlüsselt. Die serverseitige Verschlüsselung mit von Amazon S3 verwalteten Schlüsseln (SSE-S3) ist die Standardverschlüsselungskonfiguration für jeden Bucket in Amazon S3. Um einen anderen Verschlüsselungstyp zu verwenden, können Sie entweder die Art der serverseitigen Verschlüsselung angeben, die in Ihren S3-PUT-Anfragen verwendet werden soll, oder Sie können die Standardverschlüsselungskonfiguration im Ziel-Bucket festlegen.

Wenn Sie in Ihren PUT Anfragen einen anderen Verschlüsselungstyp angeben möchten, können Sie die serverseitige Verschlüsselung mit verwenden AWS Key Management Service (AWS KMS) Schlüssel (SSE-KMS), zweischichtige serverseitige Verschlüsselung mit AWS KMS Schlüssel (DSSE-KMS) oder serverseitige Verschlüsselung mit vom Kunden bereitgestellten Schlüsseln (-C). SSE Wenn Sie im Ziel-Bucket eine andere Standardverschlüsselungskonfiguration festlegen möchten, können Sie - oder SSE - KMS verwenden. DSSE KMS

Sie können SSE -S3 mithilfe der S3-Konsole angeben, REST APIs AWS SDKs, und AWS Command Line Interface (AWS CLI). Weitere Informationen finden Sie unterEinstellen des Verhaltens der serverseitigen Verschlüsselung für Amazon S3-Buckets.

In diesem Thema wird beschrieben, wie Sie den Verschlüsselungstyp für ein Objekt mithilfe des AWS Management Console. Wenn Sie ein Objekt mithilfe der Konsole kopieren, kopiert Amazon S3 das Objekt unverändert. Wenn das Quellobjekt verschlüsselt ist, wird das Zielobjekt demnach ebenfalls verschlüsselt. Sie können mit der Konsole die Verschlüsselung für ein Objekt hinzufügen oder ändern.

Anmerkung
  • Wenn Sie die Verschlüsselung eines Objekts ändern, wird ein neues Objekt erstellt, um das alte zu ersetzen. Wenn S3-Versioning aktiviert ist, wird eine neue Version des Objekts erstellt, und das vorhandene Objekt wird zu einer älteren Version. Die Rolle, die die Eigenschaft ändert, wird auch Besitzer des neuen Objekts (oder der neuen Objektversion).

  • Wenn Sie den Verschlüsselungstyp für ein Objekt mit benutzerdefinierten Tags ändern, benötigen Sie die entsprechende s3:GetObjectTagging Genehmigung. Wenn Sie den Verschlüsselungstyp für ein Objekt ändern, das keine benutzerdefinierten Tags hat, aber eine Größe von mehr als 16 MB hat, benötigen Sie auch die s3:GetObjectTagging entsprechende Genehmigung.

    Wenn die Ziel-Bucket-Richtlinie die s3:GetObjectTagging Aktion ablehnt, wird der Verschlüsselungstyp für das Objekt aktualisiert, aber die benutzerdefinierten Tags werden aus dem Objekt entfernt, und Sie erhalten eine Fehlermeldung.

So ändern Sie die Verschlüsselung für ein Objekt
  1. Melden Sie sich an bei AWS Management Console und öffnen Sie die Amazon S3 S3-Konsole unter https://console.aws.amazon.com/s3/.

  2. Wählen Sie im linken Navigationsbereich Buckets aus.

  3. Wählen Sie in der Liste Buckets den Namen des Buckets aus, der das Objekt enthält.

  4. Wählen Sie in der Liste Objekte den Namen des Objekts aus, für das Sie eine Verschlüsselung hinzufügen oder ändern möchten.

    Die Detailseite des Objekts wird angezeigt. Sie enthält mehrere Abschnitte mit den Eigenschaften des Objekts.

  5. Wählen Sie die Registerkarte Eigenschaften aus.

  6. Scrollen Sie nach unten zum Abschnitt Serverseitige Verschlüsselungseinstellungen und wählen Sie dann Bearbeiten aus.

  7. Wählen Sie unter Verschlüsselungseinstellungen die Option Verwenden von Bucket-Einstellungen für die Standardverschlüsselung oder Überschreiben der Bucket-Einstellungen für die Standardverschlüsselung aus.

  8. Wenn Sie Überschreiben der Bucket-Einstellungen für die Standardverschlüsselung ausgewählt haben, konfigurieren Sie die folgenden Verschlüsselungseinstellungen.

    1. Wählen Sie unter Verschlüsselungstyp die Option Amazon S3 Managed Keys (SSE-S3) aus. SSE-S3 verwendet eine der stärksten Blockchiffren — den 256-Bit-Advanced Encryption Standard (-256), um jedes Objekt zu verschlüsseln. AES Weitere Informationen finden Sie unter Serverseitige Verschlüsselung mit verwalteten Amazon S3 S3-Schlüsseln verwenden (SSE-S3).

  9. Wählen Sie Save Changes (Änderungen speichern).

Anmerkung

Diese Aktion wendet auf alle angegebenen Objekte Verschlüsselung an. Warten Sie beim Verschlüsseln von Ordnern, bis die Speicheroperation abgeschlossen ist, bevor Sie dem Ordner neue Objekte hinzufügen.

Zum Zeitpunkt der Objekterstellung, d. h. wenn Sie ein neues Objekt hochladen oder eine Kopie eines vorhandenen Objekts erstellen, können Sie angeben, ob Amazon S3 Ihre Daten mit Amazon S3-verwalteten Schlüsseln (SSE-S3) verschlüsseln soll, indem Sie der Anfrage den Header hinzufügen. x-amz-server-side-encryption Setzen Sie den Wert des Headers auf den Verschlüsselungsalgorithmus AES256, den Amazon S3 unterstützt. Amazon S3 bestätigt, dass Ihr Objekt mit SSE -S3 gespeichert ist, indem es den Antwort-Header x-amz-server-side-encryption zurückgibt.

Die folgenden REST API Upload-Operationen akzeptieren den x-amz-server-side-encryption Anforderungsheader.

Wenn Sie große Objekte mithilfe des mehrteiligen API Upload-Vorgangs hochladen, können Sie die serverseitige Verschlüsselung angeben, indem Sie den x-amz-server-side-encryption Header zur Anforderung Multipart Upload initiieren hinzufügen. Beim Kopieren eines vorhandenen Objekts wird das Zielobjekt unabhängig davon, ob das Quellobjekt verschlüsselt ist, nur dann verschlüsselt, wenn Sie die serverseitige Verschlüsselung explizit anfordern.

Die Antwortheader der folgenden REST API Operationen geben den Header zurück, wenn ein Objekt mit x-amz-server-side-encryption -S3 gespeichert wird. SSE

Anmerkung

Senden Sie keine Header für GET Verschlüsselungsanforderungen für Anfragen und HEAD Anfragen, wenn Ihr Objekt SSE -S3 verwendet. Andernfalls erhalten Sie HTTP den Statuscode 400 (Bad Request).

Bei der Verwendung AWS SDKs, können Sie Amazon S3 auffordern, serverseitige Verschlüsselung mit von Amazon S3 verwalteten Verschlüsselungsschlüsseln (SSE-S3) zu verwenden. Dieser Abschnitt enthält Beispiele für die Verwendung von AWS SDKsin mehreren Sprachen. Informationen zu anderen SDKs finden Sie unter Beispielcode und Bibliotheken.

Java

Wenn Sie das verwenden AWS SDK for Java um ein Objekt hochzuladen, können Sie es mit SSE -S3 verschlüsseln. Um eine serverseitige Verschlüsselung anzufordern, legen Sie mit der ObjectMetadata-Eigenschaft der PutObjectRequest den Anforderungs-Header x-amz-server-side-encryption fest. Wenn Sie die Methode putObject() des AmazonS3Client-Clients aufrufen, verschlüsselt und speichert Amazon S3 die Daten.

Sie können auch die SSE -S3-Verschlüsselung anfordern, wenn Sie Objekte mit dem mehrteiligen Upload-Vorgang hochladen: API

  • Wenn Sie den mehrteiligen API Upload-Vorgang auf hoher Ebene verwenden, verwenden Sie die TransferManager Methoden, um Objekte beim Hochladen serverseitig zu verschlüsseln. Sie können eine beliebige der Upload-Methoden nutzen, die ObjectMetadata als Parameter entgegennehmen. Weitere Informationen finden Sie unter Hochladen eines Objekts mit Multipart-Upload.

  • Wenn Sie den mehrteiligen API Upload-Vorgang auf niedriger Ebene verwenden, geben Sie die serverseitige Verschlüsselung an, wenn Sie den mehrteiligen Upload starten. Sie fügen die Eigenschaft ObjectMetadata beim Aufruf der Methode InitiateMultipartUploadRequest.setObjectMetadata() hinzu. Weitere Informationen finden Sie unter Verwendung der AWS SDKs(niedriges NiveauAPI).

Sie können den Verschlüsselungsstatus eines Objekts (Verschlüsseln eines unverschlüsselten Objekts oder Entschlüsseln eines verschlüsselten Objekts) nicht direkt ändern. Um den Verschlüsselungsstatus eines Objekts zu ändern, erstellen Sie eine Kopie des Objekts, geben dabei den gewünschten Verschlüsselungsstatus der Kopie an und löschen dann das Originalobjekt. Amazon S3 verschlüsselt das kopierte Objekt nur, wenn Sie explizit eine serverseitige Verschlüsselung anfordern. Um die Verschlüsselung des kopierten Objekts über Java anzufordernAPI, verwenden Sie die ObjectMetadata Eigenschaft, um die serverseitige Verschlüsselung in der anzugeben. CopyObjectRequest

Beispiel

Das folgende Beispiel zeigt, wie Sie die serverseitige Verschlüsselung einrichten, indem Sie AWS SDK for Java. Es zeigt, wie die folgenden Aufgaben ausgeführt werden:

  • Laden Sie mit SSE -S3 ein neues Objekt hoch.

  • Ändern des Verschlüsselungsstatus eines Objekts (in diesem Beispiel Verschlüsseln eines zuvor unverschlüsselten Objekts) durch Anfertigen einer Kopie des Objekts

  • Überprüfen des Verschlüsselungsstatus des Objekts

Weitere Informationen zur serverseitigen Verschlüsselung finden Sie unter Unter Verwendung der REST API. Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Erste Schritte im AWS SDK for Java Entwicklerhandbuch.

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.internal.SSEResultBase; import com.amazonaws.services.s3.model.*; import java.io.ByteArrayInputStream; public class SpecifyServerSideEncryption { public static void main(String[] args) { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String keyNameToEncrypt = "*** Key name for an object to upload and encrypt ***"; String keyNameToCopyAndEncrypt = "*** Key name for an unencrypted object to be encrypted by copying ***"; String copiedObjectKeyName = "*** Key name for the encrypted copy of the unencrypted object ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .withCredentials(new ProfileCredentialsProvider()) .build(); // Upload an object and encrypt it with SSE. uploadObjectWithSSEEncryption(s3Client, bucketName, keyNameToEncrypt); // Upload a new unencrypted object, then change its encryption state // to encrypted by making a copy. changeSSEEncryptionStatusByCopying(s3Client, bucketName, keyNameToCopyAndEncrypt, copiedObjectKeyName); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } private static void uploadObjectWithSSEEncryption(AmazonS3 s3Client, String bucketName, String keyName) { String objectContent = "Test object encrypted with SSE"; byte[] objectBytes = objectContent.getBytes(); // Specify server-side encryption. ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentLength(objectBytes.length); objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION); PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, new ByteArrayInputStream(objectBytes), objectMetadata); // Upload the object and check its encryption status. PutObjectResult putResult = s3Client.putObject(putRequest); System.out.println("Object \"" + keyName + "\" uploaded with SSE."); printEncryptionStatus(putResult); } private static void changeSSEEncryptionStatusByCopying(AmazonS3 s3Client, String bucketName, String sourceKey, String destKey) { // Upload a new, unencrypted object. PutObjectResult putResult = s3Client.putObject(bucketName, sourceKey, "Object example to encrypt by copying"); System.out.println("Unencrypted object \"" + sourceKey + "\" uploaded."); printEncryptionStatus(putResult); // Make a copy of the object and use server-side encryption when storing the // copy. CopyObjectRequest request = new CopyObjectRequest(bucketName, sourceKey, bucketName, destKey); ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION); request.setNewObjectMetadata(objectMetadata); // Perform the copy operation and display the copy's encryption status. CopyObjectResult response = s3Client.copyObject(request); System.out.println("Object \"" + destKey + "\" uploaded with SSE."); printEncryptionStatus(response); // Delete the original, unencrypted object, leaving only the encrypted copy in // Amazon S3. s3Client.deleteObject(bucketName, sourceKey); System.out.println("Unencrypted object \"" + sourceKey + "\" deleted."); } private static void printEncryptionStatus(SSEResultBase response) { String encryptionStatus = response.getSSEAlgorithm(); if (encryptionStatus == null) { encryptionStatus = "Not encrypted with SSE"; } System.out.println("Object encryption status is: " + encryptionStatus); } }
.NET

Wenn Sie ein Objekt hochladen, können Sie Amazon S3 dazu anweisen, es zu verschlüsseln. Um den Verschlüsselungsstatus eines vorhandenen Objekts zu ändern, erstellen Sie eine Kopie des Objekts und löschen dann das Quellobjekt. Beachten Sie, dass die Kopieroperation das Ziel nur verschlüsselt, wenn Sie auf dem Zielobjekt ausdrücklich eine serverseitige Verschlüsselung anfordern. Um SSE -S3 in der anzugebenCopyObjectRequest, fügen Sie Folgendes hinzu:

ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256

Ein funktionierendes Beispiel, das zeigt, wie ein Objekt kopiert wird, finden Sie unter Verwendung der AWS SDKs.

Das folgende Beispiel lädt ein Objekt hoch. In der Anfrage weist das Beispiel Amazon S3 dazu an, das Objekt zu verschlüsseln. Das Beispiel ruft dann Objekt-Metadaten ab und überprüft die verwendete Verschlüsselungsmethode. Informationen zum Einrichten und Ausführen der Codebeispiele finden Sie unter Erste Schritte mit dem AWS SDKfür. NETin der AWS SDKfür. NETLeitfaden für Entwickler.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class SpecifyServerSideEncryptionTest { private const string bucketName = "*** bucket name ***"; private const string keyName = "*** key name for object created ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 client; public static void Main() { client = new AmazonS3Client(bucketRegion); WritingAnObjectAsync().Wait(); } static async Task WritingAnObjectAsync() { try { var putRequest = new PutObjectRequest { BucketName = bucketName, Key = keyName, ContentBody = "sample text", ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256 }; var putResponse = await client.PutObjectAsync(putRequest); // Determine the encryption state of an object. GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest { BucketName = bucketName, Key = keyName }; GetObjectMetadataResponse response = await client.GetObjectMetadataAsync(metadataRequest); ServerSideEncryptionMethod objectEncryption = response.ServerSideEncryptionMethod; Console.WriteLine("Encryption method used: {0}", objectEncryption.ToString()); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered ***. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } } }
PHP

Dieses Thema zeigt, wie Sie Klassen aus Version 3 von verwenden AWS SDK for PHP um SSE -S3 zu Objekten hinzuzufügen, die Sie auf Amazon S3 hochladen. Für weitere Informationen über AWS SDKfür Ruby API gehen Sie zu AWS SDKfür Ruby - Version 2.

Verwenden Sie die Methode Aws\ S3\ S3Client:: putObject (), um ein Objekt auf Amazon S3 hochzuladen. Um Ihrer Upload-Anfrage den Anfrage-Header x-amz-server-side-encryption hinzuzufügen, geben Sie den Parameter ServerSideEncryption mit dem Wert AES256 an, wie im folgenden Codebeispiel veranschaulicht. Weitere Informationen zur serverseitigen Verschlüsselungsanforderungen finden Sie unter Unter Verwendung der REST API.

require 'vendor/autoload.php'; use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; // $filepath should be an absolute path to a file on disk. $filepath = '*** Your File Path ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // Upload a file with server-side encryption. $result = $s3->putObject([ 'Bucket' => $bucket, 'Key' => $keyname, 'SourceFile' => $filepath, 'ServerSideEncryption' => 'AES256', ]);

Amazon S3 gibt als Antwort den x-amz-server-side-encryption-Header mit dem Wert zurück, den der Verschlüsselungsalgorithmus für die Verschlüsselung Ihrer Objektdaten verwendet hat.

Wenn Sie große Objekte mithilfe des mehrteiligen API Upload-Vorgangs hochladen, können Sie SSE -S3 für die Objekte, die Sie hochladen, wie folgt angeben:

  • Wenn Sie den mehrteiligen API Upload-Vorgang auf niedriger Ebene verwenden, geben Sie beim Aufrufen der Methode Aws\ S3\ S3Client:: () die serverseitige Verschlüsselung an. createMultipartUpload Um Ihrer Upload-Anfrage den Anfrage-Header x-amz-server-side-encryption hinzuzufügen, geben Sie für den Parameter array den ServerSideEncryption-Schlüssel mit dem Wert AES256 an. Weitere Hinweise zum mehrteiligen Upload-Vorgang auf niedriger Ebene finden Sie unter. API Verwendung der AWS SDKs(niedriges NiveauAPI)

  • Wenn Sie den mehrteiligen API Upload-Vorgang auf hoher Ebene verwenden, geben Sie die serverseitige Verschlüsselung mithilfe des ServerSideEncryption Vorgangsparameters an. CreateMultipartUploadAPI Ein Beispiel für die Verwendung der setOption() Methode mit dem mehrteiligen API Upload-Vorgang auf hoher Ebene finden Sie unter. Hochladen eines Objekts mit Multipart-Upload

Um den Verschlüsselungsstatus eines vorhandenen Objekts zu ermitteln, rufen Sie die Objektmetadaten ab, indem Sie die Methode Aws\ S3\ S3Client:: headObject () aufrufen, wie im folgenden PHP Codebeispiel gezeigt.

require 'vendor/autoload.php'; use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // Check which server-side encryption algorithm is used. $result = $s3->headObject([ 'Bucket' => $bucket, 'Key' => $keyname, ]); echo $result['ServerSideEncryption'];

Um den Verschlüsselungsstatus eines vorhandenen Objekts zu ändern, erstellen Sie mithilfe der Methode Aws\ S3\ S3Client:: copyObject () eine Kopie des Objekts und löschen Sie das Quellobjekt. Standardmäßig verschlüsselt copyObject() das Ziel nicht, es sei denn, Sie fordern explizit die serverseitige Verschlüsselung des Zielobjekts an, indem Sie den Parameter ServerSideEncryption mit dem Wert AES256 angeben. Das folgende PHP Codebeispiel erstellt eine Kopie eines Objekts und fügt dem kopierten Objekt serverseitige Verschlüsselung hinzu.

require 'vendor/autoload.php'; use Aws\S3\S3Client; $sourceBucket = '*** Your Source Bucket Name ***'; $sourceKeyname = '*** Your Source Object Key ***'; $targetBucket = '*** Your Target Bucket Name ***'; $targetKeyname = '*** Your Target Object Key ***'; $s3 = new S3Client([ 'version' => 'latest', 'region' => 'us-east-1' ]); // Copy an object and add server-side encryption. $s3->copyObject([ 'Bucket' => $targetBucket, 'Key' => $targetKeyname, 'CopySource' => "$sourceBucket/$sourceKeyname", 'ServerSideEncryption' => 'AES256', ]);

Weitere Informationen finden Sie unter den folgenden Themen:

Ruby

Bei der Verwendung der AWS SDK for Ruby Um ein Objekt hochzuladen, können Sie mit SSE -S3 angeben, dass das Objekt im Ruhezustand verschlüsselt gespeichert wird. Wenn Sie das Objekt zurücklesen, wird es automatisch entschlüsselt.

Folgendes AWS SDK for Ruby Das Beispiel für Version 3 zeigt, wie angegeben wird, dass eine auf Amazon S3 hochgeladene Datei im Ruhezustand verschlüsselt wird.

require "aws-sdk-s3" # Wraps Amazon S3 object actions. class ObjectPutSseWrapper attr_reader :object # @param object [Aws::S3::Object] An existing Amazon S3 object. def initialize(object) @object = object end def put_object_encrypted(object_content, encryption) @object.put(body: object_content, server_side_encryption: encryption) true rescue Aws::Errors::ServiceError => e puts "Couldn't put your content to #{object.key}. Here's why: #{e.message}" false end end # Example usage: def run_demo bucket_name = "amzn-s3-demo-bucket" object_key = "my-encrypted-content" object_content = "This is my super-secret content." encryption = "AES256" wrapper = ObjectPutSseWrapper.new(Aws::S3::Object.new(bucket_name, object_content)) return unless wrapper.put_object_encrypted(object_content, encryption) puts "Put your content into #{bucket_name}:#{object_key} and encrypted it with #{encryption}." end run_demo if $PROGRAM_NAME == __FILE__

Das folgende Beispiel zeigt, wie Sie den Verschlüsselungsstatus eines vorhandenen Objekts bestimmen.

require "aws-sdk-s3" # Wraps Amazon S3 object actions. class ObjectGetEncryptionWrapper attr_reader :object # @param object [Aws::S3::Object] An existing Amazon S3 object. def initialize(object) @object = object end # Gets the object into memory. # # @return [Aws::S3::Types::GetObjectOutput, nil] The retrieved object data if successful; otherwise nil. def get_object @object.get rescue Aws::Errors::ServiceError => e puts "Couldn't get object #{@object.key}. Here's why: #{e.message}" end end # Example usage: def run_demo bucket_name = "amzn-s3-demo-bucket" object_key = "my-object.txt" wrapper = ObjectGetEncryptionWrapper.new(Aws::S3::Object.new(bucket_name, object_key)) obj_data = wrapper.get_object return unless obj_data encryption = obj_data.server_side_encryption.nil? ? "no" : obj_data.server_side_encryption puts "Object #{object_key} uses #{encryption} encryption." end run_demo if $PROGRAM_NAME == __FILE__

Wenn die serverseitige Verschlüsselung für das in Amazon S3 gespeicherte Objekt nicht verwendet wird, gibt die Methode null zurück.

Um den Verschlüsselungsstatus eines vorhandenen Objekts zu ändern, erstellen Sie eine Kopie des Objekts und löschen dann das Quellobjekt. Standardmäßig verschlüsseln die Methoden zum Kopieren das Ziel nicht, es sei denn, Sie fordern explizit die serverseitige Verschlüsselung an. Sie können die Verschlüsselung des Zielobjekts anfordern, indem Sie den Wert server_side_encryption im Hash-Argument der Option angeben, wie im folgenden Ruby-Codebeispiel gezeigt. Das Codebeispiel zeigt, wie ein Objekt kopiert und die Kopie mit SSE -S3 verschlüsselt wird.

require "aws-sdk-s3" # Wraps Amazon S3 object actions. class ObjectCopyEncryptWrapper attr_reader :source_object # @param source_object [Aws::S3::Object] An existing Amazon S3 object. This is used as the source object for # copy actions. def initialize(source_object) @source_object = source_object end # Copy the source object to the specified target bucket, rename it with the target key, and encrypt it. # # @param target_bucket [Aws::S3::Bucket] An existing Amazon S3 bucket where the object is copied. # @param target_object_key [String] The key to give the copy of the object. # @return [Aws::S3::Object, nil] The copied object when successful; otherwise, nil. def copy_object(target_bucket, target_object_key, encryption) @source_object.copy_to(bucket: target_bucket.name, key: target_object_key, server_side_encryption: encryption) target_bucket.object(target_object_key) rescue Aws::Errors::ServiceError => e puts "Couldn't copy #{@source_object.key} to #{target_object_key}. Here's why: #{e.message}" end end # Example usage: def run_demo source_bucket_name = "amzn-s3-demo-bucket1" source_key = "my-source-file.txt" target_bucket_name = "amzn-s3-demo-bucket2" target_key = "my-target-file.txt" target_encryption = "AES256" source_bucket = Aws::S3::Bucket.new(source_bucket_name) wrapper = ObjectCopyEncryptWrapper.new(source_bucket.object(source_key)) target_bucket = Aws::S3::Bucket.new(target_bucket_name) target_object = wrapper.copy_object(target_bucket, target_key, target_encryption) return unless target_object puts "Copied #{source_key} from #{source_bucket_name} to #{target_object.bucket_name}:#{target_object.key} and "\ "encrypted the target with #{target_object.server_side_encryption} encryption." end run_demo if $PROGRAM_NAME == __FILE__

Um SSE -S3 anzugeben, wenn Sie ein Objekt hochladen, indem Sie AWS CLI, verwenden Sie das folgende Beispiel.

aws s3api put-object --bucket amzn-s3-demo-bucket1 --key object-key-name --server-side-encryption AES256 --body file path

Weitere Informationen finden Sie unter put-object im AWS CLI Referenz. Um SSE -S3 anzugeben, wenn Sie ein Objekt kopieren, indem Sie AWS CLI, siehe Objekt kopieren.

Beispiele für die Einrichtung der Verschlüsselung finden Sie mit AWS CloudFormation, siehe Einen Bucket mit Standardverschlüsselung erstellen und Einen Bucket erstellen mit AWS KMSBeispiel für serverseitige Verschlüsselung mit einem S3-Bucket-Key im AWS::S3::Bucket ServerSideEncryptionRule Thema im AWS CloudFormation Benutzerleitfaden.