すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:サーバー側暗号化

最終更新日:Feb 23, 2024

Object Storage Service (OSS) は、サーバー側暗号化が設定されているバケットにアップロードされたオブジェクトを暗号化し、暗号化されたオブジェクトを保存します。 GetObjectを呼び出してオブジェクトをダウンロードすると、OSSはオブジェクトを復号して返します。 x-oss-server-side-encryptionヘッダーは、オブジェクトがサーバー側で暗号化されていることを宣言するためにレスポンスに含まれます。

説明

レスポンス内のx-oss-server-side-encryptionヘッダーの詳細については、「レスポンスヘッダー」をご参照ください。

シナリオ

OSSはサーバー側暗号化を使用して静的データを保護します。 この機能は、深層学習サンプルやオンライン共同作業ドキュメントの保存など、追加のセキュリティやコンプライアンスが必要なシナリオで構成できます。

使用上の注意

  • サーバー側の暗号化は、中国 (杭州) 、中国 (上海) 、中国 (青島) 、中国 (北京) 、中国 (張家口) 、中国 (フホト) 、中国 (ウランカブ) 、中国 (深セン) 、中国 (河源) 、中国 (広州) 、中国 (成都) 、中国 (香港) 、米国 (シリコンバレー) 、米国 (バージニア) 、日本 (東京) 、韓国 (ソウル) 、シンガポール、オーストラリア (シドニー) 、マレーシア (クアラルンプール) 、インドネシア (ジャカルタ) 、フィリピン (マニラ) 、タイ (バンコク) 、インド (ムンバイ) 、ドイツ (フランクフルト) 、英国 (ロンドン) 、アラブ首長国連邦 (ドバイ) 。

  • KMS管理CMK (SSE-KMS) を使用するサーバー側暗号化が設定されているバケットでオブジェクトのアップロード、ダウンロード、またはアクセス操作を実行する場合は、指定されたカスタマーマスターキー (CMK) を使用する権限があり、要求が匿名ではないことを確認してください。 それ以外の場合、要求は失敗し、[この要求はkmsで禁止されています] エラーメッセージが返されます。

  • デフォルトでは、ミラーリングベースのback-to-originを使用して取得したオブジェクトは暗号化されません。

  • バケットのサーバー側の暗号化方法を設定または変更しても、バケット内の既存のオブジェクトの暗号化方法には影響しません。

  • オブジェクトは、一度に1つのサーバー側暗号化方法のみで暗号化できます。

  • バケットにサーバー側の暗号化を設定している場合でも、オブジェクトをバケットにアップロードまたはコピーするときに、オブジェクトに別の暗号化方法を使用できます。 オブジェクトに設定された暗号化方法が優先されます。 詳細は、「PutObject」をご参照ください。

暗号化方法

次の表に、さまざまなシナリオで使用できるサーバー側の暗号化方法を示します。

暗号化方法

説明

シナリオ

補足

課金ルール

SSE-KMS

Key Management Service (KMS) が管理するデフォルトのCMKを使用するか、CMKを指定してデータを暗号化または復号化できます。 この方法は、暗号化または復号化のためにネットワーク経由でKMSサーバーにデータを送信する必要がないため、費用対効果が高くなります。

セキュリティとコンプライアンスの要件を満たすようにCMKを指定する必要があります。

  • オブジェクトの暗号化に使用されるキーも暗号化され、オブジェクトのメタデータに書き込まれます。

  • オブジェクトデータのみが暗号化されます。 オブジェクトメタデータは暗号化されません。

KMSに保存されているCMKを使用してデータを暗号化または復号するAPI操作を呼び出すと、課金されます。 料金の詳細については、「KMSの課金」をご参照ください。

OSS管理キーを使用したサーバー側暗号化 (SSE-OSS)

OSSが管理するキーを使用して、オブジェクトを暗号化できます。 セキュリティを向上させるために、OSSは定期的にローテーションされるマスターキーを使用して暗号化キーを暗号化します。

基本的な暗号化機能のみが必要です。 キーを手動で管理する必要はありません。

なし。

無料です。

手順

OSSコンソールの使用

方法1: バケットの作成時にサーバー側の暗号化を有効にする

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、[バケット] をクリックします。 [バケット] ページで、[バケットの作成] をクリックします。

  3. [バケットの作成] パネルで、パラメーターを設定します。

    次の表に、サーバー側暗号化用に設定できるパラメーターを示します。

    パラメーター

    説明

    暗号化方法

    バケット内のオブジェクトを暗号化する暗号化方法を選択します。 有効な値:

    • なし: サーバー側の暗号化は無効です。

    • OSS管理: OSSによって管理されるキーは、バケット内のオブジェクトを暗号化するために使用されます。 OSSは、各オブジェクトを異なるキーで暗号化します。 OSSは、定期的にローテーションされたマスターキーも使用して暗号化キーを暗号化します。

    • KMS: KMSまたは指定されたCMKによって管理されるデフォルトのCMKは、オブジェクトの暗号化と復号化に使用されます。

      KMS管理CMKを使用するには、KMSを有効化する必要があります。 詳細については、「専用KMSインスタンスの購入」をご参照ください。

    暗号化アルゴリズム

    AES-256のみサポートされます。

    CMK

    CMKを選択します。 このパラメーターは、暗号化方法KMSが選択されている場合にのみ使用できます。

    CMKは <alias>(CMK ID) 形式です。 <alias> はCMKのエイリアス、CMK IDはCMKのIDです。 デフォルトのCMKを使用するか、CMKを指定できます。

    • alias/acs/oss(CMK ID): KMSによって管理されるデフォルトのCMKは、オブジェクトの暗号化と復号化のためのキーを生成するために使用されます。

    • alias/<cmkname>(CMK ID): カスタムCMKは、オブジェクト暗号化用のキーを生成するために使用されます。 CMK IDは、暗号化オブジェクトのメタデータに記録される。 オブジェクトは、解読権限を持つユーザーによってダウンロードされると解読されます。 <cmkname> は、CMKの作成時に設定したCMKのオプションの名前です。

      CMK IDを指定する前に、KMSコンソールのバケットと同じリージョンに通常キーまたは外部キーを作成する必要があります。 詳細については、「CMKの作成」をご参照ください。

    他のパラメーターを設定する方法の詳細については、「バケットの作成」をご参照ください。

  4. [OK] をクリックします。

方法2: 既存のバケットのサーバー側暗号化を有効にする

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。 [バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、[コンテンツセキュリティ] > [サーバー側の暗号化] を選択します。

  4. [サーバー側の暗号化] ページで、[設定] をクリックし、パラメーターを設定します。 下表に、各パラメーターを説明します。

    パラメーター

    説明

    暗号化方法

    バケット内のオブジェクトを暗号化する暗号化方法を選択します。 有効な値:

    • なし: サーバー側の暗号化は無効です。

    • OSS管理: OSSによって管理されるキーは、バケット内のオブジェクトを暗号化するために使用されます。 OSSは、各オブジェクトを異なるキーで暗号化します。 OSSは、定期的にローテーションされたマスターキーも使用して暗号化キーを暗号化します。

    • KMS: KMSまたは指定されたCMKによって管理されるデフォルトのCMKは、オブジェクトの暗号化と復号化に使用されます。

      KMS管理CMKを使用するには、KMSを有効化する必要があります。 詳細については、「専用KMSインスタンスの購入」をご参照ください。

    暗号化アルゴリズム

    AES-256のみサポートされます。

    CMK

    CMKを選択します。 このパラメーターは、暗号化方法KMSが選択されている場合にのみ使用できます。

    CMKは <alias>(CMK ID) 形式です。 <alias> はCMKのエイリアス、CMK IDはCMKのIDです。 デフォルトのCMKを使用するか、CMKを指定できます。

    • alias/acs/oss(CMK ID): KMSによって管理されるデフォルトのCMKは、オブジェクトの暗号化と復号化のためのキーを生成するために使用されます。

    • alias/<cmkname>(CMK ID): カスタムCMKは、オブジェクト暗号化用のキーを生成するために使用されます。 CMK IDは、暗号化オブジェクトのメタデータに記録される。 オブジェクトは、解読権限を持つユーザーによってダウンロードされると解読されます。 <cmkname> は、CMKの作成時に設定したCMKのオプションの名前です。

      CMK IDを指定する前に、KMSコンソールのバケットと同じリージョンに通常キーまたは外部キーを作成する必要があります。 詳細については、「CMKの作成」をご参照ください。

  5. [保存] をクリックします。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用してバケットのサーバー側暗号化を設定する方法の例を示しています。 他のプログラミング言語のOSS SDKを使用してバケットのサーバー側暗号化を設定する方法の詳細については、「概要」をご参照ください。

com.aliyun.oss.*;
impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.mo delをインポートします。*;

public classデモ {
    public static void main(String[] args) Throwable {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // バケットの暗号化方法をSM4に設定します。 AES-256が使用される場合、SSEAlgorithm.SM4をSSEAlgorithm.AES256に置き換える。 
            ServerSideEncryptionByDefault applyServerSideEncryptionByDefault = new ServerSideEncryptionByDefault(SSEAlgorithm.SM4);
            ServerSideEncryptionConfiguration sseConfig = new ServerSideEncryptionConfiguration();
            sseConfig.setApplyServerSideEncryptionByDefault(applyServerSideEncryptionByDefault);
            SetBucketEncryptionRequest request = new SetBucketEncryptionRequest(bucketName, sseConfig);
            ossClient.setBucketEncryption (リクエスト);
        } catch (Exception e) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "しかし、何らかの理由でエラー応答で拒否されました。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエストID:" + oe.getRequestId());
            System.out.println("ホストID:" + oe.getHostId());
        } catch (ClientException e) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + 「ネットワークにアクセスできないなど」;
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } 最後に{
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 
<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

OSS\OssClientを使用します。OSS\Core\OssExceptionを使用します。OSS\Model\ServerSideEncryptionConfigを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。  
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket= "<yourBucketName>";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point, false);

try {
    // バケットのデフォルトのサーバー側暗号化方式をSSE-OSSに設定します。 
    $config = new ServerSideEncryptionConfig("AES256");
    $ossClient->putBucketEncryption($bucket, $config);

    // CMK IDを指定せずに、バケットのデフォルトのサーバー側暗号化方式をKMSに設定します。 
    $config = new ServerSideEncryptionConfig("KMS");
    $ossClient->putBucketEncryption($bucket, $config);

    // バケットのデフォルトのサーバー側暗号化方式をKMSに設定し、CMK IDを指定します。 
    $config = new ServerSideEncryptionConfig("KMS" 、"your kms id");
    $ossClient->putBucketEncryption($bucket, $config);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage()) 。 "\n");
    戻ります。}

print(__FUNCTION__) 。 ": OK" 。 "\n"); 
const OSS = require("ali-oss");

const client = new OSS({
  // バケットが配置されているリージョンを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンをoss-cn-Hangzhouに設定します。 
  region: 'yourregion' 、
  // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数OSS_ACCESS_KEY_IDとOSS_ACCESS_KEY_SECRETが設定されていることを確認してください。 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID、
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET、
  // バケットの名前を指定します。 
  bucket: 'yourbucketname'
});

async関数putBucketEncryption() {
  try {
    // バケットの暗号化方式を設定します。     

    const result = await client.putBucketEncryption("bucket-name", {
      SSEAlgorithm: "AES256", // この例では、AES-256暗号化アルゴリズムが使用される。 KMSを暗号化に使用するには、KMSMasterKeyIDを指定する必要があります。 
      // KMSMasterKeyID: "yourKMSMasterKeyId" 。 CMK IDを指定します。 このパラメーターは、SSEAlgorithmがKMSに設定され、特定のCMKが暗号化に使用される場合に使用でき、必要になります。 それ以外の場合は、このパラメーターを空のままにします。 
    });
    console.log (結果);
  } catch (e) {
    console.log(e);
  }
}

putBucketEncryption();
# -*-コーディング: utf-8 -*-
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート
oss2.modelsからServerSideEncryptionRuleをインポート
# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、環境変数OSS_ACCESS_KEY_IDとOSS_ACCESS_KEY_SECRETが設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 例: examplebucket. 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')

# バケットの暗号化設定を作成します。 この例では、AES-256暗号化が使用される。 
rule = ServerSideEncryptionRule()
rule.sse_algorithm = oss2.SERVER_SIDE_ENCRYPTION_AES256
# CMK IDを指定します。 CMK IDは、OSS-KMS暗号化方式を使用する場合にのみ指定できます。 暗号化に指定したCMKを使用する場合は、CMK IDを入力します。 KMSが管理するデフォルトのCMKを暗号化に使用する場合は、このパラメーターを空のままにします。 AES-256暗号化を使用する場合は、このパラメーターを空のままにする必要があります。 
rule.kms_master_keyid = ""

# 暗号化設定をバケットに適用します。 
result = bucket.put_bucket_encryption (ルール)

# 返されたHTTPステータスコードを表示します。 
Aliyun.OSSを使用して印刷 ('http response code:', result.status)
;
Aliyun.OSS.Common; を使用
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
var endpoint = "yourEndpoint";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。 例: examplebucket. 
var bucketName = "examplebucket";
// OSSClientインスタンスを作成します。 
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
    // バケットのサーバー側暗号化を設定します。 
    var request = new SetBucketEncryptionRequest(bucketName、"KMS" 、null);
    client.SetBucketEncryption (要求);
    Console.WriteLine("Set bucket:{0} Encryption successed", bucketName);
}
キャッチ (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID:{2}\tHostID:{3}"、
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
キャッチ (例外ex)
{
    Console.WriteLine("Failed with error info: {0}" 、メッセージなど);
} 
パッケージメイン

import (import (import)
  "fmt"
  "os"

  「github.com/aliyun/aliyun-oss-go-sdk/oss」
)

func main() {
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClientインスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。 
	client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}

  // 暗号化ルールを初期化します。 この例では、AES-256暗号化アルゴリズムが使用される。 
  config := oss.ServerEncryptionRule{SSEDefault: oss.SSEDefaultRule{SSEAlgorithm: "AES256"}}
  err = client.SetBucketEncryption("yourBucketName", config)
  if err! =nil {
    fmt.Println("Error:", err)
    os.Exit(-1)
  }
} 
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::stringエンドポイント="https://oss-cn-hangzhou.aliyuncs.com";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);

    SetBucketEncryptionRequest setrequest(BucketName);
    setrequest.setSSEAlgorithm(SSEAlgorithm::KMS);
    /* KMSに基づいてサーバー側暗号化を設定します。 */
    auto outcome = client.SetBucketEncryption(setrequest);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。 */
        std::cout << "SetBucketEncryption fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースなどのリソースをリリースします。 */
    ShutdownSdk();
    0を返します。} 

ossutilの使用

方法1: バケットの作成時にサーバー側の暗号化を設定する

ossutilを使用してバケットを作成するときにサーバー側の暗号化を構成する方法の詳細については、「bucket-encryption」をご参照ください。

方法2: オブジェクトをアップロードするときにオブジェクトの暗号化方法を指定する

ossutilを使用してオブジェクトをアップロードするときにオブジェクトの暗号化メソッドを指定する方法の詳細については、「オブジェクトのアップロードとオブジェクトの暗号化メソッドの指定」をご参照ください。

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketEncryption」をご参照ください。

暗号化と復号化にKMS管理CMKを使用する

KMS管理CMKを使用して、オブジェクト暗号化用の暗号化キーを生成できます。 エンベロープ暗号化メカニズムはさらに、不正データアクセスを防止する。 KMSにより、キーのセキュリティ、整合性、可用性を手動で維持する必要がなくなります。 これにより、データの暗号化、データの復号化、デジタル署名の生成と検証に集中できます。

次の図は、SSE-KMSの暗号化ロジックを示しています。

image

SSE-KMSを使用してデータを暗号化する場合、次のキーを使用できます。

  • デフォルトのKMS管理CMK

    OSSは、デフォルトのKMS管理CMKに基づいて生成されたキーを使用して、オブジェクトを暗号化し、オブジェクトのダウンロード時にオブジェクトを復号します。 SSE-KMSを初めて使用するとき、OSSはKMSでCMKを作成します。

    設定方法:

    • バケットのサーバー側暗号化を設定する

      バケットの暗号化方法をKMSに設定する CMK IDを指定せずに このようにして、このバケットにアップロードされたオブジェクトは暗号化されます。

    • 特定のオブジェクトの暗号化方法を設定する

      オブジェクトをアップロードするとき、またはオブジェクトのメタデータを変更するときは、リクエストにx-oss-server-side-encryptionヘッダーを含め、ヘッダーをKMSに設定します。 このように、OSSはKMSが管理するデフォルトのCMKとAES-256の暗号化アルゴリズムを使用してオブジェクトを暗号化します。 詳細は、「PutObject」をご参照ください。

  • Bring Your Own Key (BYOK) を使用して生成されたCMK

    KMSコンソールでBYOKマテリアルを使用してCMKを生成すると、OSSはCMKに基づいて生成されたキーを使用してさまざまなオブジェクトを暗号化し、CMK IDは暗号化されたオブジェクトのメタデータに記録されます。 オブジェクトは、解読権限を持つユーザーによってダウンロードされた場合にのみ自動的に解読されます。

    BYOK資料は、次のいずれかのソースから入手できます。

    • Alibaba Cloudが提供するBYOKマテリアル: KMSでキーを作成する場合、キーマテリアルのソースとしてAlibaba Cloud KMSを選択します。

    • ユーザーが提供するBYOKマテリアル: KMSでキーを作成するときは、キーマテリアルのソースとして [外部] を選択し、外部キーマテリアルをインポートします。 外部キーをインポートする方法の詳細については、「キーマテリアルのインポート」をご参照ください。

    設定方法:

    • バケットのサーバー側暗号化を設定する

      バケットの暗号化方法をKMSに設定する CMK IDを指定します。 このようにして、このバケットにアップロードされたオブジェクトは暗号化されます。

    • 特定のオブジェクトの暗号化方法を設定する

      オブジェクトをアップロードするとき、またはオブジェクトのメタデータを変更するときは、リクエスト内でx-oss-server-side-encryptionヘッダーをKMSに設定し、x-oss-server-side-encryption-key-IDヘッダーを使用してCMK idを指定します。 このように、OSSは、KMSによって管理される指定されたCMKとAES-256暗号化アルゴリズムを使用してオブジェクトを暗号化します。 詳細は、「PutObject」をご参照ください。

OSS管理キーを使用した暗号化と復号化

OSSは、データの暗号化に使用されるデータキーを生成および管理し、データを保護するための強力で多要素のセキュリティ対策を提供します。 SSE-OSSはAES-256暗号化アルゴリズムを使用します データを暗号化します。

設定方法:

  • バケットのサーバー側暗号化を設定する

    暗号化方法をSSE-OSSに設定し、暗号化アルゴリズムとしてAES-256を指定します。 このように、バケットにアップロードされたすべてのオブジェクトはデフォルトで暗号化されます。

  • 特定のオブジェクトの暗号化方法を設定する

    オブジェクトをアップロードしたり、オブジェクトのメタデータを変更したりするときは、リクエストにx-oss-server-side-encryptionパラメーターを含め、パラメーターをAES256に設定します。. OSSはOSS管理キーを使用してオブジェクトを暗号化します。 詳細は、「PutObject」をご参照ください。

必要な権限。

RAMユーザーがサーバー側の暗号化を使用してさまざまなシナリオでオブジェクトを暗号化および復号化する場合、RAMユーザーは必要な権限を持っている必要があります。

説明

RAMユーザーに権限を付与する方法の詳細については、「RAMポリシーの一般的な例」をご参照ください。

  • バケットのサーバー側暗号化を設定する

    • バケットを管理するための権限。

    • PutBucketEncryptionおよびGetBucketEncryptionを呼び出す権限。

    • 暗号化方法をSSE-KMSに設定し、指定したCMKを使用してデータを暗号化する場合に、ListKeysListaliasListAliasesByKeyId、およびDescribeKeyを呼び出すための操作権限。 次のサンプルコードは、RAMポリシーをアタッチしてRAMユーザーに上記の権限を付与する方法の例を示しています。

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              &quot;kms:List *&quot;、
              「kms:DescribeKey」    
            ],
            "Resource": [
              "acs:kms:*:141661496593 ****:*" // RAMユーザーは、Alibaba Cloudアカウントに属するすべてのKMS管理CMKを使用できます。 RAMユーザーが特定のCMKのみを使用できるようにするには、CMK IDを入力します。 
            ]
          }
        ]
      }
  • 暗号化メソッドが設定されているバケットにオブジェクトをアップロードする

    • バケットにオブジェクトをアップロードする権限。

    • 暗号化方法をSSE-KMSに設定し、指定したCMKを使用してデータを暗号化する場合に、次の操作を呼び出す権限。リストキー,ListAliases,ListAliasesByKeyId,DescribeKey,GenerateDataKey、および解読. 次のサンプルコードは、RAMポリシーをアタッチしてRAMユーザーに上記の権限を付与する方法の例を示しています。

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              &quot;kms:List *&quot;、
              &quot;kms:DescribeKey&quot;、
              "kms:GenerateDataKey",
              "kms:Decrypt"
            ],
            "Resource": [
              "acs:kms:*:141661496593 ****:*" // RAMユーザーは、Alibaba Cloudアカウントに属するすべてのCMKを使用できます。 RAMユーザーが特定のCMKのみを使用できるようにするには、CMK IDを入力します。 
            ]
          }
        ]
      }
  • 暗号化方式が設定されているバケットからオブジェクトをダウンロードする

    • バケット内のオブジェクトにアクセスするための権限。

    • 暗号化メソッドが使用され、指定されたCMKがSSE-KMSされている場合に、Decrypt操作を呼び出す権限。 次のサンプルコードは、RAMポリシーをアタッチしてRAMユーザーに上記の権限を付与する方法の例を示しています。

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "kms:Decrypt"
            ],
            "Resource": [
              "acs:kms:*:141661496593 ****:*" // RAMユーザーには、Alibaba Cloudアカウントに属するすべてのCMKを使用する権限があります。 RAMユーザーが特定のCMKのみを使用してオブジェクトを復号化できるようにするには、CMK IDを入力します。 
            ]
          }
        ]
      }

よくある質問

バケットのサーバー側暗号化を設定した後、OSSはバケット内の既存のオブジェクトを暗号化しますか?

いいえ。OSSは、バケットにサーバー側暗号化が設定された後にアップロードされたオブジェクトのみを暗号化し、バケット内の既存のオブジェクトは暗号化しません。 バケット内の既存のオブジェクトを暗号化する場合は、CopyObject操作を呼び出して既存のオブジェクトを上書きできます。