はじめに
Oracle Cloud Infrastructure(OCI) の Object Storage には、データ暗号化に SSE-C(Server-Side Encryption with Customer-provided keys) が使えます。これは、Object Storage にデータをアップロードする際に、AES のキーを一緒に渡すことで、Object Storage 側でその AES キーを使いデータの暗号化をしてくれます。その後、AES キーは破棄されます。逆にデータを取り出すときは、アップロードする時に指定した AES キーを指定しないとダウンロードできません。つまり、AES キーを持っている人でないとデータのダウンロードが出来なくなり、よりセキュアなオブジェクト管理が出来ます。
今回の記事では、SSE-C の方法を紹介します。
OCI Vault
SSE-C をするために、AES 256 bit の鍵が必要です。独自で AES キーを作っていもいいですが、鍵の管理が面倒なので、OCI Vault を使った方が楽です。OCI Vault の使い方が気になる方はこちらをどうぞ。
OCI CLI で、OCI Vault から AES 256bit (32byte) のデータ暗号化キーを生成します。
oci kms crypto generate-data-encryption-key \
--key-id ocid1.key.oc1.ap-tokyo-1.brp274vvaabe6.abxhiljre3ayxcxxr66zjuoyyjh2ld76dvkf7ogl4dgk6cd4okgbkvv5fi7q \
--include-plaintext-key true \
--endpoint https://brp274vvaabe6-crypto.kms.ap-tokyo-1.oraclecloud.com \
--key-shape '
{
"algorithm": "AES",
"length": 32
}
'
実行例
{
"data": {
"ciphertext": "QXLDJKpVs+vFAOfo9TSbYJUGbnZfvl9g4Vmax+Tof84DFXMm6AgIzXEKRAUa2r5aPB0UFL3U8HdN9EARr0bmJu/JC/0k1AAAAAA=",
"plaintext": "RzUrIJZAHY22sbmhVDMLPgPcPv76pFnAi9G2a6bFXIs=",
"plaintext-checksum": "3654972344"
}
}
データ暗号化キー (平文) を、ファイル化します。OCI CLI で実施するためファイル化しますが、本来はあまり推奨できることではありません。よりセキュアにするために、SDK を使ってメモリ上でデータ暗号化キー(平文)を扱うのが望ましいでしょう。
echo -n "RzUrIJZAHY22sbmhVDMLPgPcPv76pFnAi9G2a6bFXIs=" > /home/opc/work/data-encrypt-key.txt
Object Storageで SSE-C
sse-c-bucket という名前の Bucket で検証をします。
アップロード対象のファイルを確認します。
[opc@vault01 work]$ cat /home/opc/work/rawtext.txt
Hello, OCI Vault! I am test file!
SSE-C を使って、アップロードを行います
- bucket-name : Bucket 名
- file : アップロード対象のファイル
- encryption-key-file : AES 256bit のキーを指定 (データ暗号化キー(平文)を指定)
oci os object put \
--bucket-name sse-c-bucket \
--file /home/opc/work/rawtext.txt \
--encryption-key-file /home/opc/work/data-encrypt-key.txt
Object Storage を見ると、ファイルが格納されています。ダウンロードを押してみると...
エラーになります。SSE-C を使っているため、ダウンロードする時にも、データ暗号化キーを指定しないとダメです。
OCI CLI でも普通に取得してみましょう
oci os object get \
--bucket-name sse-c-bucket \
--name rawtext.txt \
--file /home/opc/work/get.txt
やはりエラーになります
{
"code": null,
"message": "The service returned error code 400",
"opc-request-id": "nrt-1:AF2eZIzFJVmYJXztITl1P6a6M7bsk-peq0_Bdc_azNbovpdeG1-Sj4jHfzhBTTZV",
"status": 400
}
データ暗号化キーを渡してダウンロードをしてみます。
oci os object get \
--bucket-name sse-c-bucket \
--name rawtext.txt \
--file /home/opc/work/get.txt \
--encryption-key-file /home/opc/work/data-encrypt-key.txt
正常にダウンロードできました。
[opc@vault01 work]$ cat /home/opc/work/get.txt
Hello, OCI Vault! I am test file!
参考URL