OSS では、アップロードされたデータのサーバー側暗号化をサポートしています。 したがって、ユーザーデータがアップロードされると、OSS でデータを暗号化し、永続的に保存します。 ユーザーがデータをダウンロードする際、データは自動的に復号化され、元のデータが返されます。レスポンスヘッダーには、サーバー側でデータが暗号化されたことが記載されます。

さまざまな適用シナリオで、次のサーバー側暗号化方式を利用できます。
  • KMS が管理する CMK を使用したサーバー側暗号化 (SSE-KMS) による暗号化と復号化
    オブジェクトをアップロードする際、CMK ID、または KMS で管理されるデフォルト CMK を使用して、大量のデータを暗号化および復号化できます。 この方式は、暗号化や復号化の際、ネットワーク経由でユーザーデータを KMS サーバーに送信する必要がないので、コスト効率に優れています。
    重要 CMK を使用してデータを暗号化または復号化する場合、API 呼び出し料金が発生します。
  • OSS によるフルマネージドのサーバー側暗号化 (SSE-OSS)

    オブジェクトがアップロードされると、OSS によるフルマネージドの AES256 を使用して、サーバー側で暗号化されます。 この方式では、AES256 を使用して、オブジェクトごとに異なるキーで暗号化します。 さらに個々のキーは、定期的に更新される CMK で暗号化されるので、より安全です。 この方式は、大量のデータの暗号化や復号化に適用されます。

重要
  • 1 つのオブジェクトに対して同時に使用できるサーバー側暗号化方式は 1 つのみです。
  • バケットにサーバー側暗号化を設定する場合、バケットをアップロードまたはコピーする際、単一のオブジェクトに暗号化方式を設定できます。 この場合、オブジェクトに設定された暗号化方式が優先されます。 詳細は、「PutObject」をご参照ください。
  • サーバー側暗号化の詳細は、「サーバー側暗号化」をご参照ください。

バケットのサーバー側暗号化の設定

次のコードを実行して、バケットにデフォルトの暗号化方式を設定できます。 方式が設定された後、暗号化方法が設定されていないバケットにアップロードされたオブジェクトは、設定済みのデフォルトの暗号化方式で暗号化されます。
// This example uses the China East 1 (Hangzhou) endpoint. Specify the actual endpoint based on your requirements.
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// It is highly risky to log on with the AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM user account, log on to https://ram.console.aliyun.com.
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// Creates an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// Configures server-side encryption for the bucket.
ServerSideEncryptionByDefault applyServerSideEncryptionByDefault = new ServerSideEncryptionByDefault(SSEAlgorithm.KMS);
applyServerSideEncryptionByDefault.setKMSMasterKeyID("<yourTestKmsId>");
ServerSideEncryptionConfiguration sseConfig = new ServerSideEncryptionConfiguration();
sseConfig.setApplyServerSideEncryptionByDefault(applyServerSideEncryptionByDefault);
SetBucketEncryptionRequest request = new SetBucketEncryptionRequest("<yourBucketName>", sseConfig);
ossClient.setBucketEncryption(request);

// Closes the OSSClient instance.
ossClient.shutdown();      

バケットのサーバー側暗号化設定の取得

次のコードを実行して、バケットのサーバー側暗号化設定を取得できます。
// This example uses the China East 1 (Hangzhou) endpoint. Specify the actual endpoint based on your requirements.
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// It is highly risky to log on with the AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM user account, log on to https://ram.console.aliyun.com.
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// Creates an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// Obtains the server-side encryption settings of the bucket.
ServerSideEncryptionConfiguration sseConfig = ossClient.getBucketEncryption("<yourBucketName>");
System.out.println("get Algorithm: " + sseConfig.getApplyServerSideEncryptionByDefault().getSSEAlgorithm());
System.out.println("get kmsid: " + sseConfig.getApplyServerSideEncryptionByDefault().getKMSMasterKeyID());

// Closes the OSSClient instance.
ossClient.shutdown();
				

バケットのサーバー側暗号化設定の削除

次のコードを実行して、バケットのサーバー側暗号化設定を削除できます。
// This example uses the China East 1 (Hangzhou) endpoint. Specify the actual endpoint based on your requirements.
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// It is highly risky to log on with the AccessKey of an Alibaba Cloud account because the account has permissions on all the APIs in OSS. We recommend that you log on as a RAM user to access APIs or perform routine operations and maintenance. To create a RAM user account, log on to https://ram.console.aliyun.com.
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";

// Creates an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

// Deletes the server-side encryption settings of the bucket.
ossClient.deleteBucketEncryption("<yourBucketName>");

// Closes the OSSClient instance.
ossClient.shutdown();