本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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 服務
AWS CloudTrail 可協助您稽核 AWS 帳戶的控管、合規和營運風險。
AWS Command Line Interface (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列 shell 中的命令與 AWS 服務互動。
AWS Identity and Access Management (IAM) 可透過控制已驗證和獲授權的人員來協助您安全地管理對 AWS 資源的存取。
AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需支付您使用的運算時間。
Amazon Relational Database Service (Amazon RDS) 可協助您在 AWS 雲端中設定、操作和擴展關聯式資料庫。
其他工具
Cloud Custodian
會將許多組織用來管理公有雲端帳戶的工具和指令碼統一為單一開放原始碼工具。它使用無狀態規則引擎來定義和強制執行政策,並具有指標、結構化輸出和雲端基礎設施的詳細報告。它與無伺服器執行時間緊密整合,以低營運開銷提供即時修補和回應。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
安裝 AWS CLI。 | 若要安裝 AWS CLI,請遵循 AWS 文件中的指示。 | AWS 管理員 |
設定 AWS 登入資料。 | 設定 AWS CLI 用來與 AWS 互動的設定,包括 AWS 區域和您要使用的輸出格式。
如需詳細資訊,請參閱 AWS 文件。 | AWS 管理員 |
建立 IAM 角色。 | 若要使用 Lambda 執行角色建立 IAM 角色,請執行下列命令。
| AWS DevOps |
任務 | 描述 | 所需的技能 |
---|---|---|
安裝雲端託管人。 | 若要為您的作業系統和環境安裝 Cloud Custodian,請遵循 Cloud Custodian 文件 | 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
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