

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

# 存取您的叢集
<a name="accessing-memorydb"></a>

您的 MemoryDB 執行個體旨在透過 Amazon EC2 執行個體存取。

您可以從相同 Amazon VPC 中的 Amazon EC2 執行個體存取 MemoryDB 節點。或者，透過使用 VPC 對等互連，您可以從不同 Amazon VPC 中的 Amazon EC2 存取 MemoryDB 節點。

**Topics**
+ [授予對叢集的存取權](#grant-access)
+ [從外部存取 MemoryDB 資源 AWS](#access-from-outside-aws)

## 授予對叢集的存取權
<a name="grant-access"></a>

您只能從在相同 Amazon VPC 中執行的 Amazon EC2 執行個體連線到 MemoryDB 叢集。在此情況下，您需要授權透過網路輸入至叢集。

**授權從 Amazon VPC 安全群組透過網路輸入至叢集**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)：// 開啟 Amazon EC2 主控台。

1. 在左側導覽窗格中的網路**與安全**下，選擇**安全群組**。

1. 從安全群組的清單中，選擇要用於 Amazon VPC 的安全群組。除非您為 MemoryDB 使用建立安全群組，否則此安全群組將命名為*預設值*。

1. 選擇 **Inbound (傳入)** 標籤，然後執行下列動作：

   1. 選擇**編輯**。

   1. 選擇**新增規則**。

   1. 在 **Type (類型)** 欄中，選擇 **Custom TCP rule (自訂 TCP 規則)**。

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

   1. 在**來源**方塊中，選擇具有連接埠範圍 (0.0.0.0/0) 的 **Anywhere**，以便您在 Amazon VPC 內啟動的任何 Amazon EC2 執行個體可以連線至 MemoryDB 節點。
**重要**  
將 MemoryDB 叢集開啟至 0.0.0.0/0 不會將叢集公開至網際網路，因為它沒有公有 IP 地址，因此無法從 VPC 外部存取。不過，預設安全群組可能會套用到客戶帳戶中的其他 Amazon EC2 執行個體，而這些執行個體可能有公有 IP 地址。如果他們正巧在預設連接埠上執行某些項目，就可能會意外公開該服務。因此，我們建議您建立僅供 MemoryDB 使用的 VPC 安全群組。如需詳細資訊，請參閱[自訂安全群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#creating-your-own-security-groups)。

   1. 選擇**儲存**。

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

## 從外部存取 MemoryDB 資源 AWS
<a name="access-from-outside-aws"></a>

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

使用 AWS Client VPN，您可以允許對 MemoryDB 節點進行外部存取，優點如下：
+ 有限存取核准的使用者或身分驗證金鑰；
+ VPN 用戶端與 AWS VPN 端點之間的加密流量；
+ 有限存取特定子網路或節點；
+ 輕鬆撤銷使用者的存取或身分驗證金鑰；
+ 稽核連線；

以下程序示範如何：

**Topics**
+ [建立憑證授權機構](#create-cert)
+ [設定 AWS 用戶端 VPN 元件](#configure-vpn-components)
+ [設定 VPN 用戶端](#configure-vpn-client)

### 建立憑證授權機構
<a name="create-cert"></a>

您可以使用不同的技術或工具來建立憑證授權單位 (CA)。我們建議由 [OpenVPN](https://openvpn.net/community-resources/openvpn-project/) 專案提供的 easy-rsa 公用程式。無論您選擇哪個選項，請確保金鑰安全無虞。下列程序會下載 easy-rsa 指令碼、建立憑證授權單位和金鑰來驗證第一個 VPN 用戶端：
+ 若要建立初始憑證，請開啟終端機並執行下列動作：
  + `git clone` [https://github.com/OpenVPN/easy-rsa](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 Certificate Manager (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` 之間的所有直線 (包括 `BEGIN` 和 `END` 直線)。
  + 在 **Certificate chain (憑證鏈)** 欄位中貼上 `easy-rsa/pki/ca.crt` 檔案中可用的 CA 公有金鑰。
  + 選取 **Review and import (檢閱和匯入)**。
  + 選取 **Import (匯入)**。

  若要使用 CLI AWS 將伺服器的憑證提交至 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 元件
<a name="configure-vpn-components"></a>

**使用 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 叢集的 VPC。
  + 選取其中一個 MemoryDB 叢集的網路。如有疑問，請檢閱 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 網路的流量 （預設為 6379 for Redis)。

如果您需要變更指派給 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" ] } `

**注意**  
MemoryDB 安全群組也需要允許來自 VPN 用戶端的流量。根據 VPC 網路，用戶端的位址將以 VPN 端點位址遮蔽。因此，在 MemoryDB 安全群組上建立傳入規則時，請考慮 VPC 網路 （而非 VPN 用戶端的網路）。

**授權目標網路的 VPN 存取**

在 **Authorization (授權)** 標籤上，選取 **Authorize Ingress (授權輸入)** 並指定下列項目：
+ 啟用存取的目的地網路：使用 0.0.0.0/0 以允許存取任何網路 （包括網際網路） 或限制 MemoryDB 網路/主機。
+ 在 **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 用戶端
<a name="configure-vpn-client"></a>

在 AWS Client VPN 儀表板上，選取最近建立的 VPN 端點，然後選取**下載用戶端組態**。複製組態檔案，以及檔案 `easy-rsa/pki/issued/client1.domain.tld.crt` 和 `easy-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 管理主控台，選取**服務**，然後選取 **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 } `