用AWS管理秘密的正确方法

埃文约翰逊2017年8月28日

公司管理应用程序秘密的方式至关重要。即使在今天,秘密管理不当导致了惊人的数量高调违规。

面对互联网的凭证就像让你的房子钥匙在一个百摩托那里,数百万人们每天走过。即使秘密很难找到,它也是一个捉迷藏的游戏,并寻求你最终会失败。

在细分市场,我们集中并安全地管理我们的秘密AWS.范围S.撕裂,很多erraform.配置,且chamber

虽然工具喜欢拱顶汇总, 和知己最近已经有很多嗡嗡声,参数商店在讨论秘密管理时一直被忽视。

在使用参数存储后几个月后,我们将结束:如果您在AWS上运行所有基础架构,并且您不使用参数商店来管理您的秘密,那么您就是疯狂的__!此帖子具有在生产中使用参数存储所需的所有信息。

服务身份

在进入参数存储本身之前,值得简要讨论服务身份如何在AWS帐户内工作。

在段,我们运行数百个服务,彼此通信,AWS API和第三方API。我们运行的服务具有不同的需求,并且只能访问严格必要的系统。这被称为'最重要的特权原则'

作为一个例子,我们的主要Web服务器永远无法访问读取安全审核日志。在不提供容器和服务的身份,无法保护和限制访问控制策略的秘密。

我们的服务识别自己Iam角色。来自AWS文档:

-一个am ..

IAM角色可以通过几乎任何东西假设:AWS用户,运行程序,lambdas或EC2实例。他们都描述了用户或服务可以且不能做到的。

例如,我们的IAM角色对于实例具有对S3存储桶的只写访问,以便附加审核日志,而是防止删除和读取这些日志。

容器如何安全地获得其角色?

使用ECS的要求是所有容器必须运行EC2集装箱服务代理(ECS-代理)。代理程序作为调节的容器运行,并提供容器可以与之通信的API。代理是中枢神经系统,其中包含哪些实例,以及应该向给定容器提供哪些实例的情况。

缩放边缘

为了正常运行,ECS-Agent运行一个必须可以访问群集中运行的其他容器的HTTP API。API本身用于HealthChecks,并将凭证注入每个容器中。

要使此API可在主机上的容器中可用,则在主机实例上设置了IPTables规则。此iptables规则将运送到ECS-Agent容器的魔法IP地址的流量。

ECS-Agent启动容器之前,它首先从AWS凭据服务中获取容器的任务角色的凭据。ECS-Agent接下来将凭据键ID设置为UUID,如aws_container_credentials_relative_uri.启动时容器内的环境变量。

从容器内部,此变量看起来像以下内容:

使用此相对URI和UUID,容器从ECS-Agent上使用HTTP获取AWS凭据。

一个容器无法访问身份验证凭据以模拟另一个容器,因为UUID足够难以猜测。

额外的安全细节

作为重型ECS用户,我们确实发现与ECS任务角色相关的安全脚枪。

首先,意识到这一点非常重要任何容器可以访问EC2元数据服务可以成为系统上的任何其他任务角色。如果您不小心,很容易忽略给定的容器可以规避访问控制策略并获得对未经授权的系统的访问。

缩放边缘

通过Docker桥使用主机网络和B),容器可以访问元数据服务的两种方式。

当一个容器运行时- 网络='host',它能够使用其主机的网络连接到EC2元数据服务。设置ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST.变量到错误的在ECS.CONFIG中,可以防止包含此权限的容器运行。

此外,重要的是要阻止访问Docker桥接器上的元数据服务IP地址一个。这IAM任务角色文件建议使用此特定规则防止访问EC2元数据服务。

在构建安全系统时,最重要的特权原则始终很重要。环境ecs_disable_privileged在主机的情况下真实ECS.CONFIG.可以防止特权Docker容器运行并导致其他更细致的安全问题。

现在我们已经建立了容器如何建立身份和交换密钥,这将我们带到了等式的第二部分:参数商店。

AWS参数存储

参数存储是存储字符串的AWS服务。它可以存储秘密数据和非秘密数据。存储在参数存储中的秘密是“安全字符串”,并使用客户特定的KMS密钥加密。

在引擎盖下,请求来自AWS参数商店的安全字符串的服务在幕后发生了很多事情。

缩放边缘
  1. ECS-Agent请求主机实例的临时凭据。

  2. ECS代理不断为ECS上运行的每个ECS任务角色生成临时凭据,使用名为ECS ACS的未记录服务。

  3. 当ECS代理启动每个任务时,它会在容器的环境中设置一个秘密UUID。

  4. 当任务需要其任务角色凭据时,它会从ECS-Agent API请求它们并与秘密UUID进行身份验证。

  5. ECS任务请求使用任务角色凭据从参数存储中的秘密。

  6. 参数存储在将它们返回ECS任务之前透明地解密这些安全字符串。

使用参数存储的角色尤其很好,因为它不需要维护其他身份验证令牌。这将创造额外的头痛和额外的秘密来管理!

参数存储IAM策略

访问参数存储的每个角色都需要SSM:GetParameters.允许。“SSM”代表“简单系统管理器”,是如何AWS表示P.arameter.S.撕裂操作

SSM:GetParameters.权限是用于强制访问控制并保护一个服务的秘密的策略。段为所有服务提供了一个IAM角色,授予符合格式的秘密{{服务名称}}/*

除了访问控制策略之外,段还使用专用的AWS KMS键加密参数存储中的安全字符串。每个IAM角色都被授予一小部分KMS权限,以便解密在参数商店中存储的秘密。

当然,手动创造所有这些样板都会变得令人厌倦。相反,我们通过Terraform模块自动创建和配置这些角色。

自动化服务身份和策略

段具有一个小型的Terraform模块,摘要摘掉创建唯一的IAM角色,负载平衡器,DNS记录,自动播放和CloudWatch警报。下面我们展示了我们的方式nginx.负载均衡器使用我们的服务模块定义。

在引擎盖下,每个服务给出的任务角色都具有我们之前列出的所有IAM策略,限制了名称字段中的值对参数存储的访问权限。无需配置。

此外,开发人员可以选择通过提供“秘密标签”来覆盖其服务的秘密。此秘密标签将在IAM政策中替换其服务名称。如果nginx需要与haproxy实例相同的秘密,则两个服务可以使用相同的秘密标签共享凭据。

生产中的参数商店

所有段员工使用AWS验证AWS-Vault.,它可以安全地将AWS凭据安全存储在麦斯科斯键盘中或Linux用户的加密文件中。

细分有几个AWS账户。工程师可以通过使用互动与每个帐户进行交互AWS-Vault.使用其环境中填充的AWS凭据本地命令和执行命令。

这对于AWS API来说非常棒,但是在与参数商店交互时,AWS CLI会留下一点。为此,我们使用chamber

使用带参数商店的腔室

chamber是我们内部构建的CLI工具,以允许开发人员和代码以一致方式与参数存储通信。

通过允许开发人员使用在生产中运行的相同工具,我们减少了在开发中运行的代码与暂存和生产之间的差异。

腔室用AWS-Vault开箱即用,只有几个关键的子命令:

  • exc.- 在加载环境中秘密后的命令。

  • 历史- 参数商店中秘密的变化。

  • 列表- 秘密命名空间中所有秘密的名称。

  • - 参数存储的秘密。

腔室利用参数商店内置的搜索和历史机制,以实现列表和历史子命令。存储在参数存储中的所有字符串也会自动版本化,因此我们获得内置审计跟踪。

用于从参数商店获取秘密的子命令是exc.。当开发人员使用EXEC子命令时,他们使用它AWS-Vault。

在前述命令中,将jamber用开发帐户中员工的凭据和权限执行,并且它获取与之相关的秘密LoadBalancers.来自参数商店。遇房填充环境后,它将运行nginx服务器。

生产中的跑步室

为了填充生产中的秘密,腔室作为二进制文件包装在我们的Docker容器内部,并被设置为容器的入口点。腔室将通过信号传递给它执行的程序,以便允许程序优雅地处理它们。

以下是使我们的主要网站商会准备好所需的差异。

非Docker容器也可以使用腔室填充环境,然后在模板中创建配置文件,运行守护程序等。我们只需将其命令用腔室可执行包装,并且我们正在向比赛中缠绕。

审计

作为我们的安全故事的最后一块,我们希望确保记录和审核我们上面描述的每个操作。幸运的是,对我们来说,所有对AWS参数商店的访问都会被记录T.轨。

这使得为​​所有参数保持完整的审计跟踪,简单且廉价。它还使建立自定义警报和审计开始直截了当。

CloudTrail使得可以确定使用哪些秘密,并且可以发现未使用的秘密或未授权访问可能的秘密。

AWS将所有参数存储访问作为CloudTrail Management Event。大多数安全信息和事件管理(SIEM)解决方案可以配置为观看和读取S3的数据。

外带

通过使用参数商店和IAM,我们能够建立一个小型工具,使我们在秘密的管理系统中向我们提供最重要的属性,没有管理员开销。特别是,我们得到:

  • 通过强加密保护休息的秘密。

  • 强制访问控制策略。

  • 创建身份验证和访问历史记录的审核日志。

  • 伟大的开发人员体验。

最重要的是,只有一点配置和零服务管理,可以实现这些功能。

秘密管理非常具有挑战性。许多产品已经建立了管理秘密,但没有比参数商店更好地符合段所需的用例。

2030年,你的技术堆栈是什么样的?

在我们的新报告中,我们调查了4,000多个客户数据决策者,以衡量客户数据行业的当前和万博官方购彩未来预测。

成为数据专家。

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