本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
通过使用 Cloud Custodian 来阻止对 Amazon RDS 的公有访问
创建者:abhay kumar (AWS) 和 Dwarika Patra (AWS)
摘要
许多组织在多个云供应商上运行其工作负载和服务。在这些混合云环境中,除了各个云提供商提供的安全性外,云基础设施还需要严格的云治理。Amazon Relational Database Service (Amazon RDS) 等云数据库是一项重要的服务,必须对其进行监控以防存在任何访问和权限漏洞。尽管您可通过配置安全组来限制对 Amazon RDS 数据库的访问,但您可添加第二层保护来禁止诸如公有访问之类的操作。确保阻止公有访问将有助于您遵守一般数据保护条例 (GDPR)、健康保险流通与责任法案 (HIPAA)、美国国家标准与技术研究所 (NIST) 和支付卡行业数据安全标准 (PCI DSS)。
Cloud Custodian 是开源规则引擎,您可以使用它来强制执行对 Amazon Web Services (AWS) 资源(例如 Amazon RDS)的访问限制。借助 Cloud Custodian,您可设置规则,根据定义的安全和合规标准对环境进行验证。您可使用 Cloud Custodian 来管理您的云环境,帮助确保遵守安全政策、标签政策、未使用资源的垃圾回收和成本管理。借助 Cloud Custodian,您可使用单一界面在混合云环境中实施治理。例如,您可使用 Cloud Custodian 界面与 AWS 和 Microsoft Azure 进行交互,从而减少使用 AWS Config、AWS 安全组和 Azure 策略等机制的工作量。
此模式提供了在 AWS 上使用 Cloud Custodian 强制限制对 Amazon RDS 实例的公有访问权限的说明。
先决条件和限制
先决条件
一个有效的 Amazon Web Services account
已安装 AWS Lambda
架构
目标技术堆栈
Amazon RDS
AWS CloudTrail
AWS Lambda
Cloud Custodian
目标架构
下图显示了云托管人将策略部署到 Lambda、AWS 启动事件以及在 Amazon CreateDBInstance
RD CloudTrail S 上将 Lambda 函数PubliclyAccessible
设置为 false。

工具
Amazon Web Services
AWS CloudTrail 可帮助您审计 AWS 账户的治理、合规和运营风险。
AWS 命令行界面(AWS CLI)是一种开源工具,它可帮助您通过命令行 Shell 中的命令与 Amazon Web Services 交互。
AWS Identity and Access Management (AWS IAM) 通过控制验证和授权使用您 AWS 资源的用户,帮助您安全地管理对您 AWS 资源的访问。
AWS Lambda 是一项计算服务,可帮助您运行代码,而无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。
Amazon Relational Database Service (Amazon RDS) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展关系数据库。
其他工具
Cloud Custodian
将大多数组织用于管理其公共云账户的多种工具和脚本统一到一个开源工具中。它使用无状态规则引擎来定义和实施策略,为云基础设施提供指标、结构化输出和详细报告。它与无服务器运行时系统紧密集成,以低运营开销提供实时修复和响应。
操作说明
Task | 描述 | 所需技能 |
---|---|---|
安装 AWS CLI。 | 要安装 AWS CLI,请按照 AWS 文档中的说明进行操作。 | AWS 管理员 |
设置 AWS 凭证。 | 配置 AWS CLI 用于与 AWS 交互的设置,包括 AWS 区域和您要使用的输出格式。
有关更多信息,请参阅 AWS 文档。 | AWS 管理员 |
创建一个 IAM 角色。 | 要创建具有 Lambda 执行角色的 IAM 角色,请运行以下命令。
| AWS DevOps |
Task | 描述 | 所需技能 |
---|---|---|
安装 Cloud Custodian。 | 要为您的操作系统和环境安装 Cloud Custodian,请按照 Cloud Custodian 文档 | DevOps 工程师 |
检查 Cloud Custodian 架构。 | 要查看您可针对其运行策略的 Amazon RDS 资源的完整列表,请使用以下命令。
| DevOps 工程师 |
创建Cloud Custodian策略。 | 使用 YAML 扩展名将 Cloud Custodian 策略文件下的代码保存在其他信息部分。 | DevOps 工程师 |
定义 Cloud Custodian 操作以更改可公开访问的标志。 |
| DevOps 工程师 |
执行试运行。 | (可选)要在不对资源运行任何操作的情况下检查策略识别了哪些资源,请使用以下命令。
| DevOps 工程师 |
Task | 描述 | 所需技能 |
---|---|---|
使用 Lambda 部署策略。 | 要创建将运行策略的 Lambda 函数,请使用以下命令。
然后,该政策将由 AWS CloudTrail 因此,对于符合标准的实例,AWS Lambda 可将可公开访问的标志设置为 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