Terraform评估的云 Custodian 提供商
项目描述
Cloud Custodian Terraform Provider
Custodian的terraform提供程序可以编写和评估针对Terraform IaaC模块的custodian策略。
tldr: 我们希望能够在devops/ci管道中直接针对IaaC资产(terraform、cfn等)编写custodian策略。
目的
其主要目的是与ci/cd管道集成,以便在部署生命周期早期评估合规性和治理。Custodian云提供程序提供了实时检测和修复,作为对环境中已部署基础设施的检测控制,无论其如何部署。作为初始目标,Terraform提供程序旨在在生命周期早期提供预防性执行,即实现政策执行的左移。
管道CLI
在考虑扩展到左移管道用例时,一个变得更加清晰的问题是,保管人的默认cli用户体验可能并不完全适合目标受众。当我们操作云资源时,我们必须处理数千到数百万的基数。当我们操作在管道中时,我们通常处理的是10的基数。此外,还有一个目标期望,即具有与ci工具(如github注释)相关联的丰富输出,或者为开发者定位问题,以及彩色输出和其他友好功能。我们可以将此作为新的子命令集成到主保管人cli中(取决于已安装的iaac提供者),或者有专门的子命令关联。
cli的另一个主要缺陷是我们不能直接将iaac文件作为我们想要考虑的数据集传递。通常,策略将此表示为策略中的查询参数化,作为指定确切目标集的能力。但这里的用例通常是命令行驱动的,指定策略文件和目标IaaC文件,以及其他可能的vcs集成(有关delta文件的policystream样式)或ci集成。
资源
就iaac提供者而言,我们可以进行松散类型或强类型操作。在强类型中,我们可以指定确切属性,并可能对用户指定的属性进行额外的验证,但这需要保持所有iaac提供者资产的最新存储库,这可能相当大且快速变化(例如,terraform有超过150个提供者,都是独立发布的)。目前,我认为保持对资源的松散类型操作会更好。..并且可能将提供者可访问的资源属性作为文档的一部分进行记录。
松散类型将使与现有提供者无缝工作,但策略编写者必须查阅各自提供者的参考文档以了解可用的属性或甚至提供者资源类型的存在。从保管人的角度来看,我们将使用跨提供者资源类型的通用资源实现。
示例
- resource: terraform.aws_dynamodb_table
name: ensure encryption
filters:
server_side_encryption.enabled: true
kms_key_arn: key_alias
custodian run terraform.yml
custodian report --format=
专用cli
custodian run-source terraform.yml