Geoffrey Keating.2021年6月1日

我们的年度看看过去一年的态度,偏好和经验如何发展。......

最近的文章

Geoffrey Keating.2021年6月1日

我们的年度看看过去一年的态度,偏好和经验如何发展。......

安迪李2021年6月1日

访问始终更改。当您在一家新公司开始时,您通常会根据您的团队和角新万博app2.0下载色在第一天提供给您的一组应用程序的访问权限。即使在第一节,您授予的访问与您需要进行的访问之间可能存在差异。这导致两种结果:欠下的或过度提供的访问。

对于管理云基础设施账户的IT和安全团队来说,确保对这些账户的访问是困难和可怕的;系统很复杂,风险也很高。如果您授予过多的访问权限,您可能会允许不良行为者访问您的工具和基础设施,这最多会导致违反通知;在最坏的情况下,它会导致公司倒闭,游戏结束。新万博app2.0下载如果你给予的权限太少,你就在同事和他们需要做的工作之间设置了障碍,这意味着你正在降低公司的生产力。新万博app2.0下载

获得访问权限

初创公司和小公司通常采取的方法是允许访问。在这些公司中,早期生产力对于业务的成功至关重要。一个员工因为缺少访问权限而被锁定在系统之外,意味着生产力的损失和业务收入的损失。

如果给员工对每个系统的永久管理权限,就可以优化速度,但代价是员工账户被泄露和内部威胁带来的风险增加。这导致了增加攻击表面.随着公司的发展,新万博app2.0下载确保关键资源的访问变得更加重要,而这需要一种不同的方法。

欠下的访问权限

如果你给员工的权限太少,就会迫使他们更频繁地请求权限。尽管新员工最初会根据他们的团队和角色获得访问权限,但新职责和新项目可以迅速增加他们需要的访问范围。根据您公司提供访问的流程,这对于请求新万博app2.0下载者、批准者或通常两者都是很麻烦的。

在Segment,我们在亚马逊Web服务(AWS)和Google云平台(GCP)中拥有生产环境。我们需要自理地保护这些账户,以便我们的工程师可以继续建立快速和安全.在许多公司,您可能依赖于一个集中的团队来管理内部访问。虽然这是一种简单的方法,但它不能伸缩——团队成员对请求的上下文数量有限,可能会意外地过度提供请求者的访问。在Segment,我们通过构建access Service来解决管理最低权限云访问的问题:access Service是一种支持基于时间的同行评审访问的工具。

设置舞台:在段的访问

在Segment,我们在数十个SaaS应用程序和代表不同访问级别的云提供商中有数百个角色。在过去,我们必须分别登录每个应用程序或系统才能授予用户访问权限。我们的IT团队设法“联合”我们的云访问,并使用Okta作为我们的身份提供商。这为我们提供了一个单独的位置来管理哪些用户可以访问哪些角色和应用程序。这篇博文的其余部分建立在这个联邦访问系统之上。

如果您的组织还没有构建类似的东西,那么以下资源可以帮助您构建和设置自己的联邦云访问系统。

博客:

文档:

将Okta应用映射到AWS角色

通过将Okta应用程序配置为云提供商角色,工程师只需点击一下,就可以通过具有适当权限的单点登录(SSO)验证云提供商。

每个Okta应用程序都映射到一个“云账户的作用”(或“项目角色“对于GCP)。例如,在AWS,我们有一个宿舍账户与提供对特定资源的读访问的角色。在Okta,我们有一个相应的应用程序名为“分期读- AWS角色”,允许工程师验证到AWS分期帐户,并承担读角色。

这需要配置OKTA应用程序每个“云帐户角色”组合,在撰写本文时是150多个OKTA应用程序。

使用OKTA配置GCP略有不同,以及如何执行此操作的技术详细信息在这个博客的底部

将Okta组映射到SaaS应用程序组

除了身份验证之外,身份提供者还可以帮助进行授权。当用户访问一个应用程序,但没有正确的权限来完成他们的工作时,他们会感到沮丧,这是可以理解的。

身份提供者已达成一组通用的REST API,用于管理调用的配置,取消和组映射SCIM(跨域标识管理系统)。

如果应用程序支持SCIM,则可以在身份提供程序(例如OKTA)中创建组,该组将将用户成员身份映射到应用程序中。使用此设置,将用户添加到OKTA组将自动将其添加到应用程序中的相应组。同样,当用户从OKTA中的应用程序未分配时,应用程序组的成员资格也将丢失。

SCIM允许我们提供粒度,应用级别访问,同时使用我们的身份提供商作为真理来源。

通过一个可以管理所有云提供商的访问,问题应该解决,对吧?不完全的…

虽然底层okta应用程序和群体系统工作得很好,但我们很快就遇到了更多的人类问题。

集中访问管理的缺陷

即使有了我们令人敬畏的新的Okta+AWS系统,我们仍然需要一个流程,让一个集中的团队通过Okta提供访问。在许多公司,这个团队是IT。在Segment,这是一个叫Boggs的人。请求将进入他的收件箱,他将手动检查请求原因,并决定是否有更适合该任务的访问级别。最后,他会去Okta管理面板,并为用户提供适当的应用程序。虽然这个系统工作了一段时间,但它是不可扩展的,并且存在重大缺陷。

永久访问

一旦将应用程序配置到用户,他们就可以访问,直到它们左侧段。尽管永久访问,他们可能不会需要永久的访问。不幸的是,我们的手动配置过程没有类似的可伸缩方式来确保在不再需要访问时删除访问。被授予一次性任务访问权限的人现在拥有了永久访问权限,这些权限在他们实际需要之后很长一段时间仍然存在。

由于上下文有限而难度缩放

作为一名工程经理,Boggs对可用IAM角色及其访问级别有很强的认识。这允许他通过确定使用不太敏感的角色的机会来减少不必要的访问。这种环境很难复制,这也是为什么我们不能简单地将这种责任扩展到更大的IT团队的一个重要原因。

最集中的IT团队无法与他们提供的所有应用程序密切合作,这使得它们难以评估请求。强制执行最小权限的原则可能需要在特定应用程序中彻底了解访问边界。如果没有这种知识,您将在难以确定请求者是否真正需要“管理员”,或者如果它们仍然可以使用“写入”权限,或者甚至只需“读取”访问。

来自数据工程团队的凯尔请求进入雷达管理角色进行“调试”。他们究竟需要访问什么?只读角色有用吗?等等,谁是凯尔?!他们是上周开始的吗?他们说他们需要这个权限来做他们的工作我仍然需要做我的......批准。

这很慢

尽管比大多数人来处理访问请求更好,但Boggs是一个繁忙的工程经理。虽然首先提供访问权限是一个不常的任务,但由于公司的增长,它开始占用宝贵的块,并且越来越难以理解每个请求的背景。新万博app2.0下载

我们考虑涉及来自IT团队的额外团队成员,但这仍然需要时间,因为他们需要联系每个系统的所有者来确认应授予访问权限。最终,通过有限的集中验证池,通过共享队列的请求,使响应时间不如理想。

打破Boggs

Boggs尝试使用基于角色和团队的复杂脚本规则来自动解决部分问题,但仍然存在破坏系统的情况。他将如何处理团队重命名、转换、合并或拆分的重组?当用户切换团队时会发生什么?当团队有短期访问工具的合法业务需求时,会发生什么?使用当前的系统,Boggs提供的任何访问都将永远持续下去——除非有人去手动审计Okta应用程序的未使用访问。

最终,我们发现自己在一个情况下,我们有很多过度配置的用户,可以访问敏感角色和权限。为了确保我们理解问题实际上有多糟糕,我们测量了我们特权角色的访问利用率。我们研究每个员工可以访问多少个特权角色,并将其与过去30天实际使用的特权角色进行了比较。

结果令人惊讶:未使用60%的访问权限。

管理长寿访问根本没有规模。我们需要找到一种方法将集中式访问管理系统转换为分布式的方法。

访问服务

在真实的访问世界中,我们不应该把用户的访问占用看作是静态的,而应该把它看作是无定形的和不断变化的。

当我们采用这一观点时,它让我们能够构建Access Service,这是一个内部应用程序,允许用户获得他们真正需要的访问,并避免提供太少或太多访问的失败模式。

Access Service允许工程师在一段时间内请求对单个角色的访问,并让他们的同行批准该请求。批准者来自一个预定义的列表,这使得访问请求过程类似于GitHub向指定的审批人提交请求

请求一经批准,Access Service就为用户提供适合角色的Okta应用程序或组。每日cron作业检查请求是否过期,如果过期则取消对用户的配置。

从高层次上看,这是一个简单的web应用程序,但让我们仔细看看它们的一些特定功能和解锁内容。

临时访问

访问服务的神奇之处在于从长期访问到临时访问的转变。通常,工程师只需要临时访问来完成一个定义的任务。

一旦完成该任务,他们就可以访问他们不再需要,这违反了最不特权的原则。使用旧过程修复此过程将意味着手动取消OKTA应用程序 - 添加尚未添加其他任务到一个已经很痛苦的手工工作流。

通过访问服务,用户可以指定访问请求的持续时间。如果审批者认为任务的持续时间太长,他们可以拒绝批准请求。这个持续时间也用于自动取消他们的访问权限一旦请求到期。

Access Service提供了两种类型的持续时间:“基于时间的访问”和“基于活动的访问”。

基于时间的访问具体的时间段,如一天、一周、两周、四周。这是理想的不寻常的任务,如:

  • 修复需要您通常不需要角色的错误

  • 执行数据迁移

  • 帮助客户对生产实manbetx客户端应用下载例进行故障排除,您通常不会访问

基于活动的访问是一个动态的每次使用授予您的应用程序或角色时延长访问过期时间的持续时间。这对于日常工作功能所需的访问非常理想——没有人希望每个月都发出少量新的访问请求。然而,我们不为我们的敏感角色提供这种类型的访问。广泛访问角色或有权访问敏感数据的角色需要定期批准以维护访问权限。基于活动的访问提供了摩擦和访问之间更实际的平衡,与我们的目标一致,使我们的工程师能够快速和安全地构建

指定的批准者

我们之前的流程最大的限制之一是必须由一个人批准所有的事情。在Access Service中,每个应用程序都有一份与系统密切合作的审批人员名单。通过将决策权委托给专家,我们确保了获得决策权的人知道谁应该拥有决策权。

要启动,您无法批准您自己的访问请求。(抱歉红色团队。)每个应用程序都有一个“系统所有者”,该批责维护其批准者列表。当用户创建访问请求时,它们选择一个或多个允许批准以查看他们的请求。由于批准者列表仅包含与系统密切合作的人,因此批准者具有更好的背景和对系统的理解而不是中央团队。

这使得批准者更容易拒绝不合理或过于允许的访问请求,并鼓励用户请求下层的访问(例如,告诉它们请求只读角色而不是读/写角色)。由于批准者之间的传入请求是“负载平衡”,因此用户还会看到其请求的响应时间更快。

供应访问始终需要两个人,就像GitHub拉出请求一样。用户无法选择自己作为批准者,即使它们是系统所有者。访问服务还支持具有不同批准要求的“紧急访问”机制。这可以防止访问服务阻止随叫随到或站点可靠性工程师,如果他们需要在夜间中间访问。

随着每个应用的系统所有者的任命,随着我们引入具有新的访问角色和级别的新工具,我们的分布式审批者池继续扩大。这就是安全界所称的“左”推

当您“推左”时,您将在开发生命周期中提前介绍安全注意事项,而不是尝试在使用中进行改造。在软件工程空间中,“推左”导致工程师学习更多关于安全性。这意味着最熟悉该系统的人是实现安全修复的最知识渊博的人。由于工程师是设计和现在维护软件的人,因此它们比中央安全团队更有更多的背景。同样,访问服务裁员中央团队,并赋予系统所有者对谁应该可以访问其系统的决定,以及在什么级别。这显着减少了IT团队花费供应访问的时间,并将其释放为更有意义的工作。

它是如何工作的

访问服务,如我们的许多内部应用程序可以访问开放的互联网,但保护OKTA后面。

访问服务的基本单元是“请求”。想要访问的用户创建一个包含四条信息的请求:

  • 他们想要访问的应用程序

  • 他们想要访问的持续时间

  • 说明为什么他们需要访问

  • 他们想要审核请求的批准者

当他们点击“请求访问”时,Access Services会向被选中的审批者发送一个Slack通知。和许多现代公司一样,Segment也有很高程度的Slack存在。使用这个平台使Access Service成为人们工作流程中更自然、更少干扰的一部分。即使请求访问的用户是特定应用程序的审批者,他们也必须从不同的审批者那里获得批准——每个请求必须涉及两个人。

访问请求在Web应用程序中跟踪,因此您可以看到您打开的请求以及您目前可以访问的角色。

当他们的请求被批准时,请求者会通过Slack得到通知,这样他们就知道他们现在可以回到他们最初需要访问的任务。

结果

在我们将访问过程迁移到访问服务后,结果是零长寿的访问我们在AWS和GCP中的任何特权云角色。授予这些角色的所有访问如果没有被积极使用就会过期。

在下面的图表中,“接入点”指的是访问每个管理角色的用户数量。在使用Access Service之后,我们将拥有特权访问的人数减少了90%。

在下图中,“活动”是指在过去30天内使用应用程序的人数。因为这个数字是更高比接入点的数量,这表明在过去30天中使用的更多访问量比当前已提供

这似乎很奇怪 - 管理应用程序如何用过的被超过总人数的人供应访问?这是因为过期的访问已经被自动剥夺,在30天窗口结束时减少了接入点的数量!

结论

通过确认访问需求不断变化,我们能够创建更实用的方法来管理访问控制。

访问服务允许我们简化访问批准过程。通过直接向指定批准者路由请求,我们能够从具有丰富上下文的人获得快速批准。访问请求的基于时间的组件允许服务定期删除不需要的访问,防止我们的访问攻击表面变得太大。最后,将Slack集成到系统中使批准更快,确保您在您的请求已获得批准时立即知道,并在请求到期时提醒您,因此您不会在尝试完成工作时遇到意外的访问丢失。

虽然尝试重塑现有的既良好的过程可能是令人生畏的,但结果可能会令人难以置信的奖励。首先写下你的目标,思考你不喜欢的东西,以及对当前国家的痛苦是什么,重新评估你的核心假设。公司始终改变,您的流程必须保持;导致以前系统的情况可能不再适用于今天。最重要的是,请记住使用用户的工作流程,因为安全取决于整个公司的参与。新万博app2.0下载

未来发展

政策

Access Service中的应用程序目前是可单独定制的。然而,如果我们想要跨多个相似的应用进行更改,这可能会导致可伸缩性问题。例如,如果我们决定将对多个AWS帐户的访问限制在不超过一周的范围内,那么目前我们必须为每个单独的角色编辑允许的持续时间。通过介绍政策,我们将能够将几个角色映射到一个策略,使我们能够轻松地应用前面示例中的更改。

动态的角色

目前,Access Service授予用户对预定义AWS角色的访问权。这些角色通常是通用的,但是可能存在现有角色没有完全捕获的用例。Access Service可以允许用户创建一个动态作用.在提出请求时,用户将复选述与他们想要的权限对应的框(例如,“S3读取”,“CloudWatch完全访问”等)以创建自定义动态角色。


特别感谢David Scrobonia创建访问服务并为此博客设置基础。感谢John Boggs,Rob McQueen,Anastassia Bobokalonova,Leif Dreizler,Eric Ellett,Pablo Vidal,Arta Razavi和Laura Rubin,所有这些都建成,设计,灵感或沿途提供访问服务。


参考文献

在OKTA中配置GCP角色

将GCP角色连接到OKTA比AWS更难,之后努力想弄明白有一段时间,我们认为这将是值得分享的。要将GCP角色连接到我们的OKTA实例,我们必须在Goobite中使用Google Groups。

首先,我们创建了一个单独的GSuite Group对于我们的每个项目-角色对。在质量,谷歌小组是一个成员(校长)可以分配一个角色,添加到该组的所有用户也会分配该角色。

然后,我们将每个GCP角色分配给相应的谷歌组。接下来,我们需要将谷歌组连接到Okta。

您可以通过使用Okta推动组织,它将Okta“group”链接到谷歌group。将用户添加到Okta Push Group会自动将正确的GSuite用户添加到谷歌组。我们为每个角色创建了一个Okta Group,并将其配置为对应谷歌Group的Push Group。

为了总结,流程看起来像这样:

  1. 添加okta user david@www.asianminres.com到okta组“暂存读 - gcp角色”

  2. Okta Push Groups将GSuite用户david@www.asianminres.com添加到“Staging Read”谷歌组中

  3. 因为他是“登台”Google Group的成员,因为David@www.asianminres.com被分配了“读取”项目的角色。

BeyondCorp对内部应用的方法

我们所有的内部应用程序都使用OpenID Connect(OIDC)启用的应用程序负载均衡器(ALB)连接到OKTA。这提供了A.BeyondCorp我们内部应用的访问方式:所有都是公开路由,但都落后于Okta。

这也是一个很好的工具开发人员的角度,因为不仅是验证的身份验证,但我们可以使用符号的JSON Web令牌(JWT)OKTA通过ALB返回服务器以获取用户与Access交互的身份服务。这允许我们使用OKTA作为粗略授权层,并管理用户可以访问不同的内部应用程序。

......

斯蒂芬妮埃文斯,凯文尼普罗,艾斯特惠森格哈德2021年5月31日

EMS + PMS如何共同合作的指导框架。......

索尼娅Sidhpura,塔莎·阿尔法纳,Pooya Jaferian,Ivayr Dieb Farah Netto2021年5月25日

Analytics.js 2.0现在通常可用。Analytics.js 2.0是Analytics.js的完全向后兼容和重量较轻的实现。简单地放置,Analytics.js你知道和爱甚至可以使用更可扩展的架构更快。......

玛吉余2021年5月14日

在Segment,我们严重依赖定制的内部工具来运行特别的任务和调试基础设施中的问题。它们不仅由做产品开发的工程师运行,也由我们的支持团队运行,他们利用它们有效地调查和解决客户报告的问题。

这种内部工具对于维护分段数据湖泊产品,如我们所描述的产品以前的博客文章,将数据加载到客户的S3桶和胶水目录中,通过EMR作业。

由于后一种基础设施都在客户的AWS帐户中,而不是网段拥有的帐户,因此该产品中的配置、操作和调试问题要比完全运行在网段基础设施中的东西要棘手一些。

客户在尝试设置段数据湖时,客户的最常见问题之一是其IAM策略中的manbetx客户端应用下载权限缺少。因此,我们的工具之一测试如果允许段的角色访问目标S3存储桶,胶水目录和EMR集群。另一个常见的工具任务是提交EMR作业R.eplay将数据存档到段数据湖泊中,因此客户可以从历史数据引导后者引导。manbetx客户端应用下载

由于运行这些内部工具的人可以访问客户的资源,因此安全性极为重要。因此,适用于敏感生产系统的所有安全性最佳实践也需要申请我们的数据湖泊工具。在其他示例中,对工具的访问应该限于一小组人员,并且需要跟踪使用工具执行的所有操作。

我们评估了创建和确保这些工具的多种方法,但最终终止使用AWS的API Gateway产品.在此博客文章中,我们将解释我们如何使用数据湖泊后端集成后者,以及我们如何使用IAM授权和API Gateway资源策略来加强访问控制。我们还将提供一些在Terraform中设置相关基础架构的示例。

设计演变

数据湖泊工具有两个组件 - CLI客户端和RPC服务。每个CLI命令都会向RPC服务发出请求,然后可以访问相关的客户资源。

当Segment Data Lakes启动时,只有Data Lakes的工程师可以访问和使用CLI工具。这在最初发行时是可行的,但为了扩大产品规模,我们意识到需要让更多用户进入Segment。因此,我们开始设计一些改进,以允许我们以一种安全、可控的方式打开这个通道。

我们最初的设计依赖于SAML来验证用户,这是Segment的其他几个内部工具解决这个问题的方式。Segment使用okota -AWS SAML集成来管理和分配AWS IAM角色的访问,然后使用AWS-OKTA使用AWS和运行工具命令使用生成的凭据进行身份验证。

SAML方法将允许我们验证工具的操作人员是经过验证和授权的Segment员工。但是,这将增加很多复杂性,因为我们需要为CLI客户机和相关的SAML认证流创建和维护代码。

就在我们即将实现SAML解决方案时,AWS为其AWS API Gateway产品发布了几个新特性,包括对基于iam角色的API身份验证的改进支持。由于Segment已经使用IAM角色来委派对Segment员工的访问,因此使用基于IAM的策略来控制对数据湖api的访问似乎是合适的。

有了这个解决方案,我们可以将身份验证和授权的责任转移到外部服务,并将更多的时间花在工具的数据湖方面。

在对POC进行验证后,我们正式决定使用IAM授权的AWS API网关,而不是在我们的代码中支持SAML流。

在进入我们如何将AWS API Gateway集成到我们的设计中的详细信息之前,让我们回顾这个产品的工作方式和所提供的各种功能。

什么是AWS API网关?

AWS API网关位于API客户端和备份这些API的服务之间。它支持与各种后端类型的集成,包括在ECS或EKS中运行的AWS Lambda和Containized Services。该产品还提供了许多功能,以帮助维护和部署API,例如管理和路由流量,监视API调用和从安全性的访问权限。

API网关支持两种API: HTTP API和REST API。许多功能都可以用于这两种类型,但有些功能只针对其中一种。在决定哪种类型的API网关最适合您的用例之前,了解两者之间的差异是很重要的。看看本指南在AWS文档库中找到一个很好的总结。

API网关的重要概念

这里有一些API网关的概念,将在这篇博文中提到,你可能会遇到,当你建立自己的AWS API网关。

资源策略

IAM policy是与IAM用户、组或角色相关联的API网关资源策略附加到资源。您可以使用IAM策略和/或资源策略来定义谁可以访问资源以及可以执行哪些操作。

代理整合

代理集成允许在没有中间体变换的情况下将请求代理到备份服务。如果使用代理集成,则只能修改每个请求上的标题,路径参数和查询字符串参数。如果未使用代理集成,则也可以定义映射模板以转换请求主体。

代理资源

代理资源允许通过贪婪路径参数{proxy+}绑定访问多个资源。使用代理资源,您不需要为每个路径定义单独的资源。如果所有资源都由相同的支持服务支持,这就特别有用。有关详细信息,请参阅此AWS医生

阶段

API网关中的Stage是对部署的命名引用。你可以为每个API创建和管理多个阶段,例如alpha, beta和production。每个阶段都可以与不同的后端服务集成。

为什么我们选择了REST API而不是HTTP API

在我们的情况下,我们真的想使用资源策略来定义访问控制,此功能仅在REST API中可用。HTTP API比REST API便宜,但由于我们预期从我们的工具中的低申请量,但每月总费用不会是一个问题。因此,我们决定使用REST API。

如果需要将REST API与ALB集成,或者希望使用API Gateway来处理API访问控制,则可能会遇到一些挑战。在下面的部分中,我们将分享如何解决这些问题。

设置REST API网关

ALB集成

我们的后端工具服务位于私有VPC中,位于ALB后面。HTTP api支持与ALB直接集成,但REST api不支持(参见HTTP API和REST API之间的比较).要将REST API与ALB集成,您需要在两者之间放置一个NLB。

这里的设置包括两个步骤:

  1. NLB→ALB集成

  2. REST API网关→NLB集成

NLB→ALB集成

第一步是创建一个可以将流量转发到ALB的NLB:

AWS的博客介绍如何使用lambda函数设置此集成,并且它包括您可以使用的Lambda函数代码和用于设置的CloudFormation模板。

REST API网关→NLB集成

下一步是将REST API链接到NLB,如下所示:

这可以通过先创建一个VPC链接到NLB,然后在Gateway API方法集成中使用这个VPC链接来实现。这指南从AWS提供了将API与VPC链接集成到NLB的说明。

我们使用既使用a设置API代理集成和一个代理资源.如果引入了一个新的API或我们的API模式发展了,我们不需要更新API网关。

Terraform例子

我们使用Terraform来组织和管理段的AWS基础架构。以下是将REST API与NLB集成的示例,并创建与代理资源的代理集成:

授权和访问控制

为确保仅授权用户可以访问我们的工具服务,我们使用IAM授权和API网关资源策略的组合。在以下部分中,我们详细介绍了这些是什么以及我们如何为我们的工具配置它们。

IAM授权

“API网关”支持对API开启IAM鉴权。启用此功能后,发送的API请求需要使用AWS安全凭据(AWS医生).如果请求没有签名(即匿名身份),那么请求将失败。否则,API Gateway将根据IAM策略和/或资源策略允许或拒绝API请求。这AWS指南解释API网关如何根据IAM策略和资源策略的组合来确定是否允许或拒绝。

资源政策

IAM策略和/或资源策略可以用来指定谁可以访问资源以及可以执行什么操作,但我们在我们的用例中只使用后者。

在Segment,我们在同一个AWS帐户中有多个角色,例如带有ReadOnlyAccess策略的读角色,带有AdministratorAccess策略的管理员角色,等等。有些策略授予execute-api权限,这是在API Gateway中调用API所必需的,有些则不需要。例如,AWS托管策略AdministratorAccess允许对所有资源使用execute-api。

如果希望将execute-api权限限制到特定的角色api-invoke-role,则需要将拒绝execute-api权限的IAM策略附加到所有拥有此权限的其他角色上,或者明确拒绝资源策略中的这些角色。

对于前一种方法,您将创建拒绝对API网关调用Execute-API的策略,然后将此策略附加到不应允许调用API的角色。这是一个示例政策:

对于后一种方法,您将列出不允许调用资源策略中的api的所有角色。示例如下:

如果帐户中有许多角色,并且随着时间的推移会创建新的角色,那么创建这些策略并保持它们都是最新的,可能会非常繁琐。如果同一个帐户中有多个api,并且每个api都有一组独立的IAM角色,那么情况就更糟了。

作为替代方法,您可以创建一个资源策略,显式地允许访问角色的子集,同时默认地阻止对其他所有角色的访问。

这是我们决定采用的方法:

Terraform例子

以下是在Terraform中实现上述方法的一个例子:

访问日志记录

另一个重要的安全需求是对发送到API网关的请求进行审计跟踪。每个记录都应该包含调用者标识和所发出请求的详细信息。

API Gateway具有与CloudWatch的内置集成,可以轻松地在后者中生成这些访问日志。您可以选择日志格式(CLF,JSON,XML或CSV),并指定应记录哪些信息。

除了使用CloudWatch,我们还创建了一个部分S.唯一用于审计日志。我们的后端服务问题跟踪调用对于每个请求,所有轨道事件都会同步到我们的仓库.有了这个,我们不需要实现一个连接器,可以将数据从CloudWatch导出并将其加载到我们的仓库中。

Terraform例子

下面显示了如何为API网关配置CloudWatch审核日志。请注意,您需要创建具有在CloudWatch Side上具有相应读写权限的IAM角色:

签署请求

通过启用IAM授权,所有API请求都需要使用AWS Access键签名,因此AWS可以识别呼叫者。有多个版本的签名过程,V4是最新(和推荐)一个。各种AWS SDK提供了处理此过程的低级细节的辅助功能。

以下是使用AWS SDK for go的示例:

在我们的用例中,CLI客户端自动包装输入,使用用户的AWS凭据对请求进行签名,并将请求发送到我们的API网关,使用户使用起来非常容易。

例如,我们公开了以下命令来检查EMR集群的状态。CLI Client将命令和标志映射到API中的请求路径和主体:

部署

在使用API Gateway REST API时要记住的一件事是,它不支持自动部署(HTTP API支持)。因此,如果对API资源或阶段进行了更改,则需要手动触发部署。

Terraform例子

这个例子演示了如何使用Terraform 0.11触发部署。触发器散列可以是包含与API网关关联的资源的Terraform文件的散列。如果这些文件中有任何更改,散列将更改,从而触发部署。

请注意,Terraform 0.12支持显式触发器参数,该参数允许您在后者内部提供触发器散列,而不是通过部署变量进行此操作。

结论

我们已经使用这个基于api - gateway的设置好几个月了,它在Data Lakes工具用例中工作得非常好。在此设置可用之前,工具操作仅由我们的工程团队执行,以解决客户的问题。manbetx客户端应用下载在部署解决方案之后,我们向支持团队开放了工具服务,减少了对工程团队的依赖和运营成本。

这是我们第一次使用API Gateway产品,所以我们不得不花一些时间来想出各种解决方案和变通方法(例如与ALB集成,使用Terraform触发部署等),但总体来说,一旦我们解决了这些问题,我们有一个愉快的体验。

我们没有为我们的工具使用的API网关有许多其他功能,因此在本博客文章中没有讨论,但仍然对您的用例有帮助。例如,API网关允许您设置限制限制并设置缓存。这些功能有助于防止您的系统被大量请求所淹没。您还可以使用API​​网关通过配置API来使用不同的后端集成来管理和运行多个版本的API。

......

卡特里娜王5月13日2021年

个性化的广告系列和服务要求客户​​数据加工具利用该信息。万博官方购彩Sara Varni,Twilio CMO,解释了企业如何做到这一点。......

凯文加西亚5月11日2021年

通过个性化店内拾取体验增加忠诚和收入。......

Dustin Bailey.5月5日2021年

以下是您如何只使用少数问题合理地确定第三方的风险,并选择文件...无需冗长的问卷或需要耗时的审计。......

蒂姆法国2021年4月29日

告别长长的客户支持等待时间和延长分部角色和Twilio Flex。......

Geoffrey Keating.2021年6月1日

我们的年度看看过去一年的态度,偏好和经验如何发展。......

安迪李2021年6月1日

访问始终更改。当您在一家新公司开始时,您通常会根据您的团队和角新万博app2.0下载色在第一天提供给您的一组应用程序的访问权限。即使在第一节,您授予的访问与您需要进行的访问之间可能存在差异。这导致两种结果:欠下的或过度提供的访问。

对于管理云基础设施账户的IT和安全团队来说,确保对这些账户的访问是困难和可怕的;系统很复杂,风险也很高。如果您授予过多的访问权限,您可能会允许不良行为者访问您的工具和基础设施,这最多会导致违反通知;在最坏的情况下,它会导致公司倒闭,游戏结束。新万博app2.0下载如果你给予的权限太少,你就在同事和他们需要做的工作之间设置了障碍,这意味着你正在降低公司的生产力。新万博app2.0下载

获得访问权限

初创公司和小公司通常采取的方法是允许访问。在这些公司中,早期生产力对于业务的成功至关重要。一个员工因为缺少访问权限而被锁定在系统之外,意味着生产力的损失和业务收入的损失。

如果给员工对每个系统的永久管理权限,就可以优化速度,但代价是员工账户被泄露和内部威胁带来的风险增加。这导致了增加攻击表面.随着公司的发展,新万博app2.0下载确保关键资源的访问变得更加重要,而这需要一种不同的方法。

欠下的访问权限

如果你给员工的权限太少,就会迫使他们更频繁地请求权限。尽管新员工最初会根据他们的团队和角色获得访问权限,但新职责和新项目可以迅速增加他们需要的访问范围。根据您公司提供访问的流程,这对于请求新万博app2.0下载者、批准者或通常两者都是很麻烦的。

在Segment,我们在亚马逊Web服务(AWS)和Google云平台(GCP)中拥有生产环境。我们需要自理地保护这些账户,以便我们的工程师可以继续建立快速和安全.在许多公司,您可能依赖于一个集中的团队来管理内部访问。虽然这是一种简单的方法,但它不能伸缩——团队成员对请求的上下文数量有限,可能会意外地过度提供请求者的访问。在Segment,我们通过构建access Service来解决管理最低权限云访问的问题:access Service是一种支持基于时间的同行评审访问的工具。

设置舞台:在段的访问

在Segment,我们在数十个SaaS应用程序和代表不同访问级别的云提供商中有数百个角色。在过去,我们必须分别登录每个应用程序或系统才能授予用户访问权限。我们的IT团队设法“联合”我们的云访问,并使用Okta作为我们的身份提供商。这为我们提供了一个单独的位置来管理哪些用户可以访问哪些角色和应用程序。这篇博文的其余部分建立在这个联邦访问系统之上。

如果您的组织还没有构建类似的东西,那么以下资源可以帮助您构建和设置自己的联邦云访问系统。

博客:

文档:

将Okta应用映射到AWS角色

通过将Okta应用程序配置为云提供商角色,工程师只需点击一下,就可以通过具有适当权限的单点登录(SSO)验证云提供商。

每个Okta应用程序都映射到一个“云账户的作用”(或“项目角色“对于GCP)。例如,在AWS,我们有一个宿舍账户与提供对特定资源的读访问的角色。在Okta,我们有一个相应的应用程序名为“分期读- AWS角色”,允许工程师验证到AWS分期帐户,并承担读角色。

这需要配置OKTA应用程序每个“云帐户角色”组合,在撰写本文时是150多个OKTA应用程序。

使用OKTA配置GCP略有不同,以及如何执行此操作的技术详细信息在这个博客的底部

将Okta组映射到SaaS应用程序组

除了身份验证之外,身份提供者还可以帮助进行授权。当用户访问一个应用程序,但没有正确的权限来完成他们的工作时,他们会感到沮丧,这是可以理解的。

身份提供者已达成一组通用的REST API,用于管理调用的配置,取消和组映射SCIM(跨域标识管理系统)。

如果应用程序支持SCIM,则可以在身份提供程序(例如OKTA)中创建组,该组将将用户成员身份映射到应用程序中。使用此设置,将用户添加到OKTA组将自动将其添加到应用程序中的相应组。同样,当用户从OKTA中的应用程序未分配时,应用程序组的成员资格也将丢失。

SCIM允许我们提供粒度,应用级别访问,同时使用我们的身份提供商作为真理来源。

通过一个可以管理所有云提供商的访问,问题应该解决,对吧?不完全的…

虽然底层okta应用程序和群体系统工作得很好,但我们很快就遇到了更多的人类问题。

集中访问管理的缺陷

即使有了我们令人敬畏的新的Okta+AWS系统,我们仍然需要一个流程,让一个集中的团队通过Okta提供访问。在许多公司,这个团队是IT。在Segment,这是一个叫Boggs的人。请求将进入他的收件箱,他将手动检查请求原因,并决定是否有更适合该任务的访问级别。最后,他会去Okta管理面板,并为用户提供适当的应用程序。虽然这个系统工作了一段时间,但它是不可扩展的,并且存在重大缺陷。

永久访问

一旦将应用程序配置到用户,他们就可以访问,直到它们左侧段。尽管永久访问,他们可能不会需要永久的访问。不幸的是,我们的手动配置过程没有类似的可伸缩方式来确保在不再需要访问时删除访问。被授予一次性任务访问权限的人现在拥有了永久访问权限,这些权限在他们实际需要之后很长一段时间仍然存在。

由于上下文有限而难度缩放

作为一名工程经理,Boggs对可用IAM角色及其访问级别有很强的认识。这允许他通过确定使用不太敏感的角色的机会来减少不必要的访问。这种环境很难复制,这也是为什么我们不能简单地将这种责任扩展到更大的IT团队的一个重要原因。

最集中的IT团队无法与他们提供的所有应用程序密切合作,这使得它们难以评估请求。强制执行最小权限的原则可能需要在特定应用程序中彻底了解访问边界。如果没有这种知识,您将在难以确定请求者是否真正需要“管理员”,或者如果它们仍然可以使用“写入”权限,或者甚至只需“读取”访问。

来自数据工程团队的凯尔请求进入雷达管理角色进行“调试”。他们究竟需要访问什么?只读角色有用吗?等等,谁是凯尔?!他们是上周开始的吗?他们说他们需要这个权限来做他们的工作我仍然需要做我的......批准。

这很慢

尽管比大多数人来处理访问请求更好,但Boggs是一个繁忙的工程经理。虽然首先提供访问权限是一个不常的任务,但由于公司的增长,它开始占用宝贵的块,并且越来越难以理解每个请求的背景。新万博app2.0下载

我们考虑涉及来自IT团队的额外团队成员,但这仍然需要时间,因为他们需要联系每个系统的所有者来确认应授予访问权限。最终,通过有限的集中验证池,通过共享队列的请求,使响应时间不如理想。

打破Boggs

Boggs尝试使用基于角色和团队的复杂脚本规则来自动解决部分问题,但仍然存在破坏系统的情况。他将如何处理团队重命名、转换、合并或拆分的重组?当用户切换团队时会发生什么?当团队有短期访问工具的合法业务需求时,会发生什么?使用当前的系统,Boggs提供的任何访问都将永远持续下去——除非有人去手动审计Okta应用程序的未使用访问。

最终,我们发现自己在一个情况下,我们有很多过度配置的用户,可以访问敏感角色和权限。为了确保我们理解问题实际上有多糟糕,我们测量了我们特权角色的访问利用率。我们研究每个员工可以访问多少个特权角色,并将其与过去30天实际使用的特权角色进行了比较。

结果令人惊讶:未使用60%的访问权限。

管理长寿访问根本没有规模。我们需要找到一种方法将集中式访问管理系统转换为分布式的方法。

访问服务

在真实的访问世界中,我们不应该把用户的访问占用看作是静态的,而应该把它看作是无定形的和不断变化的。

当我们采用这一观点时,它让我们能够构建Access Service,这是一个内部应用程序,允许用户获得他们真正需要的访问,并避免提供太少或太多访问的失败模式。

Access Service允许工程师在一段时间内请求对单个角色的访问,并让他们的同行批准该请求。批准者来自一个预定义的列表,这使得访问请求过程类似于GitHub向指定的审批人提交请求

请求一经批准,Access Service就为用户提供适合角色的Okta应用程序或组。每日cron作业检查请求是否过期,如果过期则取消对用户的配置。

从高层次上看,这是一个简单的web应用程序,但让我们仔细看看它们的一些特定功能和解锁内容。

临时访问

访问服务的神奇之处在于从长期访问到临时访问的转变。通常,工程师只需要临时访问来完成一个定义的任务。

一旦完成该任务,他们就可以访问他们不再需要,这违反了最不特权的原则。使用旧过程修复此过程将意味着手动取消OKTA应用程序 - 添加尚未添加其他任务到一个已经很痛苦的手工工作流。

通过访问服务,用户可以指定访问请求的持续时间。如果审批者认为任务的持续时间太长,他们可以拒绝批准请求。这个持续时间也用于自动取消他们的访问权限一旦请求到期。

Access Service提供了两种类型的持续时间:“基于时间的访问”和“基于活动的访问”。

基于时间的访问具体的时间段,如一天、一周、两周、四周。这是理想的不寻常的任务,如:

  • 修复需要您通常不需要角色的错误

  • 执行数据迁移

  • 帮助客户对生产实manbetx客户端应用下载例进行故障排除,您通常不会访问

基于活动的访问是一个动态的每次使用授予您的应用程序或角色时延长访问过期时间的持续时间。这对于日常工作功能所需的访问非常理想——没有人希望每个月都发出少量新的访问请求。然而,我们不为我们的敏感角色提供这种类型的访问。广泛访问角色或有权访问敏感数据的角色需要定期批准以维护访问权限。基于活动的访问提供了摩擦和访问之间更实际的平衡,与我们的目标一致,使我们的工程师能够快速和安全地构建

指定的批准者

我们之前的流程最大的限制之一是必须由一个人批准所有的事情。在Access Service中,每个应用程序都有一份与系统密切合作的审批人员名单。通过将决策权委托给专家,我们确保了获得决策权的人知道谁应该拥有决策权。

要启动,您无法批准您自己的访问请求。(抱歉红色团队。)每个应用程序都有一个“系统所有者”,该批责维护其批准者列表。当用户创建访问请求时,它们选择一个或多个允许批准以查看他们的请求。由于批准者列表仅包含与系统密切合作的人,因此批准者具有更好的背景和对系统的理解而不是中央团队。

这使得批准者更容易拒绝不合理或过于允许的访问请求,并鼓励用户请求下层的访问(例如,告诉它们请求只读角色而不是读/写角色)。由于批准者之间的传入请求是“负载平衡”,因此用户还会看到其请求的响应时间更快。

供应访问始终需要两个人,就像GitHub拉出请求一样。用户无法选择自己作为批准者,即使它们是系统所有者。访问服务还支持具有不同批准要求的“紧急访问”机制。这可以防止访问服务阻止随叫随到或站点可靠性工程师,如果他们需要在夜间中间访问。

随着每个应用的系统所有者的任命,随着我们引入具有新的访问角色和级别的新工具,我们的分布式审批者池继续扩大。这就是安全界所称的“左”推

当您“推左”时,您将在开发生命周期中提前介绍安全注意事项,而不是尝试在使用中进行改造。在软件工程空间中,“推左”导致工程师学习更多关于安全性。这意味着最熟悉该系统的人是实现安全修复的最知识渊博的人。由于工程师是设计和现在维护软件的人,因此它们比中央安全团队更有更多的背景。同样,访问服务裁员中央团队,并赋予系统所有者对谁应该可以访问其系统的决定,以及在什么级别。这显着减少了IT团队花费供应访问的时间,并将其释放为更有意义的工作。

它是如何工作的

访问服务,如我们的许多内部应用程序可以访问开放的互联网,但保护OKTA后面。

访问服务的基本单元是“请求”。想要访问的用户创建一个包含四条信息的请求:

  • 他们想要访问的应用程序

  • 他们想要访问的持续时间

  • 说明为什么他们需要访问

  • 他们想要审核请求的批准者

当他们点击“请求访问”时,Access Services会向被选中的审批者发送一个Slack通知。和许多现代公司一样,Segment也有很高程度的Slack存在。使用这个平台使Access Service成为人们工作流程中更自然、更少干扰的一部分。即使请求访问的用户是特定应用程序的审批者,他们也必须从不同的审批者那里获得批准——每个请求必须涉及两个人。

访问请求在Web应用程序中跟踪,因此您可以看到您打开的请求以及您目前可以访问的角色。

当他们的请求被批准时,请求者会通过Slack得到通知,这样他们就知道他们现在可以回到他们最初需要访问的任务。

结果

在我们将访问过程迁移到访问服务后,结果是零长寿的访问我们在AWS和GCP中的任何特权云角色。授予这些角色的所有访问如果没有被积极使用就会过期。

在下面的图表中,“接入点”指的是访问每个管理角色的用户数量。在使用Access Service之后,我们将拥有特权访问的人数减少了90%。

在下图中,“活动”是指在过去30天内使用应用程序的人数。因为这个数字是更高比接入点的数量,这表明在过去30天中使用的更多访问量比当前已提供

这似乎很奇怪 - 管理应用程序如何用过的被超过总人数的人供应访问?这是因为过期的访问已经被自动剥夺,在30天窗口结束时减少了接入点的数量!

结论

通过确认访问需求不断变化,我们能够创建更实用的方法来管理访问控制。

访问服务允许我们简化访问批准过程。通过直接向指定批准者路由请求,我们能够从具有丰富上下文的人获得快速批准。访问请求的基于时间的组件允许服务定期删除不需要的访问,防止我们的访问攻击表面变得太大。最后,将Slack集成到系统中使批准更快,确保您在您的请求已获得批准时立即知道,并在请求到期时提醒您,因此您不会在尝试完成工作时遇到意外的访问丢失。

虽然尝试重塑现有的既良好的过程可能是令人生畏的,但结果可能会令人难以置信的奖励。首先写下你的目标,思考你不喜欢的东西,以及对当前国家的痛苦是什么,重新评估你的核心假设。公司始终改变,您的流程必须保持;导致以前系统的情况可能不再适用于今天。最重要的是,请记住使用用户的工作流程,因为安全取决于整个公司的参与。新万博app2.0下载

未来发展

政策

Access Service中的应用程序目前是可单独定制的。然而,如果我们想要跨多个相似的应用进行更改,这可能会导致可伸缩性问题。例如,如果我们决定将对多个AWS帐户的访问限制在不超过一周的范围内,那么目前我们必须为每个单独的角色编辑允许的持续时间。通过介绍政策,我们将能够将几个角色映射到一个策略,使我们能够轻松地应用前面示例中的更改。

动态的角色

目前,Access Service授予用户对预定义AWS角色的访问权。这些角色通常是通用的,但是可能存在现有角色没有完全捕获的用例。Access Service可以允许用户创建一个动态作用.在提出请求时,用户将复选述与他们想要的权限对应的框(例如,“S3读取”,“CloudWatch完全访问”等)以创建自定义动态角色。


特别感谢David Scrobonia创建访问服务并为此博客设置基础。感谢John Boggs,Rob McQueen,Anastassia Bobokalonova,Leif Dreizler,Eric Ellett,Pablo Vidal,Arta Razavi和Laura Rubin,所有这些都建成,设计,灵感或沿途提供访问服务。


参考文献

在OKTA中配置GCP角色

将GCP角色连接到OKTA比AWS更难,之后努力想弄明白有一段时间,我们认为这将是值得分享的。要将GCP角色连接到我们的OKTA实例,我们必须在Goobite中使用Google Groups。

首先,我们创建了一个单独的GSuite Group对于我们的每个项目-角色对。在质量,谷歌小组是一个成员(校长)可以分配一个角色,添加到该组的所有用户也会分配该角色。

然后,我们将每个GCP角色分配给相应的谷歌组。接下来,我们需要将谷歌组连接到Okta。

您可以通过使用Okta推动组织,它将Okta“group”链接到谷歌group。将用户添加到Okta Push Group会自动将正确的GSuite用户添加到谷歌组。我们为每个角色创建了一个Okta Group,并将其配置为对应谷歌Group的Push Group。

为了总结,流程看起来像这样:

  1. 添加okta user david@www.asianminres.com到okta组“暂存读 - gcp角色”

  2. Okta Push Groups将GSuite用户david@www.asianminres.com添加到“Staging Read”谷歌组中

  3. 因为他是“登台”Google Group的成员,因为David@www.asianminres.com被分配了“读取”项目的角色。

BeyondCorp对内部应用的方法

我们所有的内部应用程序都使用OpenID Connect(OIDC)启用的应用程序负载均衡器(ALB)连接到OKTA。这提供了A.BeyondCorp我们内部应用的访问方式:所有都是公开路由,但都落后于Okta。

这也是一个很好的工具开发人员的角度,因为不仅是验证的身份验证,但我们可以使用符号的JSON Web令牌(JWT)OKTA通过ALB返回服务器以获取用户与Access交互的身份服务。这允许我们使用OKTA作为粗略授权层,并管理用户可以访问不同的内部应用程序。

......

斯蒂芬妮埃文斯,凯文尼普罗,艾斯特惠森格哈德2021年5月31日

EMS + PMS如何共同合作的指导框架。......

索尼娅Sidhpura,塔莎·阿尔法纳,Pooya Jaferian,Ivayr Dieb Farah Netto2021年5月25日

Analytics.js 2.0现在通常可用。Analytics.js 2.0是Analytics.js的完全向后兼容和重量较轻的实现。简单地放置,Analytics.js你知道和爱甚至可以使用更可扩展的架构更快。......

玛吉余2021年5月14日

在Segment,我们严重依赖定制的内部工具来运行特别的任务和调试基础设施中的问题。它们不仅由做产品开发的工程师运行,也由我们的支持团队运行,他们利用它们有效地调查和解决客户报告的问题。

这种内部工具对于维护分段数据湖泊产品,如我们所描述的产品以前的博客文章,将数据加载到客户的S3桶和胶水目录中,通过EMR作业。

由于后一种基础设施都在客户的AWS帐户中,而不是网段拥有的帐户,因此该产品中的配置、操作和调试问题要比完全运行在网段基础设施中的东西要棘手一些。

客户在尝试设置段数据湖时,客户的最常见问题之一是其IAM策略中的manbetx客户端应用下载权限缺少。因此,我们的工具之一测试如果允许段的角色访问目标S3存储桶,胶水目录和EMR集群。另一个常见的工具任务是提交EMR作业R.eplay将数据存档到段数据湖泊中,因此客户可以从历史数据引导后者引导。manbetx客户端应用下载

由于运行这些内部工具的人可以访问客户的资源,因此安全性极为重要。因此,适用于敏感生产系统的所有安全性最佳实践也需要申请我们的数据湖泊工具。在其他示例中,对工具的访问应该限于一小组人员,并且需要跟踪使用工具执行的所有操作。

我们评估了创建和确保这些工具的多种方法,但最终终止使用AWS的API Gateway产品.在此博客文章中,我们将解释我们如何使用数据湖泊后端集成后者,以及我们如何使用IAM授权和API Gateway资源策略来加强访问控制。我们还将提供一些在Terraform中设置相关基础架构的示例。

设计演变

数据湖泊工具有两个组件 - CLI客户端和RPC服务。每个CLI命令都会向RPC服务发出请求,然后可以访问相关的客户资源。

当Segment Data Lakes启动时,只有Data Lakes的工程师可以访问和使用CLI工具。这在最初发行时是可行的,但为了扩大产品规模,我们意识到需要让更多用户进入Segment。因此,我们开始设计一些改进,以允许我们以一种安全、可控的方式打开这个通道。

我们最初的设计依赖于SAML来验证用户,这是Segment的其他几个内部工具解决这个问题的方式。Segment使用okota -AWS SAML集成来管理和分配AWS IAM角色的访问,然后使用AWS-OKTA使用AWS和运行工具命令使用生成的凭据进行身份验证。

SAML方法将允许我们验证工具的操作人员是经过验证和授权的Segment员工。但是,这将增加很多复杂性,因为我们需要为CLI客户机和相关的SAML认证流创建和维护代码。

就在我们即将实现SAML解决方案时,AWS为其AWS API Gateway产品发布了几个新特性,包括对基于iam角色的API身份验证的改进支持。由于Segment已经使用IAM角色来委派对Segment员工的访问,因此使用基于IAM的策略来控制对数据湖api的访问似乎是合适的。

有了这个解决方案,我们可以将身份验证和授权的责任转移到外部服务,并将更多的时间花在工具的数据湖方面。

在对POC进行验证后,我们正式决定使用IAM授权的AWS API网关,而不是在我们的代码中支持SAML流。

在进入我们如何将AWS API Gateway集成到我们的设计中的详细信息之前,让我们回顾这个产品的工作方式和所提供的各种功能。

什么是AWS API网关?

AWS API网关位于API客户端和备份这些API的服务之间。它支持与各种后端类型的集成,包括在ECS或EKS中运行的AWS Lambda和Containized Services。该产品还提供了许多功能,以帮助维护和部署API,例如管理和路由流量,监视API调用和从安全性的访问权限。

API网关支持两种API: HTTP API和REST API。许多功能都可以用于这两种类型,但有些功能只针对其中一种。在决定哪种类型的API网关最适合您的用例之前,了解两者之间的差异是很重要的。看看本指南在AWS文档库中找到一个很好的总结。

API网关的重要概念

这里有一些API网关的概念,将在这篇博文中提到,你可能会遇到,当你建立自己的AWS API网关。

资源策略

IAM policy是与IAM用户、组或角色相关联的API网关资源策略附加到资源。您可以使用IAM策略和/或资源策略来定义谁可以访问资源以及可以执行哪些操作。

代理整合

代理集成允许在没有中间体变换的情况下将请求代理到备份服务。如果使用代理集成,则只能修改每个请求上的标题,路径参数和查询字符串参数。如果未使用代理集成,则也可以定义映射模板以转换请求主体。

代理资源

代理资源允许通过贪婪路径参数{proxy+}绑定访问多个资源。使用代理资源,您不需要为每个路径定义单独的资源。如果所有资源都由相同的支持服务支持,这就特别有用。有关详细信息,请参阅此AWS医生

阶段

API网关中的Stage是对部署的命名引用。你可以为每个API创建和管理多个阶段,例如alpha, beta和production。每个阶段都可以与不同的后端服务集成。

为什么我们选择了REST API而不是HTTP API

在我们的情况下,我们真的想使用资源策略来定义访问控制,此功能仅在REST API中可用。HTTP API比REST API便宜,但由于我们预期从我们的工具中的低申请量,但每月总费用不会是一个问题。因此,我们决定使用REST API。

如果需要将REST API与ALB集成,或者希望使用API Gateway来处理API访问控制,则可能会遇到一些挑战。在下面的部分中,我们将分享如何解决这些问题。

设置REST API网关

ALB集成

我们的后端工具服务位于私有VPC中,位于ALB后面。HTTP api支持与ALB直接集成,但REST api不支持(参见HTTP API和REST API之间的比较).要将REST API与ALB集成,您需要在两者之间放置一个NLB。

这里的设置包括两个步骤:

  1. NLB→ALB集成

  2. REST API网关→NLB集成

NLB→ALB集成

第一步是创建一个可以将流量转发到ALB的NLB:

AWS的博客介绍如何使用lambda函数设置此集成,并且它包括您可以使用的Lambda函数代码和用于设置的CloudFormation模板。

REST API网关→NLB集成

下一步是将REST API链接到NLB,如下所示:

这可以通过先创建一个VPC链接到NLB,然后在Gateway API方法集成中使用这个VPC链接来实现。这指南从AWS提供了将API与VPC链接集成到NLB的说明。

我们使用既使用a设置API代理集成和一个代理资源.如果引入了一个新的API或我们的API模式发展了,我们不需要更新API网关。

Terraform例子

我们使用Terraform来组织和管理段的AWS基础架构。以下是将REST API与NLB集成的示例,并创建与代理资源的代理集成:

授权和访问控制

为确保仅授权用户可以访问我们的工具服务,我们使用IAM授权和API网关资源策略的组合。在以下部分中,我们详细介绍了这些是什么以及我们如何为我们的工具配置它们。

IAM授权

“API网关”支持对API开启IAM鉴权。启用此功能后,发送的API请求需要使用AWS安全凭据(AWS医生).如果请求没有签名(即匿名身份),那么请求将失败。否则,API Gateway将根据IAM策略和/或资源策略允许或拒绝API请求。这AWS指南解释API网关如何根据IAM策略和资源策略的组合来确定是否允许或拒绝。

资源政策

IAM策略和/或资源策略可以用来指定谁可以访问资源以及可以执行什么操作,但我们在我们的用例中只使用后者。

在Segment,我们在同一个AWS帐户中有多个角色,例如带有ReadOnlyAccess策略的读角色,带有AdministratorAccess策略的管理员角色,等等。有些策略授予execute-api权限,这是在API Gateway中调用API所必需的,有些则不需要。例如,AWS托管策略AdministratorAccess允许对所有资源使用execute-api。

如果希望将execute-api权限限制到特定的角色api-invoke-role,则需要将拒绝execute-api权限的IAM策略附加到所有拥有此权限的其他角色上,或者明确拒绝资源策略中的这些角色。

对于前一种方法,您将创建拒绝对API网关调用Execute-API的策略,然后将此策略附加到不应允许调用API的角色。这是一个示例政策:

对于后一种方法,您将列出不允许调用资源策略中的api的所有角色。示例如下:

如果帐户中有许多角色,并且随着时间的推移会创建新的角色,那么创建这些策略并保持它们都是最新的,可能会非常繁琐。如果同一个帐户中有多个api,并且每个api都有一组独立的IAM角色,那么情况就更糟了。

作为替代方法,您可以创建一个资源策略,显式地允许访问角色的子集,同时默认地阻止对其他所有角色的访问。

这是我们决定采用的方法:

Terraform例子

以下是在Terraform中实现上述方法的一个例子:

访问日志记录

另一个重要的安全需求是对发送到API网关的请求进行审计跟踪。每个记录都应该包含调用者标识和所发出请求的详细信息。

API Gateway具有与CloudWatch的内置集成,可以轻松地在后者中生成这些访问日志。您可以选择日志格式(CLF,JSON,XML或CSV),并指定应记录哪些信息。

除了使用CloudWatch,我们还创建了一个部分S.唯一用于审计日志。我们的后端服务问题跟踪调用对于每个请求,所有轨道事件都会同步到我们的仓库.有了这个,我们不需要实现一个连接器,可以将数据从CloudWatch导出并将其加载到我们的仓库中。

Terraform例子

下面显示了如何为API网关配置CloudWatch审核日志。请注意,您需要创建具有在CloudWatch Side上具有相应读写权限的IAM角色:

签署请求

通过启用IAM授权,所有API请求都需要使用AWS Access键签名,因此AWS可以识别呼叫者。有多个版本的签名过程,V4是最新(和推荐)一个。各种AWS SDK提供了处理此过程的低级细节的辅助功能。

以下是使用AWS SDK for go的示例:

在我们的用例中,CLI客户端自动包装输入,使用用户的AWS凭据对请求进行签名,并将请求发送到我们的API网关,使用户使用起来非常容易。

例如,我们公开了以下命令来检查EMR集群的状态。CLI Client将命令和标志映射到API中的请求路径和主体:

部署

在使用API Gateway REST API时要记住的一件事是,它不支持自动部署(HTTP API支持)。因此,如果对API资源或阶段进行了更改,则需要手动触发部署。

Terraform例子

这个例子演示了如何使用Terraform 0.11触发部署。触发器散列可以是包含与API网关关联的资源的Terraform文件的散列。如果这些文件中有任何更改,散列将更改,从而触发部署。

请注意,Terraform 0.12支持显式触发器参数,该参数允许您在后者内部提供触发器散列,而不是通过部署变量进行此操作。

结论

我们已经使用这个基于api - gateway的设置好几个月了,它在Data Lakes工具用例中工作得非常好。在此设置可用之前,工具操作仅由我们的工程团队执行,以解决客户的问题。manbetx客户端应用下载在部署解决方案之后,我们向支持团队开放了工具服务,减少了对工程团队的依赖和运营成本。

这是我们第一次使用API Gateway产品,所以我们不得不花一些时间来想出各种解决方案和变通方法(例如与ALB集成,使用Terraform触发部署等),但总体来说,一旦我们解决了这些问题,我们有一个愉快的体验。

我们没有为我们的工具使用的API网关有许多其他功能,因此在本博客文章中没有讨论,但仍然对您的用例有帮助。例如,API网关允许您设置限制限制并设置缓存。这些功能有助于防止您的系统被大量请求所淹没。您还可以使用API​​网关通过配置API来使用不同的后端集成来管理和运行多个版本的API。

......

卡特里娜王5月13日2021年

个性化的广告系列和服务要求客户​​数据加工具利用该信息。万博官方购彩Sara Varni,Twilio CMO,解释了企业如何做到这一点。......

凯文加西亚5月11日2021年

通过个性化店内拾取体验增加忠诚和收入。......

Dustin Bailey.5月5日2021年

以下是您如何只使用少数问题合理地确定第三方的风险,并选择文件...无需冗长的问卷或需要耗时的审计。......

蒂姆法国2021年4月29日

告别长长的客户支持等待时间和延长分部角色和Twilio Flex。......

蒂姆法国2021年4月29日

告别长长的客户支持等待时间和延长分部角色和Twilio Flex。......

莱夫德里兹勒2021年3月2日

与Dev团队合作建立客户面向客户的安全功能,帮助您更好地为客户提供服务,解锁额外的收入,并双向转移团队之间的知识 - 在DevSecops的非常核心之间的概念。manbetx客户端应用下载......

Udit梅塔2021年1月20日

了解我们如何使用AWS步骤功能进行大规模数据编排......

增长和市场营销

雪莉,Caitlyn Sullivan.3月31日2021年

是时候向下一个数字广告时代打招呼了,由一方数据提供支持。......

Sudheendra Chilappagari2021年2月18日

学习如何使用分段和Twilio可编程消息发送个性化短信活动。......

吉姆杨2021年2月17日

成功客户体验计划最重要的成分是什么?

根据数以百计的商界领袖在全球范围内,答案是良好的数据。

随着去年数字采用的爆炸,数据质量成为寻求适应的公司的首要任务。不幸的是,许多企业缺乏合适的技术来管理客户数据的数量增加和复杂性。万博官方购彩

同时,manbetxapp下载 发现有效管理客户数据是一项挑战,但获得了万博官方购彩丰厚的回报。因此,精明的商业领袖转向客户数据平台,确保整个组织的所有团队都可以万博官方购彩使用干净、可靠的数据。

因为客户数据平台可以万博官方购彩为业务中的多个不同团队提供支持,所以我们经常被问到:“投资CDP的确切ROI是什么?”

为了解决这个问题,我们最近进行了一项调查与阿伯丁领先的行业研究公司要精确调查,CDP可以在您的底线上进行许多益处。

就让我们一探究竟吧。

ROI基准证明您的客户数据平台投资证明万博官方购彩

说明客户数据平台累计投资回报率的最简单方法之一是测量业务的性能万博官方购彩使用CDP来对抗那些不使用CDP的。在几个KPI类别中,使用CDP的企业正在把它踢出公园。

尤其,9.1x年增长率更高在客户满意度和2.9倍同比增长更大回报丰厚投资以客户为本的企业。

然后应该向2022年毫不奇怪,靠近90%的企业将在其组织中实施CDP。

通过客户数万博官方购彩据平台到位,这些公司更好能够通过渠道连接和统一一方数据,确保数据准确,并个性化每个客户对每个个人偏好的互动。

资料来源:阿伯丁,2020年9月

重要的是要记住这些基准仅代表CDP对业务结果的平均影响。一些企业将实现更大的回报,减少。

这就是为什么您必须模拟已成功部署CDP的业务。为帮助您最大限度地提高CDP的投资回报率,请按照以下三个步骤操作。

如何最大化CDP投资的投资回报率

1)利用数据了解买家行为

无缝集成来自所有相关来源的数据的能力,对于希望全面理解客户行为的企业来说是至关重要的。

简单地说,CDP有助于在整个组织内实现数据的标准化。这使得你的面向客户的团队能够根据不同的标准(如以前的花费、忠诚度或人口统计数据)对客户进行细分,从而更好地提供相关的、个性化的体验。manbetx客户端应用下载

反过来,您可以发现影响客户行为的趋势和相关性,而这些在其他情况下是对非cdp用户隐藏的。

标准化数据还可以通过识别流失客户过程中的共同元素,帮助企业减少流失,并通过锁定高利润客户或拥有最佳产品的客户来提高收入。manbetx客户端应用下载

斯巴托这是一个很好的例子,公司使用Segment来标准化他们的客户数据,并推动转换万博官方购彩新万博app2.0下载解锁用户购买行为的见解。

资料来源:阿伯丁,2020年9月

所以你已经建立了一个客户数据的单一视图 - 现在是什么?万博官方购彩

2)使用数据到超个性化客户交互

下一步是超越跨企业系统的数据集成,并激活客户洞察,以提供高度个性化的体验。

该研究表明,使用CDP的公司更好地装备能够通过多个渠道向客户提供一致的消息(89%与82%)。manbetx客户端应用下载除了一致性之外,您还可以使用实时洞察来定制与每个买方的独特需求相互作用的内容和时间。

这种能力可以显着提高客户满意度,保留和LTV。换句话说,使用一致的数据到超个性化您的客户交互将导致对底线的直接影响。

对于那些希望最大化CDP投资回报率的公司来说,个性化是游戏的名称。

资料来源:阿伯丁,2020年9月

3)利用数据持续改善市场业绩

我们可以从阿伯丁的研究中得到的最后一个启示是,良好数据对员工绩效的影响。

一致、可靠的数据为企业领导人提供了一个评估员工活动和确定低效领域或培训需求的参考框架,从而推动更好的绩效。

尽管CDP可以赋予组织中的每个团队权力,但最具影响力的利益通常是由营销部门享有的。更具体地说,准确地规划客户旅程的每一步或锁定最有利可图的客户的能力可以极大地提高你的营销活动的投资回报率。manbetx客户端应用下载

部分个人例如,它是一个强大的工具集,用于策划客户旅程,允许营销人员使用Segment的客户数据平台:万博官方购彩

  • 构建定制的观众

  • 将这些受众同步到广告,电子邮件,A / B测试,聊天和实时工具

  • 在所有数字属性中获取客户的单一视图他们聘用的工具

资料来源:阿伯丁,2020年9月


去年客户数据的速度之快,让许多企万博官方购彩业争相加快它们的数字化转型路线图。在COVID - 19之前,个性化的客户体验是许多企业梦寐追求的项目。现在,它势在必行。

但是,事实的事实是近80%的企业公司在客户体验努力中使用数据的挑战斗争。数据质量不佳,碎片化的客户洞察力和过时的技术各自为非数字原生公司带来相当大的障碍。

幸运的是,客户数据平台的快速扩展帮助许多企业通过提高他们的利用和激活客户万博官方购彩数据的能力来克服这些挑战。

在这一点上,安本的研究是明确的——CDP投资正在获得回报。拥有CDP的公司在年收入增长、客户满意度和员工敬业度等kpi指标上都优于非用户。

然而,新技术的实施还不够。遵循最佳实践也很重要。

使用良好的数据来了解买方行为,提高营销表现,并提供超级个性化的客户互动是您今天可以采取的三个步骤,以确保您从CDP投资中获取最大ROI。

......

成为一名数据专家。订阅我们的时事通讯。

卡特里娜王3月31日2021年

通过分部,品牌可以利用他们的第一方客户数据来构建更深层次的客户关系。万博官方购彩......

清洁马丁,劳伦·里德3月31日2021年

段的数据居住解决方案可以帮助公司轻松地将事件与本地数据摄取和本地数据存储在全球公开测试中的当地数据摄取和本地数据存储路由到区域基础架构。......

雪利酒黄3月11日2021年3月11日

谷歌最近宣布结束基于个别的目标的宣布已经让数字广告行业感到惊讶。生存的关键将倾向于第一方数据并与客户建立直接关系。manbetx客户端应用下载......

Madelyn Mullen.2020年8月17日

您的业​​务增长取决于具有良好数据的每个团队。介绍分部数据委员会,一系列与经验丰富的客户数据专家的采访,他们知道如何在组织和授权团队中建立桥梁。万博官方购彩......

Madelyn Mullen.2020年8月17日

想象一下,如果您的pm对支持票、账单问题、销售交互和用户点击流有一个概述——所有这些都是统一的,并且可以通过自助服务获得。这将是数据管理的圣杯。请收听本期数据委员会的节目。......

Madelyn Mullen.2020年8月17日

简单地说,数据治理导致更好的自动化。聆听这一数据委员会的发作,听到Arjun Grams如何使他的客户数据争吵技术在IBM转变产品线,并在Anheuser-Buarch In万博官方购彩bev上提高Grow KPIS的酒吧。......

Madelyn Mullen.2020年8月17日

数据驱动的业务情况如何在组织中激发利益相关者?在Anheuser-Busch Inbev的全球客户产品总监Kurt Williams的内幕观点达到这一数据委员会的一集。......

成为一名数据专家。

获取所有物品,产品和增长的最新文章直接向您的收件箱提供。