Oracle Key Vaultでの暗号化

シークレットマネージャーの接続情報をOracle Key Vaultで保護

Keeperシークレットマネージャーは、Oracle Key Vaultと統合することで、Keeperシークレットマネージャーの構成ファイルを保護できます。この統合により、ローカル環境の接続情報を安全に守りながら、すべてのシークレット情報をゼロ知識暗号化で保護するKeeperのセキュリティ機能を活用できます。

機能

  • Keeperシークレットマネージャーの構成ファイルをOracle Key Vaultで暗号化・復号化

  • シークレットマネージャーの接続情報への不正アクセスを防止

  • コードの最小限の変更で導入可能。すべてのKeeperシークレットマネージャーSDK機能と互換性あり

要件

セットアップ

1. モジュールのインストール

GradleまたはMavenを使用してプロジェクトをセットアップ

Gradle

repositories {
  mavenCentral()
}

dependencies {
  implementation("com.keepersecurity.secrets-manager:oracle:1.0.0")
  implementation("com.keepersecurity.secrets-manager:core:17.0.0")
  implementation("com.oracle.oci.sdk:oci-java-sdk-keymanagement:3.60.0")
  implementation("com.oracle.oci.sdk:oci-java-sdk-common-httpclient-jersey:3.60.0") // or the latest version
  implementation("com.oracle.oci.sdk:oci-java-sdk-common:3.60.0")
  implementation("com.fasterxml.jackson.core:jackson-databind:2.18.2")
  implementation("com.fasterxml.jackson.core:jackson-core:2.18.2")
  implementation("com.google.code.gson:gson:2.12.1")
  implementation("org.slf4j:slf4j-simple:2.0.16")
  implementation("org.bouncycastle:bc-fips:1.0.2.4")
}

Maven

<!-- KMS-core -->
    <dependency>
     <groupId>com.keepersecurity.secrets-manager</groupId>
     <artifactId>oracle</artifactId>
     <version>1.0.0</version>
    </dependency>
    <dependency>
     <groupId>com.keepersecurity.secrets-manager</groupId>
     <artifactId>core</artifactId>
     <version>17.0.0</version>
    </dependency>

<!-- oci-kv -->
   <dependency>
       <groupId>com.oracle.oci.sdk</groupId>
       <artifactId>oci-java-sdk-keymanagement</artifactId>
       <version>3.60.0</version>
   </dependency>
   <dependency>
       <groupId>com.oracle.oci.sdk</groupId>
       <artifactId>oci-java-sdk-common-httpclient-jersey</artifactId>
       <version>3.60.0</version>
   </dependency>
   <dependency>
       <groupId>com.oracle.oci.sdk</groupId>
       <artifactId>oci-java-sdk-common</artifactId>
       <version>3.60.0</version>
   </dependency>
   	
   <!--gson -->
   <dependency>
   	<groupId>com.google.code.gson</groupId>
   	<artifactId>gson</artifactId>
   	<version>2.12.1</version>
   </dependency>

   <!--jackson-core -->
   <dependency>
   	<groupId>com.fasterxml.jackson.core</groupId>
   	<artifactId>jackson-core</artifactId>
   	<version>2.18.2</version>
   </dependency>
   	
   <!--jackson-databind -->
   <dependency>
   	<groupId>com.fasterxml.jackson.core</groupId>
   	<artifactId>jackson-core</artifactId>
   	<version>2.18.2</version>
   </dependency>
   	
   <!-- slf4j-api -->
   <dependency>
   	<groupId>org.slf4j</groupId>
   	<artifactId>slf4j-api</artifactId>
   	<version>1.7.32</version>
   	<scope>runtime</scope>
   </dependency>

   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>2.0.16</version>
   </dependency>   	
   <!-- bc-fips -->
   <dependency>
   	<groupId>org.bouncycastle</groupId>
   	<artifactId>bc-fips</artifactId>
   	<version>1.0.2.4</version>
   </dependency>
   	

2. Oracle KVの接続を構成

Oracle Key Vault インスタンスが利用可能であること、そしてそのOCID (Oracle Cloud Identifier) を把握していることを確認してください。なお、oci key managementライブラリはデフォルトで~/.oci/configにあるOCI設定ファイルを使用します。

Oracleキーのセットアップの詳細については、Oracleの公式ドキュメントをご参照ください。

または、Oracle Key Vault にアクセスするための情報を含め、OCI環境に適した設定を追加する必要があります。

設定ファイルは以下のようになります (実際の情報に置き換えてください)

[DEFAULT] user=ocid1.user.oc1..example_unique_id fingerprint=xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx key_file=/path/to/your/private/api/key.pem tenancy=ocid1.tenancy.oc1..example_unique_id region=us-phoenix-1

3. コードにOracle Key Vaultストレージを追加

Oracleとの接続が設定されると、統合機能を使ってKSM構成を暗号化および復号化するためのキーを取得できます。あわせて、シークレットマネージャーSDKにKMSをストレージとして使用するよう指示する必要があります。

Oracle Key Vault統合の使用

セットアップが完了すると、Oracle Key Vaultとの統合により、シークレットマネージャーSDKのすべての機能がそのまま使えるようになります。KSM構成ファイルの暗号化や復号化を行うには、コードがOCIキーにアクセスできる必要があります。 指定された接続認証情報の使用

この操作を行うには、まず OracleKeyValueStorage インスタンスを作成し、それを SecretManagerOptions コンストラクタに渡します。

OracleKeyValueStorage には、プロファイルと構成が記載されたシークレットマネージャーの構成ファイル名が必要です。

import java.security.Security;
import org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider;
import static com.keepersecurity.secretsManager.core.SecretsManager.initializeStorage;
import com.keepersecurity.secretmanager.oracle.kv.OracleKeyValueStorage;
import com.keepersecurity.secretmanager.oracle.kv.OracleSessionConfig;
import com.keepersecurity.secretsManager.core.SecretsManagerOptions;
import com.oracle.bmc.Region;


class Test {
	public static void main(String args[]){
		String configPath = "<~/.oci/config>";
		String cryptoEndpoint = "https://<>-crypto.kms.<oracle_cloud_region>.oraclecloud.com";
		String vaultId = "<OCI VAULT ID>";
		String keyId = "<OCI KEY ID>";
		String keyVersionId = "<OCI KEY VERSION>";
		String configFileLocation = "<KSM CONFIG FILE LOCATION>";
		String profile = "<OCI CONFIG PROFILE EX: DEFAULT>"; // プロファイル名
		String oneTimeToken = "<Keeper One Time Token>";
		String managementEndpoint =  "https://<>-management.kms.<oracle_cloud_region>.oraclecloud.com";
		Region region = Region.<cloud_region>;
		Security.addProvider(new BouncyCastleFipsProvider());
		try{
			//Oracle KV構成の設定 
			OracleSessionConfig oracleSessionConfig = new OracleSessionConfig(configPath, cryptoEndpoint, managementEndpoint, vaultId, keyId, keyVersionId, region);
			//ストレージを取得 
			OracleKeyValueStorage oracleKeyValueStorage = new OracleKeyValueStorage(configFileLocation, profile, oracleSessionConfig);
			initializeStorage(oracleKeyValueStorage, oneTimeToken);
			SecretsManagerOptions options = new SecretsManagerOptions(oracleKeyValueStorage);
			//getSecrets(options)
		}catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
}

追加オプション

キーの変更

KSM構成の暗号化に使用するキーを変更することも可能です。以下の例は、そのために必要なコードとなります。

//`changeKey(keyID, keyVersion)` メソッドを使用すると、新しいキーIDとバージョンでKSM構成ファイルを再暗号化できます。

String newKeyID = "<new Key ID>";
String newKeyVersion = "<New Key Version>";
OracleKeyValueStorage oracleKeyValueStorage = new OracleKeyValueStorage(configFileLocation, profile, oracleSessionConfig);
oracleKeyValueStorage.changeKey(newKeyID, newKeyVersion); // Change the key for encryption/decryption

構成の復号化

現在の実装を別のクラウド環境に移行する場合や、生の認証情報を取得したい場合は、構成を復号することができます。この関数は真偽値 (boolean) を受け取り、trueにすると復号した構成をファイルに保存し、falseの場合は復号された構成をそのまま返します。

OracleKeyValueStorage oracleKeyValueStorage = new OracleKeyValueStorage(configFileLocation, profile, oracleSessionConfig);
oracleKeyValueStorage.decryptConfig(false); // 平文のみを抽出するには、パラメーターに false を指定します。
print(plaintext)
//OR 
oracleKeyValueStorage.decryptConfig(true); // 平文を抽出し、構成ファイルを平文として保存するには、パラメーターに true を指定します。

最終更新