Oracle Cloud Infrastructureには、OCI Vaultという暗号化キーをHSMで管理することができるサービスがあります。
通常ではクラウド上で暗号化されるデータの暗号化キーはクラウドベンダーが管理していますが、ユーザー自身が暗号キーの管理を行うという要件も増えています。例えば、OCI上のオブジェクトストレージやブロックボリュームなどのストレージ領域をユーザー自身のキーで暗号化させる場合、キーをインポートする必要があります。
ここでは、OCI Vaultの特徴とキーのインポート手順について改めて整理してみます
OCI Vaultの主な特徴
- FIPS 140-2 Level 3に対応
- AES, RSA, ECDSAの3種類の暗号アルゴリズムに対応(2021/2時点)
- 暗号鍵の作成・削除・ローテーション、バックアップ、モニタリング
- OCIサービスの各サービスとシームレスに連携
- 鍵のインポート(BYOK)も可能
2種類のVault
-
Default Vault
- デフォルト。共有パーティションとして提供され、無料で利用可
- ただし、キーのローテーションが20回を超えると課金
-
Virtual Private Vault
- ユーザー専用のパーティションが提供され、排他的に利用可能。性能面でのアドバンテージあり
- Vault単位での課金
##暗号化キーのインポート手順
以下のようにVaultにインポートする暗号鍵を作成する
Copyした公開ラッピング・キーを貼り付けて、パブリック・キーを作成する ※ファイルに貼り付けする際改行が入らないように注意
$ vi public.pem
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtGtYW61HvGLGZDBY0tEHs/5AuRYAV5Vdwm0U4T1ly5tAqZ8h2y/T85nibk/7jovGMx/kbVGxP82uD99H8oPVgHVD664TEG0MhRspa3GlAoTna6E2mvYcbqpKr9wwPfNEjl4kGS31IrcTYiTt9152ow+NtaVnaaFxOO+ysEBf2jYyhF630cSA0+8LNUdL4STX7/x47h/sK9n4koaTIBn0BP567gQru3rn+ggF4o9X8jpfnuioKWaExRKbn5MioxEsfX0PocNVZPp3L370da+wJV1IQF1BPjDgnQ8IyartbRWuiH+W4l1CWnMUMybH6vg8H/1Vi55KNb/q6zO4OTKcvf/yFJDJPGZWC/9yDX1OCSF3M1Umj2YYr2/zg+17zyoMU/K2O+5YgNLIyyHceoOcVtKivBVhkdVoql7WIE3ufOFWVM1l3F+n5f3nANuSonQNkEj45x8eP6Z3+T7ZHio3VFvODIGuNl/T2hMdOWfpF+PJVGk16JI0js1XP1R+KbJTzAWvJpiiyZHPPEpT9pdVw7A52SUgohPhiGlp7kCPCGMcPtzQyjWf0GbtDVNoY+3HW5iKtoLGd042sqfys2T+XCtLlcnpxujy+7ymKssRbmPQ9mRGmN404Hkhzb26hmMSxlFPTjywPSrE/GDj+E5ETc5YOq69bAsxDRjHvZmJm50CAwEAAQ==
-----END PUBLIC KEY-----
暗号鍵を作成 (256bit)
$ openssl rand 32 > aes_key.bin
作成した暗号鍵をパブリック・キーでラッピングする > wrappedkey.bin (インポート用の暗号鍵)が作成される
$ openssl pkeyutl -encrypt -in "aes_key.bin" -inkey "public.pem" -pubin -out "wrappedkey.bin" -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
-
ポリシーに各サービスがインポートした鍵にアクセスができるようにポリシーに追加する
Allow service blockstorage,objectstorage-<リージョン名>, FssOc1Prod, oke to use keys in compartment コンパートメント名
キー管理のドキュメントはこちら
##OCI CLIを利用した暗号化キーのインポート手順
# AESキーの作成
$ openssl rand 32 >aeskey
# Vaultのラッピングキーをコピーしwrapping_key というファイルで保存する
-----BEGIN PUBLIC KEY-----
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-----END PUBLIC KEY-----
# AESキーをラッピングキーで暗号化
option) -in AESキーファイル -inkey ラッピングキー -pubin -out 暗号化ラッピングされたAESキーファイル名
openssl pkeyutl -encrypt -in aeskey -inkey wrapping_key -pubin -out rapped_aeskey -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
# ラッピング(暗号化)されたAESキーファイルをBase64でエンコード
base64 ./rapped_aeskey
# インポートするキーはJSONフォーマットが必要。なのでwrapped_import_key.jsonという名前でJsonファイルを作成する
{ “wrappingAlgorithm”: “RSA_OAEP_SHA256”, “keyMaterial”: “Base64でエンコードしたラッピングキーをここに貼り付ける" }
# 暗号アルゴリズムを指定するkey_shape.jsonファイルを作成
{"algorithm": "AES", "length": 32}
# インポートの実行
option) --wrapped-import-key インポートするキー(JSON) --key-shape 指定した暗号アルゴリズム(JSON)
oci kms management key import --wrapped-import-key file://./wrapped_import_key.json --compartment-id ocid1.compartment.oc1..aaaaaaaa6it5wsxbeoyxpbxmq5aupsag7jo4mxsot7hhuxvjp5uqnvuxgf4a --display-name AEStestKey3 --endpoint https://xxxxxxxxx-management.kms.us-ashburn-1.oraclecloud.com --key-shape file://./key_shape.json
参考になるスクリプトはこちら
OCI Vaultで電子署名を行う