JCE プロバイダーによる複数のクラスターへの接続 - AWS CloudHSM

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

JCE プロバイダーによる複数のクラスターへの接続

この構成では、1 つのクライアントインスタンスが複数のクラスターと通信できます。1 つのインスタンスが 1 つのクラスターとしか通信しない場合と比較して、これは一部のユースケースではコスト削減機能となる可能性があります。CloudHsmProvider クラス は、Java セキュリティのプロバイダークラス の の実装 AWS CloudHSMです。このクラスの各インスタンスは、 AWS CloudHSM クラスター全体への接続を表します。このクラスをインスタンス化して Java セキュリティプロバイダのリストに追加すると、標準 JCE クラスを使用して操作できるようになります。

次の例では、このクラスをインスタンス化して Java セキュリティプロバイダのリストに追加します。

if (Security.getProvider(CloudHsmProvider.PROVIDER_NAME) == null) { Security.addProvider(new CloudHsmProvider()); }

CloudHsmProvider の設定

CloudHsmProvider は 2 つの方法で設定できます。

  1. ファイルによる設定 (デフォルト設定)

  2. コードを使用して設定

ファイルによる設定 (デフォルト設定)

デフォルトのコンストラクタを使用して CloudHsmProvider をインスタンス化すると、デフォルトでは、Linux の /opt/cloudhsm/etc/cloudhsm-jce.cfg パスで構成ファイルが検索されます。この設定ファイルは、configure-jce を使用して設定できます。

デフォルトコンストラクターを使用して作成されたオブジェクトは、デフォルトの CloudHSM プロバイダー名 CloudHSM を使用します。プロバイダー名は JCE とやり取りして、さまざまなオペレーションにどのプロバイダーを使用するかを判断するのに役立ちます。Cipher オペレーションに CloudHSM プロバイダー名を使用する例は次のとおりです。

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHSM");

コードを使用して設定

Client SDK バージョン 5.8.0 以降では、Java コードを使用して CloudHsmProvider を設定することもできます。そのための方法は、CloudHsmProviderConfig クラスのオブジェクトを使用することです。CloudHsmProviderConfigBuilder を使用してこのオブジェクトを構築することができます。

CloudHsmProvider には、次の例のように、CloudHsmProviderConfig オブジェクトを取得する別のコンストラクターがあります。

CloudHsmProviderConfig config = CloudHsmProviderConfig.builder() .withCluster( CloudHsmCluster.builder() .withHsmCAFilePath(hsmCAFilePath) .withClusterUniqueIdentifier("CloudHsmCluster1") .withServer(CloudHsmServer.builder().withHostIP(hostName).build()) .build()) .build(); CloudHsmProvider provider = new CloudHsmProvider(config);

この例では、JCE プロバイダー名は CloudHsmCluster1 で、アプリケーションが JCE とやり取りするときに使用できる名前です。

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHsmCluster1");

あるいは、アプリケーションは上記で作成したプロバイダーオブジェクトを使用して、そのプロバイダーをオペレーションに使用することを JCE に知らせることもできます。

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider);

withClusterUniqueIdentifier メソッドで一意の識別子が指定されていない場合は、ランダムに生成されたプロバイダー名が自動的に作成されます。このランダムに生成された識別子を取得するには、アプリケーションは provider.getName() を呼び出して識別子を取得できます。

複数のクラスターへの接続

前述のように、それぞれ CloudHsmProvider が CloudHSM クラスターへの接続を表します。同じアプリケーションから別のクラスターと通信したい場合は、別のクラスターの設定を使用して CloudHsmProvider のオブジェクトをもう1つ作成し、次の例に示すように、プロバイダーオブジェクトまたはプロバイダー名を使用してこの他のクラスターとやり取りできます。

CloudHsmProviderConfig config = CloudHsmProviderConfig.builder() .withCluster( CloudHsmCluster.builder() .withHsmCAFilePath(hsmCAFilePath) .withClusterUniqueIdentifier("CloudHsmCluster1") .withServer(CloudHsmServer.builder().withHostIP(hostName).build()) .build()) .build(); CloudHsmProvider provider1 = new CloudHsmProvider(config); if (Security.getProvider(provider1.getName()) == null) { Security.addProvider(provider1); } CloudHsmProviderConfig config2 = CloudHsmProviderConfig.builder() .withCluster( CloudHsmCluster.builder() .withHsmCAFilePath(hsmCAFilePath2) .withClusterUniqueIdentifier("CloudHsmCluster2") .withServer(CloudHsmServer.builder().withHostIP(hostName2).build()) .build()) .build(); CloudHsmProvider provider2 = new CloudHsmProvider(config2); if (Security.getProvider(provider2.getName()) == null) { Security.addProvider(provider2); }

上記の両方のプロバイダー (両方のクラスター) を設定したら、プロバイダーオブジェクトまたはプロバイダー名を使用してプロバイダーを操作できます。

との通信方法を示すこの例を拡張するとcluster1、AES/GCM/NoPadding オペレーションに次のサンプルを使用できます。

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider1);

同じアプリケーションで、プロバイダー名を使用して 2 番目のクラスターで「AES」キー生成を行う場合は、次のサンプルを使用することもできます。

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider2.getName());