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

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

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

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

環境:生產

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

工作負載:所有其他工作負載;開放原始碼

AWS 服務:Amazon RDS

Summary

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

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

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

先決條件和限制

先決條件

  • 作用中AWS帳戶

  • 金鑰對

  • AWS Lambda 已安裝

架構

目標技術堆疊

  • Amazon RDS

  • AWS CloudTrail

  • AWS Lambda

  • Cloud Custodian

目標架構

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

在 上使用 Cloud Custodian 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
任務描述所需的技能

安裝 Cloud Custodian。

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

DevOps 工程師

檢查 Cloud Custodian 結構描述。

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

custodian schema aws.rds
DevOps 工程師

建立 Cloud Custodian 政策。

使用YAML副檔名,在其他資訊區段中儲存 Cloud Custodian 政策檔案下的程式碼。

DevOps 工程師

定義 Cloud Custodian 動作,以變更可公開存取的旗標。

  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事件啟動。

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

DevOps 工程師

相關資源

其他資訊

Cloud Custodian 政策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 整合

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