使用雲端託管人封鎖對 Amazon RDS 的公開存取 - AWS 方案指引

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

使用雲端託管人封鎖對 Amazon RDS 的公開存取

由阿比·庫瑪(AWS)和德瓦里卡·帕特雷(AWS)創建

環境:生產

技術:資料庫;安全性、身分識別、合規性

工作負載:所有其他的工作負載;

AWS 服務:Amazon RDS

Summary

許多組織在多個雲端供應商上執行其工作負載和服務。在這些混合雲環境中,除了個別雲端供應商提供的安全性外,雲端基礎架構還需要嚴格的雲端控管。像 Amazon 關聯式資料庫服務 (Amazon RDS) 這樣的雲端資料庫是必須監控任何存取和權限漏洞的重要服務。雖然您可以透過設定安全群組來限制對 Amazon RDS 資料庫的存取,但是您可以新增第二層保護以禁止諸如公用存取之類的動作。確保公共訪問被阻止將為您提供一般數據保護條例(GDPR),Health 保險可移植性和責任法案(HIPAA),美國國家標準與技術研究所(NIST)和支付卡行業數據安全標準(PCI DSS)合規性。

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

此模式提供如何在 AWS 上使用雲端託管人強制限制 Amazon RDS 執行個體上公有可存取性的指示。

先決條件和限制

先決條件

  • 有效的 AWS 帳戶

  • key pair

  • 已安裝 AWS Lambda

架構

目標技術堆疊

  • Amazon RDS

  • AWS CloudTrail

  • AWS Lambda

  • Cloud Custodian

目標架構

下圖顯示雲端託管人在 Amazon RDS 上將政策部署到 Lambda、AWS CloudTrail 啟動CreateDBInstance事件,並將 Lambda 函數設定PubliclyAccessible為 false。

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

工具

AWS 服務

其他工具

  • Cloud Mandian 將許多組織用來管理其公有雲帳戶的工具和指令碼統一為一個開放原始碼工具。它使用無狀態規則引擎進行策略定義和強制執行,其中包含雲端基礎架構的指標、結構化輸出和詳細報告。它與無伺服器執行階段緊密整合,以提供即時補救和回應,同時降低營運成本。

史诗

任務描述所需技能

安裝 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
任務描述所需技能

安裝雲託管。

若要為您的作業系統和環境安裝雲端託管人,請遵循雲端託管人說明文件中的指示。

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 工程師

相關資源

其他資訊

雲端託管人原則 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

C7 安全資源 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 整合