簡體   English   中英

亞馬遜 ElastiCache Redis 公共訪問

[英]Amazon ElastiCache Redis Public Access

我有一個 Amazon AWS 帳戶。我想使用 ElastiCache Redis。我已經安裝了 ElastiCache Redis。我如何從公共地址連接 ElastiCache Redis?

我已經安裝了 Amazon Linux AMI。 我正在從它訪問 ElastiCache Redis。但我想從公共地址訪問。

[更新] 正如下面盧克所提到的,這現在是可能的。 下面是參考。 https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/accessing-elasticache.html#access-from-outside-aws

可悲的是沒有。 你可以參考這個問題。

您可以連接到 Amazon 以外的 Amazon ElastiСache Redis 嗎?

它提供了一個參考

http://aws.amazon.com/elasticache/faqs/#Can_I_access_Amazon_ElastiCache_from_outside_AWS

那說明

VPC 內部或外部的 Amazon ElastiCache 集群永遠不允許從 Internet 訪問。

如果您想要訪問部署在 VPC 內、從 Internet 或從 VPC 外部的 EC2 實例的 Amazon ElastiCache 節點,請參閱此處的指南。 http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/Access.Outside.html

我目前用於開發目的的方法是

  1. 在與我的 Elasticache 實例相同的 VPC 中創建一個 Cloud9 實例。
  2. 向 Elasticache 實例添加安全組規則以允許來自 Cloud9 實例安全組的流量。
  3. 在 Cloud9 實例中運行一個微型 TCP 代理(用 Go 編寫),代理進出 Elasticache 實例的流量。
# main.go
package main

import (
    "flag"
    "fmt"
    "io"
    "net"
    "sync"
)

var localAddr *string = flag.String("l", "localhost:9999", "local address")
var remoteAddr *string = flag.String("r", "localhost:80", "remote address")

func proxyConn(conn *net.TCPConn) {
    rAddr, err := net.ResolveTCPAddr("tcp", *remoteAddr)
    if err != nil {
        panic(err)
    }

    rConn, err := net.DialTCP("tcp", nil, rAddr)
    if err != nil {
        panic(err)
    }
    defer rConn.Close()

    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        io.Copy(conn, rConn)
        // conn2 has returned EOF or an error, so we need to shut down the
        // other half of the duplex copy.
        conn.Close()
        wg.Done()
    }()

    wg.Add(1)
    go func() {
        io.Copy(rConn, conn)
        rConn.Close()
        wg.Done()
    }()

    wg.Wait()
}

func main() {
    flag.Parse()

    fmt.Printf("Listening: %v\nProxying: %v\n\n", *localAddr, *remoteAddr)

    addr, err := net.ResolveTCPAddr("tcp", *localAddr)
    if err != nil {
        panic(err)
    }

    listener, err := net.ListenTCP("tcp", addr)
    if err != nil {
        panic(err)
    }

    for {
        conn, err := listener.AcceptTCP()

        if err != nil {
            panic(err)
        }

        fmt.Println("handling connection")
        go func() {
            proxyConn(conn)
            fmt.Println("connection closed")
        }()

    }
}

# run commands
go run main.go -l 0.0.0.0:9999 -r <redacted>.use1.cache.amazonaws.com:6379
  1. 確保 Cloud9 實例的安全組允許公共訪問代理運行的端口(例如 9999)。 並從共享對話框中獲取 Cloud9 實例 public IP(例如 XXXX)
  2. 從公共代理端點(例如 XXXX:9999)使用您的 Elasticache 實例

Cloud9 實例可以替換為任何其他 EC2 實例。 顯然,添加所有這些躍點會產生性能成本。 但它有效。

這有點模棱兩可,但簡短的回答是這通常是不可能的。 根據定義,ECS 是私有的,因為它位於內存存儲中並且需要極快的速度。 允許從互聯網訪問不利於超快的速度。 根據 AWS 文檔 [1],您可能希望的唯一解決方法是通過 VPN 訪問集群。

重要 將 ElastiCache 集群開放到 0.0.0.0/0 不會將集群暴露給 Internet,因為它沒有公共 IP 地址,因此無法從 VPC 外部訪問。 但是,默認安全組可能會應用於客戶賬戶中的其他 Amazon EC2 實例,並且這些實例可能具有公共 IP 地址。 如果他們碰巧在默認端口上運行某些東西,那么該服務可能會無意中暴露出來。 因此,我們建議創建一個由 ElastiCache[2] 獨占使用的 VPC 安全組。

-----參考文獻----- [1] https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/accessing-elasticache.html#access-from-outside-aws [2] https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/accessing-elasticache.html#access-from-outside-aws

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM