2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Oracle Cloud] Object Storage に SSE-C で暗号化してセキュアにアップロード

Posted at

はじめに

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 で検証をします。

1605440315815.png

アップロード対象のファイルを確認します。

[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 を見ると、ファイルが格納されています。ダウンロードを押してみると...

1605441105538.png

エラーになります。SSE-C を使っているため、ダウンロードする時にも、データ暗号化キーを指定しないとダメです。

1605441128624.png

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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?