スマートスタイル TECH BLOG

データベース&クラウド技術情報

AWS KMS プラグイン + Data-at-Rest Encryption

本記事は MariaDB Corporation より寄稿された記事となります

はじめに

MariaDB Server は バージョン 10.1 からデータ暗号化(Data-at-Rest Encryption)をサポートしていますが,暗号化鍵の管理において AWS KMS(Key Management Service)を利用することが可能となっています。

今回は Amazon EC2 インスタンスに MariaDB Server 10.4 をインストールし,AWS KMS で生成した暗号鍵を利用してデータの暗号化を行ってみます。

実行環境

AWS SDK C++(license: Apache License 2.0), AWS KMS プラグイン(license: GPL v2.0)をソースコードからビルドする必要があるため,今回は 4 vCPU / 16 GB メモリのインスタンスタイプを利用しました。

  • Amazon EC2 インスタンスタイプ: t2.xlarge
  • OS: CentOS 7.6.10 (SELINUX=disabled)
  • MariaDB : Community Server 10.4.7

cmake3 のインストール

AWS SDK C++ のビルドにバージョン 3.2 以降の cmake が必要となりますが,CentOS 7.6 標準の cmake は 2.8 ですので,cmake3 を事前にインストールします。

AWS SDK C++ KMS クライアントのビルド事前準備

Setting Up the AWS SDK for C++に従い AWS SDK C++ の依存パッケージをインストールします。

MariaDB Server aws_key_management プラグインのビルド

GitHub から MariaDB Community Server 10.4.7 を clone, AWS KMS プラグインのみビルドします。

ビルドしたプラグインを MariaDB プラグインディレクトリにコピーします。

MariaDB Community Server 10.4.7 のインストール

レポジトリ設定を行い,MariaDB Community Server 10.4.7 をインストール,起動します。

IAM Role 作成,EC2 インスタンスへのアタッチ

AWS KMS Encryption Plugin Setup Guide には,/var/lib/mysql/.aws/credentials に AWS Access Key ID と Secret Access Key を記述するよう記載されていますが,MariaDB Server を EC2 上で稼働させる場合は,IAM Role をアタッチすることで AWS アクセスキーをテキストファイルに平文(plain text)で記述する必要がなくなり,よりセキュアな運用形態となります。

IAM / KMS管理権限を持つ AWS アカウントにて AWS CLI を利用し,AWSKeyManagementServicePowerUser ポリシーを割り当てた IAM Role を作成します。

以下のようなシェルスクリプトを作成します。

ここで,ec2-role-trust-policy.json は以下のようなポリシードキュメントになります。

kms-power-user という Role を作成してみます。

EC2 ダッシュボードで EC2 インスタンスを選択,Actions – Instance Settings – Attach/Replace IAM Role から作成した Role を Apply します。

既存EC2インスタンスにIAMロールをアタッチ

AWS KMS Key 作成

AWS CLI を用い,暗号鍵を作成します。

以下のようなシェルスクリプトを用い暗号鍵を作成,aliasを設定,ポリシーJSONドキュメントを作成,適用します(jq コマンド,dos2unix コマンドを必要とします)。

ここでは,alias/test-mariadb という alias を設定し,kms-power-userという IAM Role を割り当てます。

動作確認

暗号化(Data-at-Rest Encryption)無効の場合

まず比較のために Data-at-Rest Encryption 無効のままで,テストテーブルを作成,データを確認します。

strings コマンドでテーブルデータに含まれている文字列を確認します。

Data-at-Rest Encryption が無効にされている場合,テーブルデータ中の文字列が見えてしまいます。

暗号化(Data-at-Rest Encryption)有効の場合

暗号化を行う場合は /etc/my.cnf.d/server.cnf を以下のように設定し,

mariadb service を再起動します。

エラーログに以下のようなログが記録されていれば,AMS KMS で作成された暗号鍵で正常に Data-at-Rest Encryption が行われています。

さきほどと同様にテストテーブルを作成,テストデータを INSERT します。

暗号化なしの場合と同様に,/var/lib/mysql/test で strings コマンドを実行してみます。

データが暗号化されていることが確認できました。

トラブルシューティング

エラーログに以下のようなエラーが記録されている場合は,SELinux が有効になっていると考えられますので,無効にするか,AWS API による KMS へのアクセスを許可してください。

まとめ

AWS KMS プラグインを用いて,MariaDB Server 10.4 のテーブルデータの暗号化を試しました。

今回 IAM Role 作成,KMS Key 作成に用いたシェルスクリプトは以下の GitHub レポジトリにあります。

https://github.com/goto-satoru/create-aws-kms-key


執筆者情報

後藤 智(GOTO Satoru)
2017年6月よりMariaDB CorporationにてAPAC(Asia Pacific)地域におけるプリセールス業務を主に担当。現在は主に日本を担当。
この執筆者の他の記事をよむ
Return Top