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