View a markdown version of this page

從命令列使用 IAM 身分驗證連線至 Amazon Neptune 資料庫 - Amazon Neptune

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

從命令列使用 IAM 身分驗證連線至 Amazon Neptune 資料庫

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

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

當 IAM 身分驗證啟用時,每個請求都必須使用 Signature 第 4 版 (Sig4) 進行簽署。第三方 awscurl 命令列工具會使用與 curl 相同的語法,並且可以使用 Sig4 簽署來簽署查詢。以下 使用 awscurl 一節說明如何安全地使用 awscurl 搭配臨時憑證。

設定命令列工具來使用 HTTPS

Neptune 要求所有連線都使用 HTTPS。任何命令行工具 (例如 curl 或 awscurl) 需要存取適當的憑證,才能使用 HTTPS。只要 curl 或 awscurl 可以找到適當的憑證,它們處理 HTTPS 連線的方式就跟 HTTP 連線一樣,無需額外參數。此文件的範例是以該案例為基礎。

若要了解如何取得這類憑證,以及如何將它們正確格式化為 curl 可以使用的憑證授權機構 (CA) 憑證存放區,請參閱 curl 文件中的 SSL 憑證驗證。

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

使用 awscurl 搭配臨時憑證,安全地連線至啟用 IAM 身分驗證的資料庫叢集

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 或其中一個 AWS CLI 包裝函式來產生臨時憑證。

最好將 STS 呼叫所傳回的 AccessKeyId、SecretAccessKey 和 SessionToken 值放入 Shell 工作階段中的適當環境變數中,而不是放入組態檔案中。然後,當 Shell 終止時,憑證會自動捨棄,而組態檔案不是這種情況。同樣地,請不要為臨時憑證請求長於您可能需要的持續時間。

下列範例展示您可能在 Linux Shell 中採取的步驟,以使用 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