

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

# JCE プロバイダーを使用した複数の AWS CloudHSM クラスターへの接続
<a name="java-lib-configs-multi"></a>

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

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

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

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

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

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

以下のトピックでは、これらの設定と、複数のクラスターに接続する方法について説明します。

**Topics**
+ [ファイルによる AWS CloudHSM `CloudHsmProvider` クラスの設定 (デフォルト設定)](java-lib-configs-default.md)
+ [コードを使用して AWS CloudHSM `CloudHsmProvider` クラスを設定する](java-lib-configs-using-code.md)
+ [複数の AWS CloudHSM クラスターに接続する](java-lib-connecting-to-multiclusters.md)

# ファイルによる AWS CloudHSM `CloudHsmProvider` クラスの設定 (デフォルト設定)
<a name="java-lib-configs-default"></a>

クラスを設定するデフォルトの方法は、 AWS CloudHSM `CloudHsmProvider` ファイルを使用することです。

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

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

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

# コードを使用して AWS CloudHSM `CloudHsmProvider` クラスを設定する
<a name="java-lib-configs-using-code"></a>

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

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

**Example**  

```
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 とやり取りするために使用できる名前です。

**Example**  

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

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

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

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

# 複数の AWS CloudHSM クラスターに接続する
<a name="java-lib-connecting-to-multiclusters"></a>

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

**Example**  

```
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());
```