使用 Cloud Custodi RDS an 阻止公众访问亚马逊 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Cloud Custodi RDS an 阻止公众访问亚马逊

由 abhay kumar (AWS) 和 Dwarika Patra () 创作 AWS

摘要

许多组织在多个云供应商上运行其工作负载和服务。在这些混合云环境中,除了各个云提供商提供的安全性外,云基础设施还需要严格的云治理。诸如 Amazon Relational Database Service (AmazonRDS) 之类的云数据库是一项重要的服务,必须对其进行监控,以防存在任何访问和权限漏洞。尽管您可以通过配置安全组来限制对 Amazon RDS 数据库的访问,但您可以添加第二层保护来禁止诸如公开访问之类的操作。确保禁止公众访问将有助于您遵守《通用数据保护条例》(GDPR)、《健康保险便携性和问责法》(HIPAA)、美国国家标准与技术研究所 (NIST) 和支付卡行业数据安全标准 (PCIDSS) 的合规性。

Cloud Custodian 是一个开源规则引擎,可用于对亚马逊网络服务 (AWS) 资源(例如亚马逊RDS)实施访问限制。借助 Cloud Custodian,您可设置规则,根据定义的安全和合规标准对环境进行验证。您可使用 Cloud Custodian 来管理您的云环境,帮助确保遵守安全政策、标签政策、未使用资源的垃圾回收和成本管理。借助 Cloud Custodian,您可使用单一界面在混合云环境中实施治理。例如,你可以使用 Cloud Custodian 界面与 AWS Microsoft Azure 进行交互,从而减少使用 AWS Config、AWS安全组和 Azure 策略等机制的工作量。

此模式提供了有关在亚马逊RDS实例上使用 Cloud Cu AWS stodian 强制限制公众访问权限的说明。

先决条件和限制

先决条件

  • 一个活跃的AWS账户

  • 密钥对

  • AWS已安装 Lambda

架构

目标技术堆栈

  • Amazon RDS

  • AWS CloudTrail

  • AWS Lambda

  • Cloud Custodian

目标架构

下图显示了云托管人将策略部署到 Lambda AWS CloudTrail 、启动事件以及在 Amazon CreateDBInstance 上将 Lambda 函数设置PubliclyAccessible为 false。RDS

使用 Cloud Custodian AWS 来限制公众访问亚马逊RDS实例。

工具

AWS 服务

其他工具

  • Cloud Custodian 将大多数组织用于管理其公共云账户的多种工具和脚本统一到一个开源工具中。它使用无状态规则引擎来定义和实施策略,为云基础设施提供指标、结构化输出和详细报告。它与无服务器运行时系统紧密集成,以低运营开销提供实时修复和响应。

操作说明

任务描述所需技能

安装AWSCLI。

要安装 AWSCLI,请按照AWS文档中的说明进行操作。

AWS 管理员

设置AWS凭据。

配置AWSCLI用于与之交互的设置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. rds.py 中找到 RDSSetPublicAvailability 类,然后使用其他信息部分中的 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 工程师

相关资源

其他信息

云托管人策略文件 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 可以与 Sec AWSurity Hub 集成,以发送安全调查结果并尝试补救措施。有关更多信息,请参阅宣布云托管人与 Sec AWS urity Hub 集成