常時機密機能が有効になっているApsaraDB RDS for MySQLインスタンスのセキュリティは、必要なマスター暗号化キー (MEK) の管理に依存します。 Alibaba Cloud Key Management Service (KMS) を使用して、便利で安全な方法でMEKを取得および管理できます。 このトピックでは、Alibaba Cloud KMSをEncJDBCの常時機密データベースに接続する方法と、RDSインスタンスのMEKを管理する方法について説明します。
背景情報
常時機密機能が有効になっているRDSインスタンスのMEKは、セキュアな非対称暗号化プロトコルを使用してクライアントからサーバーに送信されます。 この場合、クライアントとサーバは同じ鍵を使用し、対称暗号化を使用することによって、安全で信頼できる方法でクライアントとサーバの間でデータを伝送することができる。 常時機密機能が有効になっているRDSインスタンスのセキュリティを確保するには、MEKを安全に保存および管理する必要があります。 MEKの取得と管理には、Alibaba Cloud KMSを使用することを推奨します。
Alibaba Cloud KMSは、クラウドのデータ暗号化要件を満たすように設計された暗号化サービスです。 KMSは、State Cryptography Administration (SCA) に準拠したキーサービスと、アプリケーション用の使いやすい暗号化および復号化サービスを提供します。 KMSでは、キーを使用して、キーに基づいて機密データ資産を暗号化および保護できます。
Alibaba Cloud KMSは、Key ManagementとSecrets Managerをサポートしています。 Secrets Managerを使用して、常時機密機能が有効になっているRDSインスタンスのMEKを管理できます。
Secrets Managerは、ハードコードされたシークレットによる機密データの漏洩を防ぐために、シークレットを暗号化および管理します。 データの安全性が向上します。 機密データには、MEKと貴重な資産が含まれます。
前提条件
常に機密機能が有効になっています。 詳細については、「常に機密機能の有効化」をご参照ください。
KMSをEncJDBCから常時機密データベースに接続するための設定が完了しました。 詳細については、「EncJDBC」をご参照ください。
EncJDBC 1.0.6以降がインストールされています。
KMSインスタンスが作成されます。 詳細については、「KMSインスタンスの購入と有効化」をご参照ください。
影響
KMSが使用できない場合、クライアントドライバーEncJDBCも使用できません。
課金ルール
KMSをEncJDBCから常に機密のデータベースに接続する場合、ApsaraDB RDSによって課金されることはありません。 ただし、KMSによるSecrets Managerの使用に対して課金されます。詳細については、 「課金方法」をご参照ください。
手順
Alibaba Cloud KMSをEncJDBCから常時機密データベースに接続するには、次の手順を実行します。
MEKを生成します。
説明MEKは128ビットの鍵である。 OpenSSLやAlibaba Cloud KMSなどのさまざまなツールを使用してMEKを生成できます。
Secrets Managerを使用して、Alibaba Cloud KMSでMEKを管理します。
必要な常時機密データベースにKMSを接続できるEncJDBCを設定します。
ステップ1: MEKの生成
16ビットの16進文字列で表される128ビットのキーを取得する必要があります。
例: 00112233445566778899aabbccddeeff.
OpenSSLを使用するか、KMSのGenerateDataKey操作を呼び出してMEKを生成できます。
OpenSSL
説明LinuxオペレーティングシステムにはOpenSSLが提供されます。 Linuxオペレーティングシステムを使用している場合は、OpenSSLをインストールする必要はありません。 Windowsオペレーティングシステムを使用する場合は、OpenSSLソフトウェアパッケージをダウンロードしてOpenSSLをインストールする必要があります。 詳細については、Win32/Win64 OpenSSLページをご覧ください。
たとえば、Linuxオペレーティングシステムを使用している場合、次のコマンドを実行してMEKを生成できます。
openssl rand -hex 16
GenerateDataKey操作を呼び出すときは、KMSで顧客マスターキー (CMK) のIDを指定し、NumberOfBytesパラメーターを16に設定する必要があります。 NumberOfBytesパラメーターは、生成するMEKの長さを指定します。
応答に表示されるプレーンテキストパラメータは、ランダムに生成されるBase64-encoded 128ビットMEKを示す。 後で使用するには、Plaintextパラメーターの値を16進文字列に変換する必要があります。
ステップ2: KMSでMEKを管理する
KMSコンソールで、またはKMS API操作を呼び出して、MEKを管理できます。
MEKを管理する前に、MEKが16桁の16進文字列であることを確認してください。
KMSコンソール
KMSコンソールの [秘密] ページに移動します。
[シークレットの作成] をクリックします。 表示されるダイアログボックスで、[Generic Secrets] をクリックし、[Secret name] パラメーターを設定し、[Plain Text] パラメーターの右側にある [Plain Text] をクリックして、生成されたMEKを入力します。 Secret InitVersionパラメーターの値を選択するか、デフォルト値を保持することができます。
[次へ] をクリックし、[次へ] をクリックします。
[OK] をクリックします。
説明MEKは暗号化され、Alibaba Cloud KMSに安全に保存されます。 機密を作成するシークレットの名前とバージョンを保持する必要があります。 この情報は、後続の操作でMEKをEnJDBCにインポートするときに必要です。
KMS API操作
CreateSecret操作を呼び出して、Alibaba Cloud KMSでMEKを管理できます。
ステップ3: EnJDBCからKMSを常に機密のデータベースに接続する
pom.xmlファイルに依存関係を追加します。
<dependency> <groupId>com.aliyun</groupId> <artifactId>alibabacloud-kms20160120</artifactId> <version>1.0.5</version> </dependency>
MEKを設定します。
EncJDBCで提供されている手順に従って、MEKを設定できます。 このセクションでは、Alibaba Cloud KMSを使用してMEKを設定する方法について説明します。
ALIBABA_CLOUD_ACCESS_KEY_ID
、ALIBABA_CLOUD_ACCESS_KEY_SECRET
、KMS_SECRET_NAME
、KMS_REGION_ID
、およびKMS_SECRET_VERSION
のパラメーターが設定中に必要です。 次の情報は、上記のパラメーターの値を指定します。Alibaba CloudアカウントのAccessKey ID
、Alibaba CloudアカウントのAccessKey secret
、作成されたシークレットの名前
、KMSインスタンスが存在するリージョンのID
、および作成されたシークレットのバージョン
。KMS_SECRET_VERSION
パラメーターはオプションです。 デフォルトでは、作成したシークレットの最新バージョンが使用されます。次の方法を使用して、MEKを設定できます。 例:
JDBCプロパティ
props.setProperty("ALIBABA_CLOUD_ACCESS_KEY_ID", "xxx"); props.setProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET", "xxx"); props.setProperty("KMS_SECRET_NAME", "confidential-mysql"); props.setProperty("KMS_REGION_ID", "hangzhou"); props.setProperty("KMS_SECRET_VERSION", "v1"); // Optional.
構成ファイルの設定
ALIBABA_CLOUD_ACCESS_KEY_ID=xxx ALIBABA_CLOUD_ACCESS_KEY_SECRET=xxx KMS_SECRET_NAME=confidential-mysql KMS_REGION_ID=cn-hangzhou KMS_SECRET_VERSION=v1 # Optional.
上記の設定を完了すると、MEKが設定されます。
MEK=001122334455566778899aabbccddeeff
URL設定
この方法を使用する場合は、次の情報を元のURLに追加する必要があります。
ALIBABA_CLOUD_ACCESS_KEY_ID=xxx&ALIBABA_CLOUD_ACCESS_KEY_SECRET=xxx&KMS_SECRET_NAME=機密-mysql&KMS_REGION_ID=hangzhou
例:
jdbc:mysql:encdb:// hostname:port/db?ALIBABA_CLOUD_ACCESS_KEY_ID=xxx&ALIBABA_CLOUD_ACCESS_KEY_SECRET=xxx&KMS_SECRET_NAME=機密-mysql&KMS_REGION_ID=hangzhou
上記のいずれかの方法を使用してMEKを設定すると、MEKを手動で管理する必要がなくなります。 MEKは、Alibaba Cloud KMSのSecrets Managerによって管理されます。