Object Storage Service (OSS) は、サーバー側暗号化が設定されているバケットにアップロードされたオブジェクトを暗号化し、暗号化されたオブジェクトを保存します。 GetObjectを呼び出してオブジェクトをダウンロードすると、OSSはオブジェクトを復号して返します。 x-oss-server-side-encryptionヘッダーは、オブジェクトがサーバー側で暗号化されていることを宣言するためにレスポンスに含まれます。
レスポンス内のx-oss-server-side-encryptionヘッダーの詳細については、「レスポンスヘッダー」をご参照ください。
シナリオ
OSSはサーバー側暗号化を使用して静的データを保護します。 ディープラーニングサンプルやオンライン共同作業ドキュメントの保存など、より高いセキュリティやコンプライアンスが必要なシナリオでは、この機能を設定できます。
暗号化方法
次の表に、さまざまなシナリオで使用できるサーバー側の暗号化方法を示します。
暗号化方法 | 説明 | シナリオ | 備考 | 課金ルール |
KMS管理CMKを使用したサーバー側暗号化 (SSE-KMS) | key Management Service (KMS) で管理されるデフォルトの顧客マスターキー (CMK) を使用するか、CMKを指定してデータを暗号化または復号化できます。 この方法は、暗号化または復号化のためにネットワーク経由でKMSサーバーにデータを送信する必要がないため、費用対効果が高くなります。 | セキュリティとコンプライアンスの要件を満たすようにCMKを指定する必要があります。 |
| KMSに保存されているCMKを使用してデータを暗号化または復号するAPI操作を呼び出すと、課金されます。 料金の詳細については、「」をご参照ください。KMSの請求. |
OSS管理キーを使用したサーバー側暗号化 (SSE-OSS) | OSSが管理するキーを使用して、オブジェクトを暗号化できます。 セキュリティを向上させるために、OSSはマスターキーを使用してキーを暗号化します。 | 基本的な暗号化機能のみが必要です。 キーを手動で管理する必要はありません。 | なし。 | 無料です。 |
使用上の注意
サーバー側の暗号化は、次のリージョンでサポートされています。中国 (杭州) 、中国 (上海) 、中国 (青島) 、中国 (北京) 、中国 (張家口) 、中国 (フフホト) 、中国 (ウランカブ) 、中国 (深セン) 、中国 (河源) 、中国 (広州) 、中国 (成都) 、中国 (香港) 、米国 (シリコンバレー) 、米国 (バージニア) 、日本 (東京) 、韓国 (ソウル) 、シンガポール、マレーシア (クアラルンプール) 、インドネシア (ジャカルタ) 、フィリピン (マニラ) 、タイ (バンコク) 、ドイツ (フランクフルト) 、英国 (ロンドン) 、アラブ首長国連邦 (ドバイ).
サーバー側の暗号化方法がSSE-KMSに設定されているバケットでオブジェクトのアップロード、ダウンロード、またはアクセス操作を実行する場合は、指定された顧客CMKを使用する権限があり、要求が匿名ではないことを確認してください。 それ以外の場合、要求は失敗し、
[この要求はkmsで禁止されています]
エラーメッセージが返されます。デフォルトでは、ミラーリングベースのback-to-originルールを使用して取得したオブジェクトは暗号化されません。
バケットのサーバー側の暗号化方法を設定または変更しても、バケット内の既存のオブジェクトのサーバー側の暗号化方法には影響しません。
オブジェクトは、一度に1つのサーバー側暗号化方法のみで暗号化できます。
バケットにサーバー側の暗号化を設定している場合でも、オブジェクトをバケットにアップロードまたはコピーするときに、オブジェクトに別の暗号化方法を使用できます。 オブジェクトに設定された暗号化方法が優先されます。 詳細は、「PutObject」をご参照ください。
必要な権限。
RAMユーザーがサーバー側の暗号化を使用してさまざまなシナリオでオブジェクトを暗号化および復号化する場合、RAMユーザーは必要な権限を持っている必要があります。
RAMユーザーに権限を付与する方法の詳細については、「RAMユーザーにカスタムポリシーをアタッチする」をご参照ください。
バケットのサーバー側暗号化方式の設定
バケットを管理するための権限。
PutBucketEncryption
およびGetBucketEncryption
を呼び出す権限。バケットのサーバー側暗号化方法をSSE-KMSに設定し、特定のCMKを使用してデータを暗号化する場合に、次の操作を呼び出すための権限:
ListKeys
、Listalias
、ListAliasesByKeyId
、およびDescribeKey
。 次のサンプルコードは、RAMユーザーにRAMポリシーをアタッチして、RAMユーザーに上記の権限を付与する方法の例を示しています。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:List*", "kms:DescribeKey" ], "Resource": [ "acs:kms:*:141661496593****:*" // The RAM user is allowed to use all KMS-managed CMKs that belong to the Alibaba Cloud account. To allow the RAM user to use only a specific CMK, enter the CMK ID. ] } ] }
サーバー側暗号化方式が設定されているバケットにオブジェクトをアップロードする
バケットにオブジェクトをアップロードする権限。
バケットのサーバー側暗号化方法をSSE-KMSに設定し、特定のCMKを使用してデータを暗号化する場合に、次の操作を呼び出す権限:
ListKeys
、ListAliases
、ListAliasesByKeyId
、DescribeKey
、GenerateDataKey
、およびDecrypt
。 次のサンプルコードは、RAMユーザーにRAMポリシーをアタッチして、RAMユーザーに上記の権限を付与する方法の例を示しています。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:List*", "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": [ "acs:kms:*:141661496593****:*" // The RAM user is allowed to use all CMKs that belong to the Alibaba Cloud account. To allow the RAM user to use only a specific CMK, enter the CMK ID. ] } ] }
サーバー側暗号化方式が設定されているバケットからオブジェクトをダウンロードする
バケット内のオブジェクトにアクセスするための権限。
サーバー側の暗号化方法をバケットに対してSSE-KMSに設定し、特定のCMKを使用する場合に、
Decrypt
操作を呼び出すための権限。 次のサンプルコードは、RAMユーザーにRAMポリシーをアタッチして、RAMユーザーに上記の権限を付与する方法の例を示しています。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt" ], "Resource": [ "acs:kms:*:141661496593****:*" // The RAM user has the permissions to use all CMKs that belong to the Alibaba Cloud account. To allow the RAM user to use only a specific CMK to decrypt objects, enter the CMK ID. ] } ] }
方法
OSSコンソールの使用
OSS SDKの使用
ossutilの使用
KMSマネージドCMKを使用したオブジェクトの暗号化と復号化
KMS管理CMKを使用して、オブジェクト暗号化用のキーを生成できます。 エンベロープ暗号化メカニズムは、不正なデータアクセスに対する追加の保護を提供します。 KMSにより、キーのセキュリティ、整合性、可用性を手動で維持する必要がなくなります。 これにより、データの暗号化、データの復号化、デジタル署名の生成と検証に集中できます。
次の図は、SSE-KMSの暗号化ロジックを示しています。
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」をご参照ください。
OSS API
ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳細については、「PutBucketEncryption」をご参照ください。
よくある質問
バケットのサーバー側暗号化を設定した後、OSSはバケット内の既存のオブジェクトを暗号化しますか?
いいえ。OSSは、バケットにサーバー側暗号化が設定された後にアップロードされたオブジェクトのみを暗号化し、バケット内の既存のオブジェクトは暗号化しません。 バケット内の既存のオブジェクトを暗号化する場合は、CopyObject操作を呼び出して既存のオブジェクトを上書きできます。