

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

# 명령줄에서 IAM 인증을 사용하여 Amazon Neptune 데이터베이스에 연결
<a name="iam-auth-connect-command-line"></a>

이 설명서의 여러 예제에서 볼 수 있듯이 Neptune DB 클러스터에 쿼리를 제출하는 명령줄 도구를 사용하면 매우 편리합니다. [curl](https://curl.haxx.se/) 도구는 IAM 인증이 활성화되지 않은 경우 Neptune 엔드포인트와 통신하기 위한 훌륭한 옵션입니다.

**하지만 데이터를 안전하게 보호하려면 IAM 인증을 활성화하는 것이 가장 좋습니다.**

IAM 인증이 활성화되면 모든 요청은 [Signature Version 4(Sig4)를 사용하여 서명](https://docs.aws.amazon.com/general/latest/gr/signing-aws-api-requests.html)해야 합니다. 타사 [awscurl](https://github.com/okigan/awscurl) 명령줄 도구는 `curl`와 동일한 구문을 사용하며 Sig4 서명을 통해 쿼리에 서명할 수 있습니다. 아래 [`awscurl` 사용하기](#iam-auth-connect-awscurl) 섹션에서는 임시 보안 인증 정보로 안전하게 `awscurl`을 사용하는 방법을 설명합니다.

## HTTPS를 사용하도록 명령줄 도구 설정
<a name="iam-auth-connect-command-line-https"></a>

Neptune에서는 모든 연결에 HTTPS를 사용해야 합니다. `curl`, `awscurl` 등의 모든 명령줄 도구에서 HTTPS를 사용하려면 적절한 인증서에 액세스해야 합니다. `curl` 또는 `awscurl`이 적절한 인증서를 찾을 수 있어야 추가 파라미터 없이 HTTP 연결과 같이 HTTPS 연결을 처리할 수 있습니다. 이 설명서의 예제는 해당 시나리오를 기반으로 합니다.

`curl` 설명서의 [SSL 인증서 확인](https://curl.haxx.se/docs/sslcerts.html)에는 이러한 인증서를 가져오는 방법과 `curl`에서 사용할 수 있는 인증 기관(CA) 인증서 스토어로 적절하게 형식을 지정하는 방법이 나와 있습니다.

이렇게 하면 `CURL_CA_BUNDLE` 환경 변수를 사용하여 이 CA 인증서 스토어의 위치를 지정할 수 있습니다. Windows에서 `curl`은 `curl-ca-bundle.crt`라는 파일에서 자동으로 이 인증서를 찾습니다. 먼저 `curl.exe`와 동일한 디렉터리에서 찾은 다음 경로의 다른 곳을 찾습니다. 자세한 내용은 [SSL Certificate Verification](https://curl.haxx.se/docs/sslcerts.html)을 참조하십시오.

## 임시 보안 인증 정보와 `awscurl`을 사용하여 IAM 인증이 활성화된 상태에서 DB 클러스터에 안전하게 연결
<a name="iam-auth-connect-awscurl"></a>

[awscurl](https://github.com/okigan/awscurl) 도구는 `curl`과 같은 구문을 사용하지만, 추가 정보도 필요합니다.
+ **`--access_key`**   –   유효한 액세스 키입니다. 이 파라미터를 사용하여 지정하지 않는 경우 `AWS_ACCESS_KEY_ID` 환경 변수 또는 구성 파일에 입력해야 합니다.
+ **`--secret_key`**   –   액세스 키에 해당하는 비밀 키입니다. 이 파라미터를 사용하여 지정하지 않는 경우 `AWS_SECRET_ACCESS_KEY` 환경 변수 또는 구성 파일에 입력해야 합니다.
+ **`--security_token`**   –   유효한 세션 토큰입니다. 이 파라미터를 사용하여 지정하지 않는 경우 `AWS_SECURITY_TOKEN` 환경 변수 또는 구성 파일에 입력해야 합니다.

과거에는 IAM 사용자 보안 인증 정보나 루트 보안 인증 정보와 같은 영구 보안 인증 정보를 `awscurl`과 사용하는 것이 일반적이었지만, 이는 권장되지 않습니다. 대신 [AWS Security Token Service(STS) API](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html) 또는 [AWS CLI 래퍼](https://docs.aws.amazon.com/cli/latest/reference/sts/index.html) 중 하나를 사용하여 임시 보안 인증 정보를 생성하세요.

STS 호출에서 반환된 `AccessKeyId`, `SecretAccessKey`, `SessionToken` 값을 구성 파일이 아닌 쉘 세션의 적절한 환경 변수에 배치하는 것이 가장 좋습니다. 이 경우 쉘이 종료되면 보안 인증 정보가 자동으로 삭제되지만, 구성 파일의 경우에는 그렇지 않습니다. 마찬가지로, 필요한 기간보다 긴 기간 동안 임시 보안 인증 정보를 요청하지 마세요.

다음 예제는 [sts assume-role](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role)을 사용하여 Linux 쉘에서 30분 동안 사용할 수 있는 임시 보안 인증 정보를 얻은 후 `awscurl`에서 해당 보안 인증 정보를 찾을 수 있는 환경 변수에 배치하는 단계를 보여줍니다.

```
aws sts assume-role \
    --duration-seconds 1800 \
    --role-arn "arn:aws:iam::(account-id):role/(rolename)" \
    --role-session-name AWSCLI-Session > $output
AccessKeyId=$(echo $output | jq '.Credentials''.AccessKeyId')
SecretAccessKey=$(echo $output | jq '.Credentials''.SecretAccessKey')
SessionToken=$(echo $output | jq '.Credentials''.SessionToken')

export AWS_ACCESS_KEY_ID=$AccessKeyId
export AWS_SECRET_ACCESS_KEY=$SecretAccessKey
export AWS_SESSION_TOKEN=$SessionToken
```

그러면 다음과 같이 `awscurl`을 사용하여 DB 클러스터에 서명된 요청을 보낼 수 있습니다.

```
awscurl (your cluster endpoint):8182/status \
    --region us-east-1 \
    --service neptune-db
```