使用來自命令列的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。任何命令列工具,例如curlawscurl需要存取適當的憑證,才能使用 HTTPS。只要 curlawscurl可以找到適當的憑證,它們會像HTTPS連線一樣處理HTTP連線,而不需要額外的參數。此文件的範例是以該案例為基礎。

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

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

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

最好將STS呼叫傳回的 SecretAccessKeyAccessKeyIdSessionToken值放入 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=$(cat $output | jq '.Credentials''.AccessKeyId') SecretAccessKey=$(cat $output | jq '.Credentials''.SecretAccessKey') SessionToken=$(cat $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