選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 Cloud Custodian 封鎖對 Amazon RDS 的公開存取 - AWS 方案指引

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

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

使用 Cloud Custodian 封鎖對 Amazon RDS 的公開存取

由 abhay kumar (AWS) 和 Dwarika Patra (AWS) 建立

Summary

許多組織會在多個雲端廠商上執行工作負載和服務。在這些混合雲端環境中,雲端基礎設施除了個別雲端提供者提供的安全性之外,還需要嚴格的雲端控管。Amazon Relational Database Service (Amazon RDS) 等雲端資料庫是一項重要的服務,必須監控是否有任何存取和許可漏洞。雖然您可以透過設定安全群組來限制對 Amazon RDS 資料庫的存取,但您可以新增第二層保護,以禁止公開存取等動作。確保封鎖公開存取將可協助您符合一般資料保護法規 (GDPR)、健康保險流通與責任法案 (HIPAA)、國家標準與技術研究所 (NIST) 和支付卡產業資料安全標準 (PCI DSS)。

Cloud Custodian 是一種開放原始碼規則引擎,可用來強制執行 Amazon RDS 等 Amazon Web Services (AWS) 資源的存取限制。透過雲端託管,您可以設定規則,根據定義的安全和合規標準來驗證環境。您可以使用 Cloud Custodian 來管理雲端環境,方法是協助確保符合安全政策、標籤政策,以及未使用的資源和成本管理的垃圾收集。使用 Cloud Custodian,您可以使用單一界面在混合雲端環境中實作控管。例如,您可以使用 Cloud Custodian 介面與 AWS 和 Microsoft Azure 互動,減少使用 AWS Config、AWS 安全群組和 Azure 政策等機制的工作量。

此模式提供在 AWS 上使用 Cloud Custodian 以在 Amazon RDS 執行個體上強制執行公有可存取性限制的指示。

先決條件和限制

先決條件

  • 作用中的 AWS 帳戶

  • 金鑰對

  • 已安裝 AWS Lambda

架構

目標技術堆疊

  • Amazon RDS

  • AWS CloudTrail

  • AWS Lambda

  • Cloud Custodian

目標架構

下圖顯示將政策部署至 Lambda 的 Cloud Custodian、啟動CreateDBInstance事件的 AWS CloudTrail,以及PubliclyAccessible將 Amazon RDS 上的 Lambda 函數設定為 false。

在 AWS 上使用雲端託管人來限制對 Amazon RDS 執行個體的公開存取。

工具

AWS 服務

其他工具

  • Cloud Custodian 會將許多組織用來管理公有雲端帳戶的工具和指令碼統一為單一開放原始碼工具。它使用無狀態規則引擎來定義和強制執行政策,並具有指標、結構化輸出和雲端基礎設施的詳細報告。它與無伺服器執行時間緊密整合,以低營運開銷提供即時修補和回應。

史詩

任務描述所需的技能

安裝 AWS CLI。

若要安裝 AWS CLI,請遵循 AWS 文件中的指示。

AWS 管理員

設定 AWS 登入資料。

設定 AWS CLI 用來與 AWS 互動的設定,包括 AWS 區域和您要使用的輸出格式。

$>aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: <your_secret_access_key> Default region name [None]: Default output format [None]:

如需詳細資訊,請參閱 AWS 文件

AWS 管理員

建立 IAM 角色。

若要使用 Lambda 執行角色建立 IAM 角色,請執行下列命令。

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}
AWS DevOps

設定 AWS CLI

任務描述所需的技能

安裝 AWS CLI。

若要安裝 AWS CLI,請遵循 AWS 文件中的指示。

AWS 管理員

設定 AWS 登入資料。

設定 AWS CLI 用來與 AWS 互動的設定,包括 AWS 區域和您要使用的輸出格式。

$>aws configure AWS Access Key ID [None]: <your_access_key_id> AWS Secret Access Key [None]: <your_secret_access_key> Default region name [None]: Default output format [None]:

如需詳細資訊,請參閱 AWS 文件

AWS 管理員

建立 IAM 角色。

若要使用 Lambda 執行角色建立 IAM 角色,請執行下列命令。

aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}
AWS DevOps
任務描述所需的技能

安裝雲端託管人。

若要為您的作業系統和環境安裝 Cloud Custodian,請遵循 Cloud Custodian 文件中的指示。

DevOps 工程師

檢查雲端託管結構描述。

若要查看您可以對其執行政策的 Amazon RDS 資源完整清單,請使用下列命令。

custodian schema aws.rds
DevOps 工程師

建立雲端託管政策。

使用 YAML 擴充功能,在其他資訊區段中儲存雲端託管政策檔案下的程式碼。

DevOps 工程師

定義雲端託管人動作,以變更可公開存取的旗標。

  1. 找到託管人代碼 (例如 /Users/abcd/custodian/lib/python3.9/site-packages/c7n/resources/rds.py)。

  2. 在 中尋找 RDSSetPublicAvailability類別rds.py,並使用額外資訊區段中 c7n 資源 rds.py 檔案下的程式碼來修改此類別。

DevOps 工程師

執行乾執行。

(選用) 若要檢查政策識別的資源,而不對資源執行任何動作,請使用下列命令。

custodian run -dryrun <policy_name>.yaml -s <output_directory>
DevOps 工程師

設定雲端託管人

任務描述所需的技能

安裝雲端託管人。

若要為您的作業系統和環境安裝 Cloud Custodian,請遵循 Cloud Custodian 文件中的指示。

DevOps 工程師

檢查雲端託管結構描述。

若要查看您可以對其執行政策的 Amazon RDS 資源完整清單,請使用下列命令。

custodian schema aws.rds
DevOps 工程師

建立雲端託管政策。

使用 YAML 擴充功能,在其他資訊區段中儲存雲端託管政策檔案下的程式碼。

DevOps 工程師

定義雲端託管人動作,以變更可公開存取的旗標。

  1. 找到託管人代碼 (例如 /Users/abcd/custodian/lib/python3.9/site-packages/c7n/resources/rds.py)。

  2. 在 中尋找 RDSSetPublicAvailability類別rds.py,並使用額外資訊區段中 c7n 資源 rds.py 檔案下的程式碼來修改此類別。

DevOps 工程師

執行乾執行。

(選用) 若要檢查政策識別的資源,而不對資源執行任何動作,請使用下列命令。

custodian run -dryrun <policy_name>.yaml -s <output_directory>
DevOps 工程師
任務描述所需的技能

使用 Lambda 部署政策。

若要建立將執行政策的 Lambda 函數,請使用下列命令。

custodian run -s policy.yaml

此政策接著將由 AWS CloudTrail CreateDBInstance事件啟動。

因此,對於符合條件的執行個體,AWS Lambda 會將可公開存取的旗標設定為 false。

DevOps 工程師

部署政策

任務描述所需的技能

使用 Lambda 部署政策。

若要建立將執行政策的 Lambda 函數,請使用下列命令。

custodian run -s policy.yaml

此政策接著將由 AWS CloudTrail CreateDBInstance事件啟動。

因此,對於符合條件的執行個體,AWS Lambda 會將可公開存取的旗標設定為 false。

DevOps 工程師

相關資源

其他資訊

雲端託管人政策 YAML 檔案

policies: - name: "block-public-access" resource: rds description: | This Enforcement blocks public access for RDS instances. mode: type: cloudtrail events: - event: CreateDBInstance # Create RDS instance cloudtrail event source: rds.amazonaws.com ids: requestParameters.dBInstanceIdentifier role: arn:aws:iam::1234567890:role/Custodian-compliance-role filters: - type: event key: 'detail.requestParameters.publiclyAccessible' value: true actions: - type: set-public-access state: false

c7n 資源 rds.py 檔案

@actions.register('set-public-access') class RDSSetPublicAvailability(BaseAction): schema = type_schema( "set-public-access", state={'type': 'boolean'}) permissions = ('rds:ModifyDBInstance',) def set_accessibility(self, r): client = local_session(self.manager.session_factory).client('rds') waiter = client.get_waiter('db_instance_available') waiter.wait(DBInstanceIdentifier=r['DBInstanceIdentifier']) client.modify_db_instance( DBInstanceIdentifier=r['DBInstanceIdentifier'], PubliclyAccessible=self.data.get('state', False)) def process(self, rds): with self.executor_factory(max_workers=2) as w: futures = {w.submit(self.set_accessibility, r): r for r in rds} for f in as_completed(futures): if f.exception(): self.log.error( "Exception setting public access on %s \n %s", futures[f]['DBInstanceIdentifier'], f.exception()) return rds

Security Hub 整合

雲端託管人可與 AWS Security Hub 整合,以傳送安全調查結果並嘗試修復動作。如需詳細資訊,請參閱宣布與 AWS Security Hub 的雲端託管整合

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。