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

美国服务器_上海科技网站建设_返利

小七 141 0

宣布面向Terraform云和企业的业务感知策略

今天,我们宣布在Terraform云和Terraform Enterprise中,通过我们称之为业务感知策略(business aware Policies)从多个业务系统检索数据的能力。现在,组织可以从其他系统查询信息,以确定基础结构中的更改是否符合公司策略,批准符合的更改,并自动拒绝或升级违反策略的更改。HashiCorp Terraform内置的Sentinel policy as code功能已经扩展,允许策略从外部api检索数据。使用HTTP/S,策略现在可以根据从任何内部或外部服务获得的信息来做出决策—从验证其他部门是否已批准对服务的更改,到检查当前的天气预报。这个新特性为使用Sentinel的客户提供了大量新的可能性;我们将在本博客中探讨其中的一些。»在策略中使用http导入新功能是通过引入名为http的新导入来实现的。我们可以看到在以下策略中使用http导入的最小演示:导入"http"响应=http.get("https://example.hashicorp.com")通过包含两行代码,我们使用了这个新的添加来查询外部服务。第一行(import"http")将新功能添加到策略中,而第二行从URL检索数据(在本例中为"https://example.hashicorp.com"). 最后一步是定义一个使用这些数据的规则:导入"http"响应=http.get("https://example.hashicorp.com")main=规则{责任主体包含"某物"}在这里,我们正在检查"something"一词是否出现在响应中的任何位置。如果这样做,则此策略将通过,否则将返回失败并停止运行。»确认部署窗口我们的许多客户都有预先定义的维护窗口,允许对某些系统进行部署。或者他们可能有相反的情况,因为即将到来的重大事件,会有一个停电期来确保稳定。在这些情况下,这些部署窗口有一个主要的真相来源,由适当的团队维护。执行这些部署窗口取决于团队的最佳意图以及整个部署过程中的适当监督。现在,团队可以编写策略来自动化遵从性,并且有信心即使是善意的团队成员也不会意外地让更改通过。导入"http"导入"json"需求=http.请求("https://deploystatus.internal")响应=json.unmarshal(http.get(要求)主体)main=规则{respdeploy_window_open"]为true}在本例中,我们在前一个示例的基础上扩展了json导入。这里的假设是,我们查询的HTTP端点返回一个JSON文档,因此我们将响应主体转换为本机Sentinel数据结构。现在我们已经转换了数据,我们可以在一个规则中对其进行计算,并检查deploy_window_open的值是否设置为true。现在,我们的策略作者可以编写知道任何部署窗口的策略,而不必在发生更改时更新策略。负责定义这些窗口的团队可以在一个中心位置执行此操作,部署更改的团队具有自动策略检查带来的额外信心,并且不必担心他们是否错过了一封邮件,其中说当前存在部署中断。对于每个策略,组织还可以使用Sentinel强制级别来决定是将失败升级为手动审核和批准,还是自动拒绝。»限制允许的集合另一个经常被请求的用例是从一个集中的位置检索一组批准的值。这方面的例子包括子网的特定网络CIDR范围(以避免与内部范围冲突),或者具有可在云实例上使用的预先批准的映像的白名单。现有的方法是将这些信息直接嵌入到策略中。当它工作时,这种硬编码的方法在允许什么的定义发生变化时就成为维护的负担。此外,这意味着信息在多个系统中扩散,不再有单一的真相来源。现在可以使用http导入来从API检索当前允许值的列表,而不是硬编码这些值:导入"http"导入"json"导入"sockaddr"导入"tfplan"需求=http.请求("https://cidrrangers.internal")响应=json.unmarshal(http.get(要求)主体)不允许的_cidr_blocks=响应内部_cidr_blocks"]no_dissalled_cidrs=规则{全部tfplan.resources.aws_子网作为子网{所有子网作为子网{所有不允许的区块作为区块{不是包含sockaddr.is(街区,subnet.applied.cidr_块)}}}}主=规则{不允许使用}此策略现在将从内部API获取内部CIDR块的列表,使用tfplan导入迭代对建议计划中存在的子网的任何更改,然后最后使用sockaddr导入来确保配置的范围在所有内部块之外。»验证请求如果Terraform企业安装只与可信环境中的服务通信,那么网络级别的隔离就足以确保只从受信任的客户端请求数据。对于很多用例来说,信任级别不能或者不应该被假定。因此,我们提供了自定义默认请求设置以允许请求进行身份验证的功能:导入"http"参数标记需求=http.请求("https://example.hashicorp.com")..with_header("授权","令牌"+令牌)响应=http.get(要求)这个例子中有一些新概念。首先,我们使用新引入的param功能,这意味着我们不需要将用户名和密码等敏感值硬编码到我们的策略中。相反,我们可以晚些时候把它们传过来(更多关于我们以后如何做的)。我们还必须更新设置请求的方式,以便可以将其配置为使用默认设置以外的其他内容。我们通过使用http.请求初始化我们的请求。然后,我们调用with_头方法为"Authorization"头设置一个自定义值,即API令牌。最后我们将请求传递到http.get并且可以像我们以前那样处理请求。我们还提供了一种方法,使针对任何使用HTTP基本身份验证的API进行身份验证更容易集成:导入"http"param example_用户名param example_密码需求=http.请求("https://example.hashicorp.com").使用_basic_auth(示例_用户名,示例_密码)响应=http.get(要求)该方法类似于头定制,除了在这个场景中,我们可以使用_basic_auth调用并提供用户名和密码,这将为我们设置适当的头值。»配置参数上一个示例突出了另一个新特性,即Sentinel策略接收参数以在策略中使用的功能。您可以在"策略集设置"页面的"新建哨兵参数"部分中设置这些值:»宇宙意识在构建这个特性时,团队正在寻找新的方法来扩展策略以利用新功能。迄今为止最有创意的例子是查询nasapi来检索近地天体的列表。下面的政策将检索一份近地天体的清单,寻找任何有潜在危险的小行星,如果有一颗小行星在路上,阻止任何改变……我们假设我们可能有比在这种情况下推动生产改变更大的事要担心。#没有危险的小行星-今天。哨兵强制执行不#"潜在危险"的小行星正在接近它们#今天离地球最近的点在1000000英里之内。因为如果#有一颗潜在的危险小行星正在接近#万里之外,我们太紧张和分心了#正在改变我们的基础设施!导入"http"导入"json"导入"字符串"导入"时间"param api_令牌年份=字符串(时间。现在。年份)月=字符串(时间。现在。月)day=字符串(时间。现在。白天)今天=字符串.join([年、月、日],"-")基本url="https://api.nasa.gov/neo/rest/v1/feed?"start_query="start_date="+今天api_query="&api_key="+api_令牌完整的\u url=基本的\u url+开始的\u查询+api的查询no_close_hazardous_asteroids=func(小行星){_safe=真作为小行星{hazardous=小行星是"潜在的"危险的"小行星"]approach U data=小行星关闭U进近_数据"][0]距离=进近数据未命中距离"]英里"]如果危险为真且浮动(距离)