

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

# Gremlin 콘솔에서 IAM 인증을 사용하여 Amazon Neptune 데이터베이스에 연결
<a name="iam-auth-connecting-gremlin-console"></a>

서명 버전 4 인증과 함께 Gremlin 콘솔을 사용하여 Amazon Neptune에 연결하려면 `requestInterceptor()`를 사용하여 `:remote` 명령에 의해 설정된 연결에 SigV4 서명자를 연결합니다. 이렇게 하려면 `Cluster` 객체를 수동으로 구성한 다음 `:remote` 명령에 전달해야 합니다.

참고로 이는 `:remote` 명령이 구성 파일을 사용하여 연결을 형성하는 일반적인 상황과는 상당히 다릅니다. `requestInterceptor()`를 프로그래밍 방식으로 설정해야 하고 파일에서 구성을 로드할 수 없기 때문에 구성 파일 접근 방식이 효과가 없습니다.

**참고**  
다음 예제에서는 TinkerPop 3.6.6에 도입`requestInterceptor()`된를 사용합니다. 3.6.6 이전(3.5.5 이상)의 TinkerPop 버전을 사용하는 경우 아래 코드 예제`requestInterceptor()`에서 `handshakeInterceptor()` 대신를 사용합니다.

다음과 같은 사전 조건이 필요합니다.
+ 요청에 서명하는 데 필요한 IAM 보안 인증 정보가 있어야 합니다. AWS SDK for Java 개발자 안내서[의 기본 자격 증명 공급자 체인 사용을](https://docs.aws.amazon.com//sdk-for-java/latest/developer-guide/credentials-chain.html) 참조하세요.
+ DB 클러스터에서 사용 중인 Neptune 엔진 버전과 호환되는 Gremlin 콘솔 버전을 설치해야 합니다.

임시 보안 인증 정보를 사용하는 경우 세션 토큰과 마찬가지로 지정된 간격이 지나면 만료되므로, 새 보안 인증 정보를 요청할 때 세션 토큰을 업데이트해야 합니다. IAM 사용 설명서의 [임시 보안 자격 증명을 사용하여 AWS 리소스에 대한 액세스 요청을](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html) 참조하세요.

SSL/TLS를 사용한 연결에 대한 도움말은 [SSL/TLS 구성](access-graph-gremlin-java.md#access-graph-gremlin-java-ssl)을 참조하세요.

**Sig4 서명으로 Gremlin 콘솔 연결**

1. Gremlin 콘솔을 실행합니다.

   ```
   $ bin/gremlin.sh
   ```

1. `gremlin>` 프롬프트가 나타나면 `amazon-neptune-sigv4-signer` 라이브러리를 설치합니다. 이 작업은 콘솔에서 한 번만 수행하면 됩니다.

   ```
   :install com.amazonaws amazon-neptune-sigv4-signer 2.4.0
   ```

   이 단계에서 문제가 발생하면 [Grape](http://docs.groovy-lang.org/latest/html/documentation/grape.html) 구성에 대한 [TinkerPop 설명서](https://tinkerpop.apache.org/docs/current/reference/#gremlin-applications)를 참조하세요.
**참고**  
HTTP 프록시를 사용하는 경우 이 단계에서 `:install` 명령이 완료되지 않는 오류가 발생할 수 있습니다. 이 문제를 해결하려면 다음 명령을 실행하여 콘솔에 프록시에 대해 알립니다.  

   ```
   System.setProperty("https.proxyHost", "{{(the proxy IP address)}}")
   System.setProperty("https.proxyPort", "{{(the proxy port)}}")
   ```

1. 서명을 처리하는 데 필요한 클래스를 `requestInterceptor()`로 가져옵니다.

   ```
   :import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider
   :import com.amazonaws.neptune.auth.NeptuneNettyHttpSigV4Signer
   ```

1. 임시 보안 인증 정보를 사용하는 경우 다음과 같이 세션 토큰도 제공해야 합니다.

   ```
   System.setProperty("aws.sessionToken","(your session token)")
   ```

1. 다른 방법으로 계정 보안 인증 정보를 설정하지 않은 경우 다음과 같이 계정 보안 인증 정보를 할당할 수 있습니다.

   ```
   System.setProperty("aws.accessKeyId","{{{{(your access key)}}}}")
   System.setProperty("aws.secretKey","{{(your secret key)}}")
   ```

1. Neptune에 연결할 `Cluster` 객체를 수동으로 구성합니다.

   ```
   cluster = Cluster.build("{{(host name)}}")  \
                    .enableSsl(true) \
                    .requestInterceptor { r ->  \
                      def sigV4Signer = new NeptuneNettyHttpSigV4Signer("{{(Amazon region)}}", \
                                        DefaultCredentialsProvider.create()); \
                      sigV4Signer.signRequest(r); \
                      return r; } \
                    .create()
   ```

   Neptune DB 인스턴스의 호스트 이름을 찾는 데 도움이 필요하면 [Amazon Neptune 엔드포인트에 연결](feature-overview-endpoints.md)을 참조하세요.

1. 이전 단계에서 `Cluster` 객체의 변수 이름을 사용하여 `:remote` 연결을 설정합니다.

   ```
   :remote connect tinkerpop.server cluster
   ```

1. 다음 명령을 입력하여 원격 모드로 전환합니다. 그러면 모든 Gremlin 쿼리가 원격 연결로 전송됩니다.

   ```
   :remote console
   ```