本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
從命令列使用 IAM 身分驗證連線至 Amazon Neptune 資料庫
如本文件中的許多範例所示,具有將查詢提交至 Neptune 資料庫叢集的命令列工具非常方便。如果未啟用 IAM 身分驗證,curl
不過,若要保護您的資料,最好啟用 IAM 身分驗證。
當 IAM 身分驗證啟用時,每個請求都必須使用 Signature 第 4 版 (Sig4) 進行簽署。第三方 awscurlcurl 相同的語法,並且可以使用 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 身分驗證的資料庫叢集
awscurlcurl 相同的語法,但也需要額外的資訊:
-
--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=$(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