サーバ側暗号化が有効になっているバケットにオブジェクトをアップロードすると、Object Storage Service (OSS) はオブジェクトを保存する前に暗号化します。GetObject 操作を呼び出してオブジェクトをダウンロードすると、OSS は自動的にオブジェクトを復号して返します。応答には、オブジェクトがサーバ側で暗号化されたことを示す x-oss-server-side-encryption ヘッダーが含まれます。
説明 x-oss-server-side-encryption 応答ヘッダーの詳細については、「応答ヘッダー 」をご参照ください。
シナリオ OSS はサーバ側暗号化を使用して、保存データを保護します。この機能は、ディープ ラーニングのサンプルファイルやオンライン共同ドキュメントの保存など、データストレージに対するセキュリティやコンプライアンスの要件が高いシナリオに適しています。
暗号化方式 OSS は、さまざまなシナリオに対応するために 2 つのサーバ側暗号化方式を提供しています。要件に応じて方式を選択できます。
暗号化方式
説明
シナリオ
注意
課金
Key Management Service (KMS) によって管理されるキーによるサーバ側暗号化 (SSE-KMS)
Key Management Service (KMS) によって管理されるデフォルトのカスタマーマスターキー (CMK) または指定された CMK を使用して、データを暗号化および復号します。データは、KMS サーバーにネットワーク経由で送信されることなく暗号化および復号されます。
この方法は、セキュリティとコンプライアンスの要件を満たすために、自己管理またはユーザー指定のキーを使用する必要がある場合に適しています。
KMS に保存されている CMK を使用してデータを暗号化または復号するために API 操作を呼び出すと課金されます。詳細については、「KMS の課金 」をご参照ください。
OSS で管理されるキーによるサーバ側暗号化 (SSE-OSS)
OSS によって完全に管理されるキーを使用して各オブジェクトを暗号化します。セキュリティを強化するために、OSS はマスターキーを使用してデータ暗号化キー自体も暗号化します。
この方法は、基本的な暗号化機能のみが必要で、キーを管理する必要がない場合に適しています。
なし。
無料。
注意 SSE-KMS を使用して暗号化されたバケット内のオブジェクトをアップロード、ダウンロード、またはアクセスするには、指定された CMK ID を使用する権限が必要であり、リクエストは匿名であってはなりません。そうでない場合、リクエストは失敗し、This request is forbidden by kms エラーが返されます。
ミラーリングベースのオリジンフェッチルールを使用して取得されたバケット内のオブジェクトは、デフォルトでは暗号化されません。
バケットの暗号化方式を有効にしたり変更したりしても、バケット内の既存のオブジェクトの暗号化構成には影響しません。
オブジェクトは、一度に 1 つのサーバ側暗号化方式でのみ暗号化できます。
バケットの暗号化を設定した場合でも、オブジェクトをアップロードまたはコピーするときに、オブジェクトに個別の暗号化方式を設定できます。オブジェクトに設定された暗号化方式が優先されます。詳細については、「PutObject 」をご参照ください。
権限 次のリストは、Resource Access Management (RAM) ユーザーがさまざまなシナリオでサーバ側暗号化を使用するために必要な権限について説明しています。
方法
重要 KMS キーローテーション付加価値サービスを購入した場合、サーバ側暗号化は KMS キーのキーローテーション をサポートします。キーローテーションを有効にすると、新しいキーは新しいオブジェクトの暗号化にのみ使用されます。既存のオブジェクトの暗号化キーは変更されません。
OSS を介して KMS 暗号化キーを更新する場合、新しいキーは更新後に書き込まれるオブジェクトにのみ適用されます。キーの更新前に書き込まれた既存のオブジェクトは、古いキーで暗号化されたままです。したがって、更新後に古いキーを削除しないでください。そうしないと、既存のオブジェクトにアクセスできなくなります。
OSS コンソールを使用する 方法 1: バケットのサーバ側暗号化を有効にする バケット作成時にサーバ側暗号化を有効にする OSS コンソールにログインします。
[バケット] をクリックし、次に [バケットの作成] をクリックします。
[バケットの作成] パネルで、次の表の説明に従ってパラメーターを設定します。
次の表は、[サーバ側暗号化] セクションのパラメーターについて説明しています。
パラメーター
説明
[暗号化方式]
オブジェクトの暗号化方式を選択します。有効な値:
[なし] : サーバ側暗号化は無効です。
[OSS マネージド] : OSS で管理されるキーを暗号化に使用します。OSS は、各オブジェクトを暗号化するために異なるキーを使用します。追加の保護のために、OSS はマスターキーを使用してデータ暗号化キーを暗号化します。
[KMS] : デフォルトの KMS で管理される CMK または指定された CMK ID を暗号化と復号に使用します。
KMS 暗号化方式を使用する前に、KMS を有効化する必要があります。詳細については、「KMS の有効化 」をご参照ください。
[暗号化アルゴリズム]
AES256 暗号化アルゴリズムのみがサポートされています。
[暗号化キー]
このパラメーターは、[暗号化方式] を [KMS] に設定した場合にのみ必須です。
暗号化キーを選択します。キーは <alias>(CMK ID) の形式です。この形式では、<alias> は CMK のエイリアスで、CMK ID は CMK の ID です。有効な値:
[alias/acs/oss(CMK ID)] : このオプションを選択すると、OSS はデフォルトのサービスキーを使用してバケット内のデータを暗号化し、オブジェクトがダウンロードされるときに自動的に復号します。
[alias/<cmkname>(CMK ID )] : このオプションを選択すると、OSS は指定されたサービスキーを使用してバケット内のデータを暗号化します。暗号化されたオブジェクトの CMK ID は、オブジェクトのメタデータに記録されます。復号権限を持つユーザーは、オブジェクトをダウンロードするときに自動的に復号できます。この形式では、<cmkname> は、キーを作成したときに設定した CMK のオプションの識別子です。
指定された CMK ID を使用する前に、KMS コンソールでバケットと同じリージョンに通常または外部キーを作成する必要があります。詳細については、「キーの作成 」をご参照ください。
詳細については、「バケットの作成 」をご参照ください。
[OK] をクリックします。
既存のバケットのサーバ側暗号化を有効にする OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。
左側のナビゲーションウィンドウで、 を選択します。
[サーバ側暗号化] ページで、[設定] をクリックし、次の表の説明に従ってパラメーターを設定します。
パラメーター
説明
[暗号化方式]
オブジェクトの暗号化方式を選択します。有効な値:
[なし] : サーバ側暗号化は無効です。
[OSS マネージド] : OSS で管理されるキーを暗号化に使用します。OSS は、各オブジェクトを暗号化するために異なるキーを使用します。追加の保護のために、OSS はマスターキーを使用してデータ暗号化キーを暗号化します。
[KMS] : デフォルトの KMS で管理される CMK または指定された CMK ID を暗号化と復号に使用します。
KMS 暗号化方式を使用する前に、KMS を有効化する必要があります。詳細については、「KMS の有効化 」をご参照ください。
[暗号化アルゴリズム]
AES256 暗号化アルゴリズムのみがサポートされています。
[暗号化キー]
このパラメーターは、[暗号化方式] を [KMS] に設定した場合にのみ必須です。
暗号化キーを選択します。キーは <alias>(CMK ID) の形式です。この形式では、<alias> は CMK のエイリアスで、CMK ID は CMK の ID です。有効な値:
OSS はデフォルトでサービスキーを作成します : このオプションを選択すると、OSS はこのバケット内のデータを暗号化するためのデフォルトのサービスキーを生成します。バケットからオブジェクトをダウンロードすると、OSS は自動的にオブジェクトを復号します。OSS によって作成されたデフォルトのサービスキーは、alias/acs/oss (CMK ID) の形式です。このサービスキーは KMS コンソールで表示できます。
説明 KMS コンソールでこのサービスキーを表示する前に、ターゲットバケットに少なくとも 1 つのファイルをアップロードする必要があります。これにより、暗号化キーが作成され、OSS サービスに関連付けられます。
[alias/<cmkname>(CMK ID )] : このオプションを選択すると、OSS は指定されたサービスキーを使用してバケット内のデータを暗号化します。暗号化されたオブジェクトの CMK ID は、オブジェクトのメタデータに記録されます。復号権限を持つユーザーは、オブジェクトをダウンロードするときに自動的に復号できます。この形式では、<cmkname> は、キーを作成したときに設定した CMK のオプションの識別子です。
指定された CMK ID を使用する前に、KMS コンソールでバケットと同じリージョンに通常または外部キーを作成する必要があります。詳細については、「キーの作成 」をご参照ください。
[保存] をクリックします。
方法 2: ファイルアップロード時にサーバ側暗号化を設定する 詳細については、「シンプルアップロード 」をご参照ください。
Alibaba Cloud SDK を使用する 方法 1: バケットのサーバ側暗号化を有効にする SDK を使用して、既存のバケットのサーバ側暗号化を有効にすることができます。バケットを作成するときにサーバ側暗号化を有効にすることはできません。次のコードは、一般的な SDK を使用して既存のバケットのサーバ側暗号化を有効にする方法の例を示しています。他の SDK を使用して既存のバケットのサーバ側暗号化を有効にする方法の詳細については、「SDK の概要 」をご参照ください。
Java import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
public class Demo {
public static void main(String[] args) throws 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";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
String region = "cn-hangzhou";
// OSSClient インスタンスを作成します。
// OSSClient が不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
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(request);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}PHP <?php
// autoload ファイルを導入して、依存ライブラリをロードします。
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// コマンドラインパラメーターの説明を指定します。
$optsdesc = [
"region" => ['help' => The region in which the bucket is located.', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
"endpoint" => ['help' => The domain names that other services can use to access OSS', 'required' => False], // (オプション) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
"bucket" => ['help' => The name of the bucket, 'required' => True], // (必須) バケットの名前を指定します。
];
// コマンドラインパラメーターを解析するために長いオプションリストを生成します。
$longopts = \array_map(function ($key) {
return "$key:"; // 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
}, array_keys($optsdesc));
// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);
// 必須パラメーターが設定されているかどうかを確認します。
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help'];
echo "Error: the following arguments are required: --$key, $help"; // 必須パラメーターが設定されていないことを指定します。
exit(1);
}
}
// コマンドラインパラメーターの値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
// 環境変数を使用して AccessKey ID と AccessKey シークレットをロードします。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
// 資格情報プロバイダーを指定します。
$cfg->setCredentialsProvider($credentialsProvider);
// リージョンを指定します。
$cfg->setRegion($region);
// エンドポイントが提供されている場合は、エンドポイントを指定します。
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);
// PutBucketEncryptionRequest オブジェクトを作成し、Key Management Service (KMS) 暗号化方式を使用し、暗号化アルゴリズムを SM4 に設定します。
$request = new Oss\Models\PutBucketEncryptionRequest(
bucket: $bucket,
serverSideEncryptionRule: new Oss\Models\ServerSideEncryptionRule(
applyServerSideEncryptionByDefault: new Oss\Models\ApplyServerSideEncryptionByDefault(
sseAlgorithm: 'KMS', //KMS 暗号化方式を使用します。
kmsDataEncryption: 'SM4' // 暗号化アルゴリズムを SM4 に設定します。
))
);
// putBucketEncryption メソッドを使用して、バケットのサーバ側暗号化設定を構成します。
$result = $client->putBucketEncryption($request);
// 返された結果を表示します。
printf(
'status code:' . $result->statusCode . PHP_EOL . // 返された HTTP ステータスコード。
'request id:' . $result->requestId // リクエストのリクエスト ID。リクエストの一意の識別子です。
);
Node.js 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,
authorizationV4: true,
// バケットの名前を指定します。
bucket: 'yourbucketname'
});
async function putBucketEncryption() {
try {
// バケットの暗号化方式を設定します。
const result = await client.putBucketEncryption("bucket-name", {
SSEAlgorithm: "AES256", // この例では、AES-256 暗号化アルゴリズムが使用されています。KMS を使用して暗号化するには、KMSMasterKeyID を指定する必要があります。
// KMSMasterKeyID: "yourKMSMasterKeyId"。CMK ID を指定します。このパラメーターは、SSEAlgorithm が KMS に設定され、特定の CMK が暗号化に使用される場合に利用可能で必須です。その他の場合は、このパラメーターを空のままにします。
});
console.log(result);
} catch (e) {
console.log(e);
}
}
putBucketEncryption();Python import argparse
import alibabacloud_oss_v2 as oss
# ユーザーが入力したパラメーターを受け取るためのコマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put bucket encryption sample")
# バケットが配置されているリージョンを指定する --region コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケットの名前を指定する --bucket コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 他のサービスが OSS にアクセスするために使用するドメイン名を指定する --endpoint コマンドライン引数を追加します。この引数はオプションです。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# デフォルトのサーバ側暗号化方式を指定する --sse_algorithm コマンドライン引数を追加します。デフォルト値は 'KMS' です。
# 有効な値: KMS (KMS を使用した暗号化)、AES256 (AES-256 を使用した暗号化)、および SM4 (中国暗号アルゴリズム SM4 を使用した暗号化)。
parser.add_argument('--sse_algorithm', help='The default server-side encryption method. Valid values: KMS, AES256, and SM4.', default='KMS')
# SSEAlgorithm が KMS に設定され、指定された CMK が使用される場合のマスターキーの ID を指定する --kms_master_key_id コマンドライン引数を追加します。
# 指定された CMK を使用しない場合は、このパラメーターを空のままにします。
parser.add_argument('--kms_master_key_id', help='The CMK ID that is specified when SSEAlgorithm is set to KMS and a specified CMK is used for encryption. In other cases, leave this parameter empty.', default='')
# オブジェクト暗号化に使用されるアルゴリズムを指定する --kms_data_encryption コマンドライン引数を追加します。
# デフォルト値は 'SM4' です。このパラメーターは、SSEAlgorithm が KMS に設定されている場合にのみ有効です。
parser.add_argument('--kms_data_encryption', help='The algorithm that is used to encrypt objects. If this parameter is not specified, objects are encrypted using AES256. This parameter is valid only when SSEAlgorithm is set to KMS. Valid value: SM4', default='SM4')
def main():
# コマンドライン引数を解析します。
args = parser.parse_args()
# 環境変数から資格情報 (AccessKeyId と AccessKeySecret) をロードします。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# SDK のデフォルト設定をロードします。
cfg = oss.config.load_default()
# 資格情報プロバイダーを設定します。
cfg.credentials_provider = credentials_provider
# バケットが配置されているリージョンを設定します。
cfg.region = args.region
# ユーザーがカスタムエンドポイントを提供した場合、設定でそれを設定します。
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# 設定オブジェクトを使用して OSS クライアントを初期化します。
client = oss.Client(cfg)
# put_bucket_encryption メソッドを呼び出して、バケットの暗号化設定を設定します。
result = client.put_bucket_encryption(
oss.PutBucketEncryptionRequest(
bucket=args.bucket, # 宛先バケットの名前を指定します。
server_side_encryption_rule=oss.ServerSideEncryptionRule(
apply_server_side_encryption_by_default=oss.ApplyServerSideEncryptionByDefault(
kms_master_key_id=args.kms_master_key_id, # マスターキー ID。このパラメーターは、SSEAlgorithm が KMS に設定されている場合にのみ有効です。
kms_data_encryption=args.kms_data_encryption, # オブジェクト暗号化アルゴリズム。このパラメーターは、SSEAlgorithm が KMS に設定されている場合にのみ有効です。
sse_algorithm=args.sse_algorithm, # KMS、AES256、SM4 などのサーバ側暗号化アルゴリズム。
),
),
)
)
# 操作結果のステータスコードとリクエスト ID を出力します。
print(f'status code: {result.status_code}, ' # HTTP ステータスコード。リクエストが成功したかどうかを示します。
f'request id: {result.request_id}') # リクエスト ID。リクエストログの追跡とデバッグに使用されます。
if __name__ == "__main__":
# プログラムのエントリポイント。main 関数を呼び出してロジックを実行します。
main()
C# using Aliyun.OSS;
using 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";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
// ClientConfiguration インスタンスを作成し、必要に応じてパラメーターを変更します。
var conf = new ClientConfiguration();
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// バケットのサーバ側暗号化を設定します。
var request = new SetBucketEncryptionRequest(bucketName, "KMS", null);
client.SetBucketEncryption(request);
Console.WriteLine("Set bucket:{0} Encryption succeeded ", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}Go package main
import (
"log"
"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 {
log.Fatalf("Error creating credentials provider: %v", err)
}
// OSSClient インスタンスを作成します。
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。実際のリージョンを指定してください。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 署名アルゴリズムのバージョンを指定します。
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
log.Fatalf("Error creating OSS client: %v", err)
}
// 暗号化ルールを初期化します。この例では、AES-256 暗号化アルゴリズムが使用されています。
config := oss.ServerEncryptionRule{
SSEDefault: oss.SSEDefaultRule{
SSEAlgorithm: "AES256",
},
}
// OSS バケットの暗号化ルールを設定します。
err = client.SetBucketEncryption("yourBucketName", config)
if err != nil {
log.Fatalf("Error setting bucket encryption: %v", err)
}
log.Println("Bucket encryption set successfully")
}
C++ #include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* OSS にアクセスするために使用されるアカウントに関する情報を初期化します。*/
/* バケットが配置されているリージョンのエンドポイントを指定します。バケットが配置されているリージョンのエンドポイントを指定します。*/
std::string Endpoint = "yourEndpoint";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。*/
std::string Region = "yourRegion";
/* バケットの名前を指定します。例: examplebucket。*/
std::string BucketName = "examplebucket";
/* ネットワークリソースなどのリソースを初期化します。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
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();
return 0;
}方法 2: ファイルアップロード時にサーバ側暗号化を設定する 次のコードは、一般的な SDK を使用してオブジェクトをアップロードするときにサーバ側暗号化を設定する方法の例を示しています。他の SDK を使用してオブジェクトをアップロードするときにサーバ側暗号化を設定する方法の詳細については、「SDK の概要 」をご参照ください。
Java import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.internal.OSSHeaders;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import com.aliyun.oss.model.ObjectMetadata;
import java.io.File;
public class Put {
public static void main(String[] args) throws Exception {
// この例では、エンドポイントは中国 (杭州) に設定されています。実際のリージョンに設定してください。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// エンドポイントに対応するリージョンを指定します。たとえば、cn-hangzhou です。
String region = "cn-hangzhou";
// 環境変数からアクセス資格情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を指定します。たとえば、examplebucket です。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。例: exampledir/exampleobject.txt。
String objectName = "exampledir/exampleobject.txt";
// ローカルファイルの完全なパスを指定します。たとえば、D:\\localpath\\examplefile.txt です。
// ローカルパスを指定しない場合、ファイルはサンプルプログラムが属するプロジェクトに対応するローカルパスからアップロードされます。
String filePath= "D:\\localpath\\examplefile.txt";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// V4 署名アルゴリズムの使用を明示的に宣言します。
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// ObjectMetadata オブジェクトを作成し、サーバ側暗号化方式を AES256 に設定します。
ObjectMetadata metadata = new ObjectMetadata();
metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION, "AES256");
// PutObjectRequest オブジェクトを作成します。
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
putObjectRequest.setMetadata(metadata);
// ファイルをアップロードします。
PutObjectResult result = ossClient.putObject(putObjectRequest);
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}PHP <?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';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
// 環境変数からアクセス資格情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、中国 (杭州) の場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// バケット名を指定します。たとえば、examplebucket です。
$bucket= "examplebucket";
// オブジェクトの完全なパスを指定します。たとえば、exampledir/exampleobject.txt です。完全なパスにバケット名を含めることはできません。
$object = "exampledir/exampleobject.txt";
// ローカルファイルの完全なパスを指定します。たとえば、D:\\localpath\\examplefile.txt です。ローカルパスを指定しない場合、ファイルはサンプルプログラムが属するプロジェクトに対応するローカルパスからアップロードされます。
$filePath = "D:\\localpath\\examplefile.txt";
try{
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
);
$ossClient = new OssClient($config);
$options[OssClient::OSS_HEADERS] = array(
// サーバ側暗号化方式を AES256 に設定します。
"x-oss-server-side-encryption"=>"AES256",
);
// uploadFile メソッドを呼び出してファイルをアップロードし、UploadOptions オブジェクトを渡します。
$ossClient->uploadFile($bucket, $object, $filePath, $options);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . "OK" . "\n");Node.js const OSS = require("ali-oss");
const path = require("path");
const client = new OSS({
// yourregion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) の場合、リージョンを oss-cn-hangzhou に設定します。
region: "oss-cn-hangzhou",
// 環境変数からアクセス資格情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// バケット名を指定します。
bucket: "examplebucket",
});
const headers = {
// サーバ側暗号化方式を AES256 に設定します。
"x-oss-server-side-encryption": "AES256",
};
async function put() {
try {
const result = await client.put(
// オブジェクトの完全なパスを指定します。たとえば、exampledir/exampleobject.txt です。完全なパスにバケット名を含めることはできません。
"exampledir/exampleobject.txt",
// ローカルファイルの完全なパスを指定します。たとえば、D:\\localpath\\examplefile.txt です。ローカルパスを指定しない場合、ファイルはサンプルプログラムが属するプロジェクトに対応するローカルパスからアップロードされます。
path.normalize("D:\\examplefile.jpg"),
{ headers }
);
console.log(result);
} catch (e) {
console.log(e);
}
}
put();
Python # -*- coding: utf-8 -*-
import oss2
import os
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 環境変数からアクセス資格情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、中国 (杭州) の場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# バケット名を指定します。
bucket_name = 'examplebucket0703'
bucket = oss2.Bucket(auth, endpoint, bucket_name)
# ファイルをバイナリモードで開く必要があります。
# ローカルファイルの完全なパスを指定します。ローカルパスを指定しない場合、ファイルはサンプルプログラムが属するプロジェクトに対応するローカルパスからアップロードされます。
local_file_path = 'D:\\examplefile.jpg'
with open(local_file_path, 'rb') as fileobj:
# seek メソッドは、読み取りおよび書き込み操作が 1,000 バイト目から開始されることを指定します。アップロードは、指定した 1,000 バイト目から開始され、ファイルの最後まで続行されます。
fileobj.seek(1000, os.SEEK_SET)
# tell メソッドは現在の位置を返します。
current = fileobj.tell()
# サーバ側暗号化方式を AES256 に設定します。
headers = {
'x-oss-server-side-encryption': 'AES256',
}
# オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めることはできません。
object_key = 'exampledir/object1.jpg'
bucket.put_object(object_key, fileobj, headers=headers)
Go package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
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 インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに設定します。たとえば、中国 (杭州) の場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のリージョンに設定してください。
client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケット名を指定します。たとえば、examplebucket です。
bucket, err := client.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// オブジェクトの完全なパスを指定します。たとえば、exampledir/exampleobject.txt です。完全なパスにバケット名を含めることはできません。
// ローカルファイルの完全なパスを指定します。たとえば、D:\\localpath\\examplefile.txt です。ローカルパスを指定しない場合、ファイルはサンプルプログラムが属するプロジェクトに対応するローカルパスからアップロードされます。
// サーバ側暗号化方式を AES256 に設定します。
err = bucket.PutObjectFromFile("D:\\localpath\\examplefile.txt", "D:\\examplefile.jpg", oss.ServerSideEncryption("AES256"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}ossutil コマンドラインツールを使用する 方法 1: バケットのサーバ側暗号化を有効にする ossutil コマンドラインツールを使用して、バケットのサーバ側暗号化を有効にすることができます。ossutil をインストールするには、「ossutil のインストール 」をご参照ください。
次のコマンドは、examplebucket という名前の既存のバケットのサーバ側暗号化方式を AES256 に設定します。
ossutil api put-bucket-encryption --bucket examplebucket --server-side-encryption-rule "{\"ApplyServerSideEncryptionByDefault\":{\"SSEAlgorithm\":\"AES256\"}}"詳細については、「put-bucket-encryption 」をご参照ください。
方法 2: ファイルアップロード時にサーバ側暗号化を設定する ossutil を使用すると、オブジェクトをアップロードするときにオブジェクトのサーバ側暗号化方式を指定できます。ossutil をインストールするには、「ossutil のインストール 」をご参照ください。次のコマンドは、オブジェクトをアップロードするときにサーバ側暗号化方式を AES256 に設定します。
ossutil cp examplefile.txt oss://examplebucket --metadata=x-oss-server-side-encryption:AES256詳細については、「cp (ファイルのアップロード) 」をご参照ください。
KMS で管理されるキーを使用した暗号化と復号 KMS で管理される CMK を使用して、データを暗号化するためのデータ暗号化キーを生成できます。エンベロープ暗号化メカニズムは、不正なデータアクセスをさらに防ぎます。KMS を使用すると、キーの機密性、完全性、可用性を確保するための高いコストをかけずに、データ暗号化、復号、デジタル署名検証などのビジネス機能に集中できます。
次の図は、SSE-KMS 暗号化方式のロジックを示しています。
SSE-KMS 暗号化方式を使用する場合、次のキーを使用できます。
OSS によって管理されるデフォルトの KMS キーを使用する
OSS は、デフォルトの KMS で管理される CMK を使用して、異なるオブジェクトを暗号化するために異なるキーを生成し、オブジェクトがダウンロードされるときに自動的に復号します。この方法を初めて使用する場合、OSS は KMS プラットフォーム上に OSS で管理される CMK を作成します。
設定方法:
バケットの暗号化方式を設定する
バケットの暗号化方式を KMSCMK ID は指定しません。その後、このバケットにアップロードされたすべてのオブジェクトが暗号化されます。
ターゲットオブジェクトの暗号化方式を設定できます。
オブジェクトをアップロードまたはメタデータを変更するときに、リクエストに x-oss-server-side-encryption パラメーターを含め、その値を KMS に設定します。OSS は、デフォルトの KMS で管理される CMK と AES256 暗号化アルゴリズムを使用してオブジェクトを暗号化します。詳細については、「PutObject 」をご参照ください。
Bring-Your-Own-Key (BYOK) を使用する
KMS コンソールで BYOK マテリアルを使用して CMK を生成した後、OSS は指定された KMS CMK を使用して、異なるオブジェクトを暗号化するために異なるキーを生成できます。暗号化されたオブジェクトの CMK ID は、オブジェクトのメタデータに記録されます。復号権限を持つユーザーのみが、オブジェクトをダウンロードするときに復号できます。
BYOK マテリアルには 2 つのソースがあります。
Alibaba Cloud が提供する BYOK マテリアル: KMS プラットフォームでキーを作成するときに、キーマテリアルのソースとして [Alibaba Cloud KMS] を選択します。
独自の BYOK マテリアル: KMS プラットフォームでキーを作成するときに、キーマテリアルのソースとして [外部] を選択し、必要に応じて外部キーマテリアルをインポートします。詳細については、「キーマテリアルのインポート 」をご参照ください。
設定方法:
バケットの暗号化方式を設定する
バケットの暗号化方式を KMSCMK ID を指定します。その後、このバケットにアップロードされたすべてのオブジェクトが暗号化されます。
ターゲットオブジェクトの暗号化方式を設定できます。
オブジェクトをアップロードまたはメタデータを変更するときに、x-oss-server-side-encryption パラメーターを KMS に設定し、x-oss-server-side-encryption-key-id パラメーターを指定された CMK ID に設定します。この場合、OSS は指定された KMS CMK と AES256 暗号化アルゴリズムを使用してオブジェクトを暗号化します。詳細については、「PutObject 」をご参照ください。
OSS で管理されるキーを使用した暗号化と復号 OSS はデータ暗号化キーを生成および管理し、高強度の多要素セキュリティ対策を使用して保護します。データは、業界標準の 256 ビット高度暗号化標準 (AES-256) を使用して暗号化されます。
設定方法:
バケットの暗号化方式を設定する
バケットの暗号化方式を OSS マネージドに設定し、暗号化アルゴリズムを AES256 に指定します。その後、このバケットにアップロードされたすべてのオブジェクトはデフォルトで暗号化されます。
ターゲットオブジェクトの暗号化方式を設定する
OSS で管理されるキーを使用してサーバ側暗号化を有効にするには、オブジェクトをアップロードまたはメタデータを変更するときに、リクエストに x-oss-server-side-encryption パラメーターを含めます。このパラメーターの値を AES256 に設定します。詳細については、「PutObject 」をご参照ください。
関連 API 操作 前述の操作は API 呼び出しに基づいています。アプリケーションに高いカスタマイズ要件がある場合は、REST API 操作を直接呼び出すことができます。REST API 操作を呼び出すには、署名を計算するためのコードを手動で記述する必要があります。詳細については、「PutBucketEncryption 」をご参照ください。
よくある質問 バケットの暗号化方式を設定した後、OSS は既存のオブジェクトを暗号化しますか?
OSS は、サーバ側暗号化設定が有効になった後にアップロードされたオブジェクトのみを暗号化します。既存のオブジェクトは暗号化しません。既存のオブジェクトを暗号化するには、CopyObject 操作を使用してそれらを上書きできます。