簡體   English   中英

Amazon RDS:如何限制 RDS 實例對 AWS Lambda 函數和到我的計算機的訪問?

[英]Amazon RDS: How can I limit the RDS instance access to AWS Lambda functions and TO My computer?

我正在使用AWS LambdaAPI GatewayAmazon RDS(MySQL)開發 REST API。 我正在使用 AWS Sam 進行配置和所有操作。

我通過訪問亞馬遜網站的 RDS 部分創建了數據庫。 它按預期工作正常。 我還設法部署了 Lambda 函數並使它們與數據庫連接。

我的數據庫設置為可Publicly Accessible = Yes

但是,我注意到數據庫對全世界開放。 請參閱以下圖片。

安全組規則

在此處輸入圖片說明

在默認安全組內

在此處輸入圖片說明

好吧,這看起來很可怕,我沒有安全感。

在數據庫安全的情況下,我需要的是這個。

  1. 我所有的 Lambda 函數都可以訪問數據庫
  2. MySQL WorkBench 可以訪問數據庫
  3. 我在本地測試,所以我可能需要在本地運行 lambda 並連接到 RDS

如果您需要,下面是我的template.yaml文件

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  abcd-restapi

  Sample SAM Template for abcd-restapi

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 100

Resources:
  GetAllAccountTypesLambda:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: abcd-restapi
      Handler: com.abcd.dao.accountingtype.GetAllAccountTypesLambda::getAllAccountTypes
      Runtime: java11
      MemorySize: 1024
      Environment: # More info about Env Vars: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#environment-object
        Variables:
          PARAM1: VALUE
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /accounttype
            Method: get

我應該怎么做才能刪除“全球免費訪問”並實現我上面提到的訪問?

- - - - - -更新 - - - - -

在聽從約翰的建議之后,這是我的安全組。 但是Lambda不能訪問數據庫,MySQL工作台可以

在此處輸入圖片說明

Lambda-SG 安全組

在此處輸入圖片說明

  1. 我所有的 Lambda 函數都可以訪問數據庫

最安全的方法是將您的 RDS 放在私有子網中,並將您的功能與您的 VPC 相關聯。 如果您希望它們也通過 NAT 訪問互聯網,這些功能也必須在私有子網中。

  1. MySQL WorkBench 可以訪問數據庫

如果您將 RDS 放在私有子實體中,您將無法直接從 VPC 外部訪問它。 最安全的方法是在本地工作站和 VPC 之間設置 VPN 或ssh 隧道 ssh 隧道最容易設置,最常用於測試和開發。

  1. 我在本地測試,所以我可能需要在本地運行 lambda 並連接到 RDS

與第 2 點相同。需要 VPN 或 ssh 隧道。

如果您的 Amazon RDS 數據庫位於公有子網中並設置為Publicly Accessible = Yes ,則您可以使用安全組來控制對數據庫服務器的訪問

  • 使用默認的“允許所有出站”設置在 Lambda 函數 ( Lambda-SG ) 上放置一個安全組
  • 使用允許從Lambda-SG訪問端口 3306 (MySQL) 的入站規則在 RDS 數據庫 ( DB-SG ) 上放置一個安全組。 也就是說, DB-SG專門引用了Lambda-SG
  • 將您自己的公共 IP 地址添加到DB-SG入站規則以允許訪問端口 3306 (MySQL)。

雖然從安全角度來看,可公開訪問的數據庫並不理想,但安全組將幫助您限制對服務器的訪問。 數據庫服務器還需要身份驗證才能連接到數據庫,這是一個額外的安全層。

私有子網與公共子網

分層防御方法到安全性 - IBM 文檔

在規划 Internet 安全策略時使用分層方法可確保穿透一層防御的攻擊者將被后續層阻止。

無法從 Internet 訪問私有子網中的資源。 這是所有企業網絡中使用的一個重要概念。 它為合法用戶帶來了額外的障礙(例如,需要 VPN 連接或通過堡壘服務器進行連接),但在考慮資源安全性時是值得的。

使用公共子網的好處純粹是為了讓您的訪問更簡單。 但是,它還通過消除安全層使未授權用戶的訪問變得更加簡單。 是的,安全組是可以限制訪問的防火牆,但它可能配置錯誤或允許過多訪問。 這是您根據您的風險偏好做出的選擇。

更安全的方法是將您的數據庫放在私有子網中 然后,如果您需要從 VPC 外部訪問數據庫,則需要使用 VPN 連接或通過堡壘服務器使用端口轉發(使用用於身份驗證的私鑰對)。

暫無
暫無

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

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