云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

云数据库_济南网站建设企业_限时特惠

小七 141 0

TFE和Sentinel:云数据主权的配置策略

HashiCorp Terraform的基础设施即代码使运营商能够大规模地自动化供应。这伴随着风险,因为每一个行动都可能产生更大的影响。Sentinel策略作为代码设置了护栏,以保护用户不受业务、安全和法规遵从性策略之外的基础架构更改的影响。本博客将介绍如何使用Terraform Enterprise编写和实施一个策略,以限制在某些可用区域中的资源供应,以确保数据主权。»关于策略作为代码Sentinel是用于策略即代码管理的HashiCorp框架,被构建为嵌入到现有软件中,以支持细粒度的、基于逻辑的策略决策。策略描述在什么情况下允许某些行为。Sentinel被嵌入到每个HashiCorp产品的企业版本中,并在HashiConf中首次引入。我们将在本博客中查看特定Sentinel策略的细节;Sentinel基础知识涵盖在:Announcing Sentinel,HashiCorp的policy as Code Framework,Why policy as Code as Code,and Terraform Enterprise:Applying policy as Code to infrastructure provisioning。»脚本我们的示例公司受到有关其数据主权的监管,他们有法律义务确保任何数据永远不会离开该国。由于AWS地区经常跨越多个国家,我们需要一个比我们之前文章中限制地区的政策稍微复杂一些。让我们来看看如何使用Sentinel来确保我们始终遵守此法规。此示例演示了一个Sentinel策略,该策略确保aws_实例仅放置在允许的可用性区域中。在策略检查失败的情况下,Terraform Enterprise将不允许Terraform应用发生。将报告一个已记录的错误,并向用户指示他们违反了硬强制(不能重写)策略,并且在更正该值之前,用户无法继续其操作。下面是此方案的示例策略。#请注意,必须在所有aws\u实例上显式指定可用性区导入"tfplan"#从所有模块获取所有AWS实例aws_instances=func(){实例=[]为tfplan.module_路径作为路径{实例+=值(tfplan.module.模块(路径)。resources.aws_实例)否则[]}返回实例}#允许的可用区域允许的\u区域=["us-east-1a","美国东部-1b"]#限制可用区域和区域的规则主=规则{所有aws_instances()都作为\u实例{所有实例作为索引,r{r。应用可用性区在允许的区域内}}}»预备知识您必须为aws_实例显式指定可用性区,否则此策略将失败。好消息是Sentinel可以用来验证这一点。这个博客的演示代码可以在这里找到以供参考。为了简单起见,下面的示例代码针对单个实例:提供商"aws"{区域="${可变区域}"}资源"aws_instance""演示节点"{ami="${变型ami}"实例类型="${变量实例类型}"计数="${变量实例计数}"可用性区="${可变可用性区}"标签{名称="${var.tag_服务器名称}"}}输出"演示节点"{value="${aws_instance.demo_节点.*.public\u-ip}"}此代码必须位于公共git repo或Terraform Enterprise的其他兼容源代码管理解决方案中。»在您的环境中使用策略»步骤1:创建新工作区在本节中,创建一个新的工作区并将其链接到terraform演示存储库。在Terraform Enterprise UI中,导航到在以下位置创建新的工作区视图:https://atlas.hashicorp.com/app/:organization/workspaces/new在浏览器中,其中:organization是要在其中创建工作区的组织的名称。输入terraform demo作为工作区名称,并选择您在完成先决条件步骤或创建的repo时分叉的terraform demo GitHub存储库。单击"创建工作空间"。导航到https://atlas.hashicorp.com/app/:organization/terraform demo/variables,其中:organization是在其中创建工作区的组织的名称。添加AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY变量,这些变量提供对AWS和Save的访问。如果您使用的是先决条件中的repo,那么变量设置将与此类似,从而导致故意失败。availability_zone变量是我们正在检查的值。»第2步:创建新策略在本节中,将创建一个新策略。导航到创建新策略视图的位置https://atlas.hashicorp.com/app/:在浏览器中显示:organization/settings/policies,其中:organization是要为其配置策略的组织的名称。输入geo_fence_lock作为策略名称,将强制模式设置为硬强制,并将下面的策略复制到策略代码文本区域。保存策略。#请注意,必须在所有aws\u实例上显式指定可用性区导入"tfplan"#从所有模块获取所有AWS实例get_aws_instances=func(){实例=[]为tfplan.module_路径作为路径{实例+=值(tfplan.module.模块(路径)。resources.aws_实例)否则[]}返回实例}#允许的可用区域允许的\u区域=["us-east-1a","美国东部-1b","us-east-1c","美国东部-1d","美国东部-1e","美国东部-1f",]aws_instances=获取\u aws\u instances()#限制可用区域和区域的规则region_allowed=规则{所有aws_实例都作为实例{所有实例作为索引,r{r。应用可用性区在允许的区域内}}}#要求其他规则为真的主规则主=规则{(允许区域_)否则为真}»步骤3:队列计划和审核日志在本节中,我们将看到在Terraform运行期间执行的策略。策略是为组织保存的,它将用于将来所有Terraform运行。导航到https://atlas.hashicorp.com/app/:organization/terraform demo/在浏览器中运行,其中:organization是组织的名称。排队等候一个计划。»验证策略检查在Terraform计划完成后,通过导航到查看计划和策略输出https://atlas.hashicorp.com/app/:organization/terraform demo/latest,其中:organization是组织的名称。单击"查看计划"和"查看检查"按钮可查看计划和策略检查阶段的日志。如上所示,地理围栏(防止基础设施配置到不允许的可用区域)是成功的。由于us-west-1b区域的故意故障,我们无法为任何未明确确定的可用区提供基础设施。策略检查日志如下所示:哨兵结果:假Sentinel评估为false,因为评估了一个或多个Sentinel策略错了。此错误不是由于未定义的值或运行时错误造成的。1个策略已评估。##政策1:地理围栏_锁定哨兵(强制要求)结果:错误错误-地理围栏_锁。哨兵:37:1-规则"main"错误-地理围栏_锁。哨兵:29:5-所有aws_实例都是{所有实例作为索引,r{r。应用可用性区在允许的区域内}}由于这项政策是强制性的(不能推翻),运营商不可能规避。通过设计,我们现在已经将我们的基础设施锁定在一个特定的区域。如果您希望验证这一点,您可以将您的地区更新回"us-east-1b",然后重新运行计划。»验证策略检查在Terraform计划完成后,通过导航到查看计划和策略输出https://atlas.hashicorp.com/app/:organization/terraform demo/latest,其中:organization是组织的名称。单击"查看计划"和"查看检查"按钮可查看计划和策略检查阶段的日志。Terraform运行的策略检查阶段将通过,因为硬强制可用性区域检查根据Terraform配置评估策略代码,并且us-east-1b变量符合策略定义。策略检查日志将类似于以下内容:哨兵结果:真这个结果意味着哨兵策略返回true并且哨兵策略允许行为。1个策略已评估。##政策1:地理围栏_锁定哨兵(强制要求)结果:正确真-地理围栏_锁。哨兵:37:1-规则"main"真-地理围栏_锁。哨兵:29:5-所有aws_实例都是{所有实例作为索引,r{r。应用可用性区在允许的区域内}}真-地理围栏_锁。哨兵:28:1-规则"允许区域"单击"Confirm&Apply"完成AWS中的Terraform运行和配置基础设施。»结论Sentinel策略作为代码管理是基础设施自动化的重要组成部分,它消除了手动执行策略和相关票务队列的需要。对于那些已经在使用Terraform Enterprise的用户,请尝试使用上面的示例。如果您想注册试用或了解更多有关Terraform Enterprise的信息,请访问https://www.hashicorp.com/products/terraform。