Skip to content

MinIO ストレージ暗号化検証

cf. https://min.io/docs/minio/linux/administration/server-side-encryption/server-side-encryption-sse-kms.html#minio-encryption-sse-kms-quickstart
KMS プロバイダとして HashiCorp Vault キーストアを選択します。

構築手順

Vault サーバ構築

初期起動

cf. https://min.io/docs/kes/integrations/hashicorp-vault-keystore/

# vaultインストール
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vault
# 設定ファイル作成
cat << EOF > config.hcl
storage "raft" {
  path    = "./vault/data"
  node_id = "node1"
}

listener "tcp" {
  address     = "{vaultサーバのIP}:8200"
  tls_disable = "true"
}

api_addr = "http://{vaultサーバのIP}:8200"
cluster_addr = "https://127.0.0.1:8201"
ui = true
EOF
# データ保管用のディレクトリを作成
mkdir -p ./vault/data
# vaultサーバ起動
vault server -config=config.hcl
# vaultエンドポイントを設定
export VAULT_ADDR='http://{vaultサーバのIP}:8200'
# vault初期起動 アンシールキーおよびRoot tokenを保管
vault operator init
# vaultアンシール(3回繰り返す)
vault operator unseal
# vaultに認証を通す(Root tokenを入力)
vault login
# K/V v1シークレット エンジンを有効化
vault secrets enable -version=1 kv

Vault への KES アクセスを設定

# vault ポリシーを作成
cat << EOF > ./kes-policy.hcl
path "kv/*" {
   capabilities = [ "create", "read", "delete", "list" ]
}
EOF
# ポリシーをvaultに書き込む
vault policy write kes-policy kes-policy.hcl
# KESからvaultへの認証を有効化
vault auth enable approle
# KESロールを作成
vault write auth/approle/role/kes-server token_num_uses=0  secret_id_num_uses=0  period=5m
# kes-serverロールをkes-policyにバインド
vault write auth/approle/role/kes-server policies=kes-policy
# KESサーバーのAppRole IDをリクエスト
vault read auth/approle/role/kes-server/role-id
# KESサーバーのAppRoleシークレットをリクエスト
vault write -f auth/approle/role/kes-server/secret-id

KES サーバ構築

KES インスタンス起動

# KESインストール; see also https://min.io/docs/kes/tutorials/getting-started/
wget https://github.com/minio/kes/releases/latest/download/kes-linux-amd64
chmod +x ./kes-linux-amd64
mv ./kes-linux-amd64 /usr/local/bin/kes
# KES実行用の自己証明書を作成
kes identity new --ip "{KESサーバのIP}" --key "private.key" --cert "public.crt" localhost
# MinIO認証情報を作成
kes identity new --key=client.key --cert=client.crt MinIO
# KES サーバー構成ファイルを作成
cat << EOF > config.yaml
admin:
  identity: {identity generated above by 'kes identity new --key=client.key --cert=client.crt MinIO'}

tls:
  key: private.key    # The KES server TLS private key
  cert: public.crt    # The KES server TLS certificate

keystore:
   vault:
     endpoint: http://{vaultサーバのIP}:8200
     version:  v1 # The K/V engine version - either "v1" or "v2".
     engine:   kv # The engine path of the K/V engine. The default is "kv".
     approle:
       id:     {role_id generated above by 'vault read auth/approle/role/kes-server/role-id'}
       secret: {secret_id generated above by 'vault write -f auth/approle/role/kes-server/secret-id'}
EOF
# KESサーバを起動
kes server --config config.yaml

KES 起動確認

# KESサーバを指定
export KES_SERVER=http://127.0.0.1:7373
# クライアントが KES サーバーと通信するために使用するキーを設定
export KES_API_KEY={kes identity generated above by 'kes identity new --key=client.key --cert=client.crt MinIO' such as kes:v1:xxxx}
# (オプション) 構成をテスト
kes status -k

MinIO サーバ構築

cf. https://min.io/docs/kes/tutorials/kes-for-minio/#minio-server-setup

KES サーバにて作成したpublic.crtを MinIO 側に持ってくる必要があるため注意してください。

# MinIOインストール
wget https://dl.min.io/server/minio/release/linux-amd64/minio.deb -O minio.deb
sudo dpkg -i minio.deb
### 各種環境変数を設定
# KESサーバのエンドポイント
export MINIO_KMS_KES_ENDPOINT=https://{KESサーバのIP}:7373
# KES向けのAPIキー
export MINIO_KMS_KES_API_KEY={kes identity generated above by 'kes identity new --key=client.key --cert=client.crt MinIO' such as kes:v1:xxxx}
# 暗号化キーを指定しなかった場合のデフォルトキー
export MINIO_KMS_KES_KEY_NAME=minio-default-key
# 信頼するKESサーバ証明書
export MINIO_KMS_KES_CAPATH=public.crt
# MinIO root資格情報
export MINIO_ROOT_USER=minio
export MINIO_ROOT_PASSWORD=minio123
# MinIOサーバを起動
minio server /data --console-address :9001
上記環境変数を設定ファイルに書き留めておきたい場合 `MINIO_CONFIG_ENV_FILE`を利用してください:
# cat /root/minio-config
MINIO_KMS_KES_ENDPOINT=https://{KESサーバのIP}:7373
MINIO_KMS_KES_API_KEY={kes identity generated above by 'kes identity new --key=client.key --cert=client.crt MinIO' such as kes:v1:xxxx}
MINIO_KMS_KES_KEY_NAME=minio-default-key
MINIO_KMS_KES_CAPATH=public.crt
MINIO_ROOT_USER=minio
MINIO_ROOT_PASSWORD=minio123

# MinIO向け環境変数を記載したファイルパス指定
export MINIO_CONFIG_ENV_FILE=/root/minio-config

# minio server {オブジェクト保存先} --console-address {WebUIのポート指定}
minio server /data --console-address :9001

暗号化設定

# 暗号化キーを作成
mc admin kms key create {alias} minio-key-name
# バケットを暗号化
mc encrypt set sse-kms minio-key-name {alias}/{bucket name}