

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# JCE 공급자를 사용하여 여러 AWS CloudHSM 클러스터에 연결
<a name="java-lib-configs-multi"></a>

이 구성을 사용하면 단일 클라이언트 인스턴스가 여러 AWS CloudHSM 클러스터와 통신할 수 있습니다. 단일 인스턴스가 단일 클러스터와만 통신하는 것과 비교하면 일부 사용 사례에서는 이 기능을 통해 비용을 절감할 수 있습니다. `CloudHsmProvider` 클래스는 Java Security의 공급자 클래스를 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 Security 공급자 목록에 추가하면 표준 JCE 클래스를 사용하여 이 클래스와 상호 작용할 수 있습니다.

다음 예제는 이 클래스를 인스턴스화하여 Java Security 공급자 목록에 추가합니다.

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

`CloudHsmProvider` 다음 두 가지 방법으로 구성할 수 있습니다:

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와 상호 작용하여 다양한 작업에 사용할 공급자를 알려주는 데 유용합니다. 암호화 작업에 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` 클러스터와 통신하려는 경우 다른 클러스터의 구성을 사용하여 다른 객체를 생성하고 다음 예와 같이 공급자 객체 또는 공급자 이름을 사용하여 이 다른 클러스터와 상호 작용할 수 있습니다.

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

또한 동일한 애플리케이션에서 공급자 이름을 사용하여 두 번째 클러스터에서 “AES” 키 생성을 수행하는 경우 다음 샘플을 사용할 수도 있습니다.

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