存取您的叢集 - Amazon MemoryDB

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

存取您的叢集

您的記憶體資料庫執行個體專為透過 Amazon EC2 執行個體存取而設計。

您可以從同一個 Amazon VPC 中的 Amazon EC2 執行個體存取記憶體資料庫節點。或者,透過使用 VPC 對等互連,您可以從不同的 Amazon VPC 中的 Amazon EC2 存取您的記憶體資料庫節點。

授與叢集的存取權

您只能從在同一個 Amazon VPC 中執行的 Amazon EC2 執行個體連線到您的記憶體資料庫叢集。在此情況下,您需要授權透過網路輸入至叢集。

授權從 Amazon VPC 安全群組透過網路輸入至叢集
  1. 登入 AWS Management Console 並開啟 Amazon EC2 主控台,網址為 https://console.aws.amazon.com/ec2/

  2. 在左側導覽窗格的 [網路與安全性] 底下,選擇 [安全性群組]。

  3. 從安全群組的清單中,選擇要用於 Amazon VPC 的安全群組。除非您為 MemoryDB 使用創建了一個安全組,否則此安全組將被命名為默認值。

  4. 選擇 Inbound (傳入) 標籤,然後執行下列動作:

    1. 選擇編輯

    2. 選擇新增規則

    3. Type (類型) 欄中,選擇 Custom TCP rule (自訂 TCP 規則)

    4. Port range (連接埠範圍) 方塊中,輸入要用於叢集節點的連接埠號碼。此號碼必須與您啟動叢集時指定的號碼相同。Redis 的 OSS 的預設連接埠為6379

    5. 在「來源」方塊中,選擇具有連接埠範圍 (0.0.0.0/0) 的任何位,以便您在 Amazon VPC 內啟動的任何 Amazon EC2 執行個體都可以連接到您的 MemoryDB 節點。

      重要

      將 MemoryDB 叢集開放至 0.0.0.0/0 時不會將叢集公開給網際網路,因為它沒有公用 IP 位址,因此無法從 VPC 外部存取叢集。不過,預設安全群組可能會套用到客戶帳戶中的其他 Amazon EC2 執行個體,而這些執行個體可能有公有 IP 地址。如果他們正巧在預設連接埠上執行某些項目,就可能會意外公開該服務。因此,我們建議您建立僅供 MemoryDB 使用的 VPC 安全群組。如需詳細資訊,請參閱自訂安全群組

    6. 選擇儲存

當您在 Amazon VPC 中啟動 Amazon EC2 執行個體時,該執行個體將能夠連接到您的 MemoryDB 叢集。

從外部訪問內存數據庫資源 AWS

MemoryDB 是一項專門設計用於 VPC 內部使用的服務。由於網際網路流量和安全性考量的延遲,因此不鼓勵外部存取。但是,如果需要對 MemoryDB 進行測試或開發目的進行外部訪問,則可以通過 VPN 完成。

使用 AWS Client VPN,您可以透過外部存取您的 MemoryDB 節點,並具有下列優點:

  • 有限存取核准的使用者或身分驗證金鑰;

  • VPN 用戶端和 AWS VPN 端點之間的加密流量;

  • 有限存取特定子網路或節點;

  • 輕鬆撤銷使用者的存取或身分驗證金鑰;

  • 稽核連線;

以下程序示範如何:

建立憑證授權機構

您可以使用不同的技術或工具來建立憑證授權單位 (CA)。我們建議由 OpenVPN 專案提供的 easy-rsa 公用程式。無論您選擇哪個選項,請確保金鑰安全無虞。下列程序會下載 easy-rsa 指令碼、建立憑證授權單位和金鑰來驗證第一個 VPN 用戶端:

  • 若要建立初始憑證,請開啟終端機並執行下列動作:

    • git clone https://github.com/OpenVPN/easy-rsa

    • cd easy-rsa

    • ./easyrsa3/easyrsa init-pki

    • ./easyrsa3/easyrsa build-ca nopass

    • ./easyrsa3/easyrsa build-server-full server nopass

    • ./easyrsa3/easyrsa build-client-full client1.domain.tld nopass

    包含憑證的 pki 子目錄將建立於 easy-rsa 下。

  • 將伺服器憑證提交給 AWS 憑證管理員 (ACM):

    • 在 ACM 主控台上,選取 Certificate Manager

    • 選取 Import certificate (匯入憑證)

    • Certificate body (憑證內文) 欄位裡輸入 easy-rsa/pki/issued/server.crt 檔案中可用的公有金鑰憑證。

    • Certificate private key (憑證私有金鑰) 欄位裡貼上 easy-rsa/pki/private/server.key 中可用的私有金鑰。請確定選取 BEGIN AND END PRIVATE KEY 之間的所有直線 (包括 BEGINEND 直線)。

    • Certificate chain (憑證鏈) 欄位中貼上 easy-rsa/pki/ca.crt 檔案中可用的 CA 公有金鑰。

    • 選取 Review and import (檢閱和匯入)

    • 選取 Import (匯入)

    若要使用 AWS CLI 將伺服器的憑證提交至 ACM,請執行下列命令:aws acm import-certificate --certificate fileb://easy-rsa/pki/issued/server.crt --private-key file://easy-rsa/pki/private/server.key --certificate-chain file://easy-rsa/pki/ca.crt --region region

    請注意憑證 ARN 以供日後使用。

設定 AWS 用戶端 VPN 元件

使用控 AWS 制台

在 AWS 主控台上,選取 [服務],然後選取 [VPC]。

Virtual Private Network (虛擬私有網路) 下,選取 Client VPN Endpoints (客戶端 VPN 端點),然後執行下列動作:

設定 AWS Client VPN 元件

  • 選取 Create Client VPN Endpoint (建立客戶端 VPN 端點)

  • 指定下列選項:

    • Client IPv4 CIDR (客戶端 IPv4 CIDR):使用具有至少 /22 範圍網路遮罩的私有網路。請確定選取的子網路不會與 VPC 網路的位址衝突。範例:10.0.0.0/22.

    • Server certificate ARN (伺服器憑證 ARN) 中,選取先前匯入的憑證 ARN。

    • 選取 Use mutual authentication (使用交互身分驗證)

    • Client certificate ARN (用戶端憑證 ARN) 中,選取先前匯入之憑證的 ARN。

    • 選取 Create Client VPN Endpoint (建立客戶端 VPN 端點)

使用 AWS CLI

執行以下命令:

aws ec2 create-client-vpn-endpoint --client-cidr-block "10.0.0.0/22" --server-certificate-arn arn:aws:acm:us-east-1:012345678912:certificate/0123abcd-ab12-01a0-123a-123456abcdef --authentication-options Type=certificate-authentication,,MutualAuthentication={ClientRootCertificateChainArn=arn:aws:acm:us-east-1:012345678912:certificate/123abcd-ab12-01a0-123a-123456abcdef} --connection-log-options Enabled=false

輸出範例:

"ClientVpnEndpointId": "cvpn-endpoint-0123456789abcdefg", "Status": { "Code": "pending-associate" }, "DnsName": "cvpn-endpoint-0123456789abcdefg.prod.clientvpn.us-east-1.amazonaws.com" }

將目標網路與 VPN 端點建立關聯

  • 選取新的 VPN 端點,然後選取 Associations (關聯) 標籤。

  • 選取 Associations (關聯) 並指定下列選項。

    • VPC:選取記憶體資料庫叢集的虛擬私人雲端。

    • 選取其中一個記憶體資料庫叢集的網路。如有疑問,請檢閱 MemoryDB 儀表板上子網路群組中的網路。

    • 選取 Associations (關聯)。如有必要,請針對剩餘的網路重複這些步驟。

使用 AWS CLI

執行以下命令:

aws ec2 associate-client-vpn-target-network --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --subnet-id subnet-0123456789abdcdef

輸出範例:

"Status": { "Code": "associating" }, "AssociationId": "cvpn-assoc-0123456789abdcdef" }

檢閱 VPN 安全性群組

VPN 端點會自動採用 VPC 的預設安全群組。檢查輸入和輸出規則,並確認安全性群組是否允許從 VPN 網路 (定義於 VPN 端點設定) 傳輸至服務連接埠上的 MemoryDB 網路 (預設情況下,Redis 為 6379)。

如果您需要變更指派給 VPN 端點的安全群組,請依照下列步驟進行:

  • 選取目前安全群組。

  • 選取 Apply Security Group (套用安全群組)

  • 選取新的安全群組。

使用 AWS CLI

執行以下命令:

aws ec2 apply-security-groups-to-client-vpn-target-network --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefga  --vpc-id vpc-0123456789abdcdef --security-group-ids sg-0123456789abdcdef

輸出範例:

"SecurityGroupIds": [ "sg-0123456789abdcdef" ] }

注意

記憶體資料庫安全性群組也需要允許來自 VPN 用戶端的流量。根據 VPC 網路,用戶端的位址將以 VPN 端點位址遮蔽。因此,在 MemoryDB 安全性群組上建立輸入規則時,請考慮虛擬私人 VPC 端網路 (而非 VPN 用戶端網路)。

授權目標網路的 VPN 存取

Authorization (授權) 標籤上,選取 Authorize Ingress (授權輸入) 並指定下列項目:

  • 目標網絡啟用訪問:使用 0.0.0.0/0 允許訪問任何網絡(包括互聯網)或限制內存數據庫網絡/主機。

  • Grant access to: (授予存取:) 下,選取 Allow access to all users (允許存取所有使用者)

  • 選取 Add Authorization Rules (新增授權規則)

使用 AWS CLI

執行以下命令:

aws ec2 authorize-client-vpn-ingress --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --target-network-cidr 0.0.0.0/0 --authorize-all-groups

輸出範例:

{ "Status": { "Code": "authorizing" } }

允許從 VPN 用戶端存取網際網路

如果您需要透過 VPN 瀏覽網際網路,則需要建立額外的路由。選取 Route Table (路由表) 標籤,然後選取 Create Route (建立路由)

  • 路由目標:0.0.0.0/0

  • Target VPC Subnet ID (目標 VPC 子網路 ID):選取其中一個可存取網際網路的相關子網路。

  • 選取 Create Route (建立路由)

使用 AWS CLI

執行以下命令:

aws ec2 create-client-vpn-route --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg --destination-cidr-block 0.0.0.0/0 --target-vpc-subnet-id subnet-0123456789abdcdef

輸出範例:

{ "Status": { "Code": "creating" } }

設定 VPN 用戶端

在 AWS Client VPN 儀表板上,選取最近建立的 VPN 端點,然後選取「下載用戶端組態」。複製組態檔案,以及檔案 easy-rsa/pki/issued/client1.domain.tld.crteasy-rsa/pki/private/client1.domain.tld.key。編輯組態檔案,並變更或新增下列參數:

  • 憑證:新增一個指向 client1.domain.tld.crt 檔案的參數憑證的新行。使用檔案的完整路徑。範例:cert /home/user/.cert/client1.domain.tld.crt

  • 憑證:金鑰:新增一個指向 client1.domain.tld.key 檔案的參數金鑰的新行。使用檔案的完整路徑。範例:key /home/user/.cert/client1.domain.tld.key

使用下列命令建立 VPN 連接:sudo openvpn --config downloaded-client-config.ovpn

撤銷存取

如果您需要讓來自特定客戶端金鑰的存取失效,則需要在 CA 中撤銷該金鑰。然後將撤銷清單提交至 AWS Client VPN。

用 easy-rsa 撤銷密鑰:

  • cd easy-rsa

  • ./easyrsa3/easyrsa revoke client1.domain.tld

  • 輸入「是」以繼續,或輸入任何其他輸入以中止。

    Continue with revocation: `yes` ... * `./easyrsa3/easyrsa gen-crl

  • 已建立更新的 CRL。CRL 檔案:/home/user/easy-rsa/pki/crl.pem

將撤銷清單匯入 AWS Client VPN:

  • 在上 AWS Management Console,選取服務,然後選取 VPC

  • 選取 Client VPN Endpoints (用戶端 VPN 端點)

  • 選取用戶端 VPN 端點,然後選取 Actions (動作) -> Import Client Certificate CRL (匯入用戶端憑證 CRL)

  • 貼上 crl.pem 檔案的內容:

使用 AWS CLI

執行以下命令:

aws ec2 import-client-vpn-client-certificate-revocation-list --certificate-revocation-list file://./easy-rsa/pki/crl.pem --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdefg

輸出範例:

Example output: { "Return": true }