Angeben serverseitiger Verschlüsselung mit von Amazon S3 verwalteten Schlüsseln (SSE-S3) - 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.

Angeben serverseitiger Verschlüsselung mit von Amazon S3 verwalteten Schlüsseln (SSE-S3)

Wichtig

Amazon S3 wendet jetzt serverseitige Verschlüsselung mit von Amazon S3 verwalteten Verschlüsselungsschlüssel (SSE-S3) als Basisverschlüsselung 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 neue Objekt-Uploads ist in - AWS CloudTrail Protokollen, S3 Inventory, S3 Storage Lens, der Amazon S3-Konsole und als zusätzlicher Amazon S3-API-Antwort-Header in der AWS Command Line Interface und AWS SDKs verfügbar. Weitere Informationen finden Sie unter Häufig gestellte Fragen zur Standardverschlüsselung.

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 Anforderungen einen anderen Verschlüsselungstyp angeben möchten, können Sie die serverseitige Verschlüsselung mit AWS Key Management Service (AWS KMS)-Schlüsseln (SSE-KMS), die serverseitige Dual-Layer-Verschlüsselung mit - AWS KMS Schlüsseln (DSSE-KMS) oder die serverseitige Verschlüsselung mit vom Kunden bereitgestellten Schlüsseln (SSE-C) verwenden. Wenn Sie im Ziel-Bucket eine andere Standardverschlüsselungskonfiguration festlegen möchten, können Sie SSE-KMS oder DSSE-KMS verwenden.

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

In diesem Thema wird beschrieben, wie der Verschlüsselungstyp eines Objekts mit der AWS Management Console festgelegt oder geändert wird. Wenn Sie ein Objekt unter Verwendung 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).

So ändern Sie die Verschlüsselung für ein Objekt
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die Amazon 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 Von Amazon S3 verwaltete Schlüssel (SSE-S3) aus. SSE-S3 verwendet für die Verschlüsselung der einzelnen Objekte eine der stärksten Blockverschlüsselungen: 256-bit Advanced Encryption Standard (AES-256). Weitere Informationen finden Sie unter Verwenden serverseitiger Verschlüsselung mit von Amazon S3 verwalteten Schlüsseln (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.

Wenn das Objekt erstellt wird – d. h. wenn Sie ein neues Objekt hochladen oder eine Kopie eines vorhandenen Objekts anlegen –, können Sie angeben, ob Amazon S3 Ihre Daten mit von Amazon S3 verwalteten Schlüsseln (SSE-S3) verschlüsseln soll, indem Sie der Anforderung den Header x-amz-server-side-encryption hinzufügen. Setzen Sie den Wert des Headers auf den Verschlüsselungsalgorithmus AES256, den Amazon S3 unterstützt. Amazon S3 bestätigt, dass Ihr Objekt unter Verwendung von SSE-S3 gespeichert wird, indem der Antwort-Header x-amz-server-side-encryption zurückgegeben wird.

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

Wenn Sie große Objekte mit der API für mehrteilige Uploads hochladen, können Sie die serverseitige Verschlüsslung festlegen, indem Sie der Anforderung zum Initiieren eines mehrteiligen Uploads den Header x-amz-server-side-encryption 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 Antwort-Header der folgenden REST-API-Operationen geben den Header x-amz-server-side-encryption zurück, wenn ein Objekt unter Verwendung von SSE-S3 gespeichert wird.

Anmerkung

Senden Sie keine Anforderungs-Header für die Verschlüsselung für GET- und HEAD-Anforderungen, wenn Ihr Objekt SSE-S3 verwendet oder der HTTP-Statuscodefehler 400 (Ungültige Anfrage) zurückgegeben wird.

Bei Verwendung von - 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 der - AWS SDKs in mehreren Sprachen. Informationen zu anderen SDKs finden Sie unter Beispiel-Code und Bibliotheken.

Java

Wenn Sie ein Objekt mit der AWS SDK for Java hochladen, 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 Verschlüsselung mit SSE-S3 anfordern, wenn Sie Objekte mit der API-Operation für mehrteilige Uploads hochladen:

  • Wenn Sie die High-Level-API-Operation für mehrteilige Uploads verwenden, wenden Sie mit der Methode TransferManager serverseitige Verschlüsselung auf Objekte an, während Sie sie hochladen. 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 die Low-Level-API-Operation für mehrteilige Uploads verwenden, legen Sie die serverseitige Verschlüsselung beim Initiieren des mehrteiligen Uploads fest. Sie fügen die Eigenschaft ObjectMetadata beim Aufruf der Methode InitiateMultipartUploadRequest.setObjectMetadata() hinzu. Weitere Informationen finden Sie unter Verwenden der - AWS SDKs (Low-Level-API).

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 die Java-API anzufordern, geben Sie unter Verwendung der ObjectMetadata-Eigenschaft eine serverseitige Verschlüsselung in der CopyObjectRequest an.

Beispiel

Das folgende Beispiel veranschaulicht, wie Sie die serverseitige Verschlüsselung unter Verwendung des AWS SDK for Java festlegen. Es veranschaulicht, wie Sie die folgenden Aufgaben ausführen:

  • Laden Sie ein neues Objekt mit SSE-S3 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 Verwenden der REST-API. Anweisungen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Testen der Java-Codebeispiele für Amazon S3.

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. Fügen Sie Folgendes hinzu, um SSE-S3 in CopyObjectRequest anzugeben:

ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256

Ein funktionierendes Beispiel, das zeigt, wie ein Objekt kopiert wird, finden Sie unter Verwenden 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. Weitere Informationen zum Erstellen und Testen eines funktionierenden Beispiels finden Sie unter Ausführen der .NET-Codebeispiele für Amazon S3.

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

In diesem Thema wird gezeigt, wie Sie Klassen aus Version 3 des verwenden, AWS SDK for PHP um SSE-S3 zu Objekten hinzuzufügen, die Sie in Amazon S3 hochladen. Es wird davon ausgegangen, dass Sie den Anweisungen für folgen Verwenden von AWS SDK for PHP und Ausführen von PHP-Beispielen und AWS SDK for PHP ordnungsgemäß installiert ist.

Um ein Objekt zu Amazon S3 hochzuladen, verwenden Sie die Methode Aws\S3\S3Client::putObject(). 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 Verwenden 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 der API-Operation für mehrteilige Uploads hochladen, können Sie wie folgt SSE-S3 für diese Objekte angeben:

  • Wenn Sie die Low-Level-API-Operation für mehrteilige Uploads verwenden, geben Sie die serverseitige Verschlüsselung an, wenn Sie die Methode Aws\S3\S3Client ::createMultipartUpload() aufrufen. 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 Informationen zur Low-Level-API-Operation für mehrteilige Uploads finden Sie unter Verwenden der - AWS SDKs (Low-Level-API).

  • Wenn Sie die High-Level-API-Operation für mehrteilige Uploads verwenden, geben Sie die serverseitige Verschlüsselung mithilfe des ServerSideEncryption Parameters der CreateMultipartUpload API-Operation an. Ein Beispiel für die Verwendung der Methode setOption() mit der High-Level-API-Operation für mehrteilige Uploads finden Sie unter Hochladen eines Objekts mit Multipart-Upload.

Um den Verschlüsselungsstatus eines vorhandenen Objekts zu bestimmen, rufen Sie die Objektmetadaten mit der Methode Aws\S3\S3Client::headObject() ab, wie im folgenden PHP-Codebeispiel veranschaulicht.

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 mittels der Methode Aws\S3\S3Client::copyObject() eine Kopie des Objekts und löschen dann 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. Im folgenden PHP-Codebeispiel wird eine Kopie eines Objekts erstellt und dem kopierten Objekt eine serverseitige Verschlüsselung hinzugefügt.

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

Wenn Sie die AWS SDK for Ruby zum Hochladen eines Objekts verwenden, können Sie angeben, dass das Objekt im Ruhezustand mit SSE-S3 verschlüsselt gespeichert werden soll. Wenn Sie das Objekt zurücklesen, wird es automatisch entschlüsselt.

Das folgende Beispiel für AWS SDK for Ruby Version 3 zeigt, wie Sie angeben, dass eine in Amazon S3 hochgeladene Datei im Ruhezustand verschlüsselt werden soll.

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 = "doc-example-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 = "doc-example-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 Code-Beispiel 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 = "doc-example-bucket1" source_key = "my-source-file.txt" target_bucket_name = "doc-example-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__

Verwenden Sie das folgende Beispiel, um SSE-S3 beim Hochladen eines AWS CLI Objekts mithilfe der anzugeben.

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET1 --key object-key-name --server-side-encryption AES256 --body file path

Weitere Informationen finden Sie unter put-object in der AWS CLI -Referenz. Informationen zur Angabe von SSE-S3 beim Kopieren eines Objekts mithilfe der AWS CLI finden Sie unter copy-object .

Beispiele für die Einrichtung der Verschlüsselung mit AWS CloudFormation finden Sie unter Erstellen eines Buckets mit Standardverschlüsselung und Erstellen eines Buckets mit AWS KMS serverseitiger Verschlüsselung mit einem S3-Bucket-Schlüssel im AWS::S3::Bucket ServerSideEncryptionRule Thema im AWS CloudFormation -Benutzerhandbuch.