

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從命令列使用 IAM 身分驗證連線至 Amazon Neptune 資料庫
<a name="iam-auth-connect-command-line"></a>

如本文件中的許多範例所示，具有將查詢提交至 Neptune 資料庫叢集的命令列工具非常方便。如果未啟用 IAM 身分驗證，[curl](https://curl.haxx.se/) 工具是與 Neptune 端點通訊的絕佳選擇。

**不過，若要保護您的資料，最好啟用 IAM 身分驗證。**

當 IAM 身分驗證啟用時，每個請求都必須使用 [Signature 第 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` 可以找到適當的憑證，它們處理 HTTPS 連線的方式就跟 HTTP 連線一樣，無需額外參數。此文件的範例是以該案例為基礎。

若要了解如何取得這類憑證，以及如何將它們正確格式化為 `curl` 可以使用的憑證授權機構 (CA) 憑證存放區，請參閱 `curl` 文件中的 [SSL 憑證驗證](https://curl.haxx.se/docs/sslcerts.html)。

然後，您可以使用 `CURL_CA_BUNDLE` 環境變數來指定此 CA 憑證存放區的位置。在 Windows 上，`curl` 會自動在名為 `curl-ca-bundle.crt` 的檔案中尋找它。它會先在和 `curl.exe` 相同的目錄中尋找，然後再尋找路徑的其他位置。如需詳細資訊，請參閱 [SSL Certificate Verification](https://curl.haxx.se/docs/sslcerts.html)。

## 使用 `awscurl` 搭配臨時憑證，安全地連線至啟用 IAM 身分驗證的資料庫叢集
<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` 環境變數或在組態檔案中提供它。

在過去，常見的做法是使用永久憑證搭配 `awscurl` (例如 IAM 使用者憑證，甚至是根憑證)，但不建議這麼做。相反地，使用其中一個 [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` 值放入 Shell 工作階段中的適當環境變數中，而不是放入組態檔案中。然後，當 Shell 終止時，憑證會自動捨棄，而組態檔案不是這種情況。同樣地，請不要為臨時憑證請求長於您可能需要的持續時間。

下列範例展示您可能在 Linux Shell 中採取的步驟，以使用 [sts assume-role](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role) 取得有效半小時的臨時憑證，然後將它們放在 `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` 對資料庫叢集提出簽署的請求，如下所示：

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