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

Keeperシークレットマネージャーは、Oracle Key Vaultと統合することで、Keeperシークレットマネージャーの構成ファイルを保護できます。この統合により、ローカル環境の接続情報を安全に守りながら、すべてのシークレット情報をゼロ知識暗号化で保護するKeeperのセキュリティ機能を活用できます。
機能
Keeperシークレットマネージャーの構成ファイルをOracle Key Vaultで暗号化・復号化
シークレットマネージャーの接続情報への不正アクセスを防止
コードの最小限の変更で導入可能。すべてのKeeperシークレットマネージャーSDK機能と互換性あり
要件
GCP CKMキーに
ENCRYPT
およびDECRYPT
の権限が必要
セットアップ
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 Key Vault にアクセスするための情報を含め、OCI環境に適した設定を追加する必要があります。
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 を指定します。
KSM統合機能を使用する準備ができました。
最終更新