本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用雲端託管人封鎖對 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 帳戶
已安裝 AWS Lambda
架構
目標技術堆疊
Amazon RDS
AWS CloudTrail
AWS Lambda
Cloud Custodian
目標架構
下圖顯示雲端託管人在 Amazon RDS 上將政策部署到 Lambda、AWS CloudTrail 啟動CreateDBInstance
事件,並將 Lambda 函數設定PubliclyAccessible
為 false。
![使用 AWS 上的雲端託管人來限制對 Amazon RDS 執行個體的公開存取。](images/pattern-img/90f9537e-9365-4da2-8a28-da0ff374743c/images/6d04ca3b-6aa4-4c62-ade9-8b7474928c5e.png)
工具
AWS 服務
AWS 可 CloudTrail協助您稽核 AWS 帳戶的管理、合規和營運風險。
AWS Command Line Interface (AWS CLI) (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列殼層中的命令與 AWS 服務互動。
AWS Identity and Access Management (IAM) 可透過控制誰經過身份驗證和授權使用 AWS 資源,協助您安全地管理對 AWS 資源的存取。
AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動調整規模,因此您只需為使用的運算時間付費。
Amazon Relational Database Service 服務 (Amazon RDS) 可協助您在 AWS 雲端中設定、操作和擴展關聯式資料庫。
其他工具
Cloud Mandian
將許多組織用來管理其公有雲帳戶的工具和指令碼統一為一個開放原始碼工具。它使用無狀態規則引擎進行策略定義和強制執行,其中包含雲端基礎架構的指標、結構化輸出和詳細報告。它與無伺服器執行階段緊密整合,以提供即時補救和回應,同時降低營運成本。
史诗
任務 | 描述 | 所需技能 |
---|---|---|
安裝 AWS CLI。 | 若要安裝 AWS CLI,請遵循 AWS 文件中的指示進行。 | AWS 管理員 |
設定 AWS 登入資料。 | 設定 AWS CLI 用來與 AWS 互動的設定,包括 AWS 區域和您要使用的輸出格式。
如需詳細資訊,請參閱 AWS 文件。 | AWS 管理員 |
建立 IAM 角色。 | 若要使用 Lambda 執行角色建立 IAM 角色,請執行下列命令。
| AWS DevOps |
任務 | 描述 | 所需技能 |
---|---|---|
安裝雲託管。 | 若要為您的作業系統和環境安裝雲端託管人,請遵循雲端託管人 | DevOps 工程師 |
檢查雲託管架構。 | 若要查看可針對其執行政策的 Amazon RDS 資源的完整清單,請使用下列命令。
| DevOps 工程師 |
建立雲端託管人政策。 | 使用 YAML 副檔名儲存在「其他資訊」區段中的「雲端託管人」原則檔案下的程式碼。 | DevOps 工程師 |
定義雲端託管人動作以變更可公開存取的旗標。 |
| DevOps 工程師 |
執行乾運行。 | (選擇性) 若要檢查原則識別哪些資源,而不對資源執行任何動作,請使用下列命令。
| DevOps 工程師 |
任務 | 描述 | 所需技能 |
---|---|---|
使用 Lambda 部署政策。 | 若要建立將執行原則的 Lambda 函數,請使用下列命令。
然後,AWS CloudTrail 因此,對於符合條件的執行個體,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