在开发环境中保护AWS凭据

举起那些之前在脚本或应用程序中对您的AWS凭证进行硬编码的人?

我的手现在在空中?

硬编码凭证是不好的做法,我们都知道这一点。但作为开发人员,我们不断尝试偷工减料以提高生产力。凭证和秘密的处理不应该是我们希望削减的一个角落;这将最终导致我们的手指被烧焦……而且非常认真。

AWS-Vault是一种CLI工具,用于在开发环境中安全地存储和访问AWS凭证。

这将我带到AWS CLI。您会认为AWS官方工具会负责任地处理凭证。不幸的是,你错了。 aws configure命令是AWS文档指示我们在安装后直接运行的命令,它将我们珍贵的IAM凭证以纯文本形式写入〜/ .aws / credentials文件供全世界查看。这是文档中配置文件的整个页面,包括纯文本示例

你不会把你的银行销钉粘在你的银行卡上;那么为什么我们都将我们的AWS账户凭证以明文形式放在每个人都期望的地方?

让我画一幅可怕的图片……你可能还记得最近发生的一些严重的npm攻击;不幸的是,在Javascript社区中经常发生,但这是另一个时间的故事。以下是eslint-scope漏洞利用以及下载的最新事件流漏洞超过800万。时代。

现在想象一下,黑客没有抓取npm凭证,也没有试图窃取你的比特币钱包,而是决定冒险一点,并在〜/ .aws /凭证中窃取你的纯文本秘密。

现在去运行cat~ / .aws /凭证,它是空的吗?哦哦……那些管理员访问凭证?如果你现在不出汗,你应该这样做。 AWS凭证是许多攻击的目标,我警告你……他们可能还没有你的,但它即将到来,我不想成为那个说“我告诉过你”的人。

我们只需要查看最近的DockerHub凭据泄漏,黑客将git存储库保存到赎金,以突出显示〜/ .aws /凭证泄漏的严重程度。现在想象一下你的AWS基础设施被勒索所有赎金,因为你留下了你的秘密,让任何汤姆,迪克和哈利都能看到。当你访问你的主页时,你想看到这样的东西吗? WanaCry互联网版“AWSGeddon”即将推出。

WanaCry利用图片。来源维基百科

所以现在我已经引起了你的注意,我们如何从严重的糟糕日子中拯救你?

对我们来说幸运的是,99designs的团队创建了一个名为AWS-Vault的令人惊叹的CLI工具。这个工具可以帮助我们从显示勒索软件页面的大部分网站中拯救我们,而不是我们的甜蜜内容。

AWS Vault将IAM凭据存储在操作系统的安全密钥库中,然后从这些凭据生成临时凭证以向您的shell和应用程序公开。

那么这是什么意思?与aws configure命令不同,当您使用aws-vault add添加AWS凭据时,您的凭据将存储在操作系统安全密钥链中。您的密钥现在已加密货币到您的秘密后端,保护您免受偷窥者的侵害,更重要的是保护您的冒险hax0r。

它也很容易安装,你可以从GitHub下载最新版本,或者macOS用户可以运行brew cask install aws-vault。你没有任何借口,你可以在不到5分钟的时间内开始。

AWS-Vault使用您刚刚添加的凭据,使用Amazon的简单令牌服务生成临时凭证。这些临时凭证可以配置为持续几分钟到几小时。甚至这些凭证也不会在任何地方以纯文本形式显示,而是运行aws-vault exec ${profile} – 启动新的shell并将您的临时秘密作为环境变量导出,以供AWS CLI或您需要的任何其他内容读取。

该工具还很好地补充了〜/ aws / .config中现有的AWS CLI配置。它知道您已经设置的现有配置文件和配置。

首先,首先删除脚本中的硬编码凭据-needs-aws-credentials.sh并重构它以从环境变量中提取这些值。您还需要确保包含AWS_SESSION_TOKEN变量。您可以在AWS文档中找到有关STS和临时凭证的更多信息。现在您已经进行了更改,继续运行:

$aws-vault exec ${profile} – script-that-needs-aws-credentials.sh

如果您想知道AWS-Vault正在做什么,请运行:

$aws-vault exec ${profile} -j {“Version”:1,“AccessKeyId”:“AKIAI44QH8DHBEXAMPLE”,“SecretAccessKey”:“wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY”,“SessionToken”:“AQoDYXdzEJr …”, “过期”: “2019-06-26T16:01:48Z”}

这些是由Amazon STS发布的临时凭证,现在由AWS-Vault安全存储以供将来使用。

我的申请怎么样?

如果要将凭据硬编码到应用程序中,请使用.env文件或等效文件,请查看AWS-Vault服务器。

$aws-vault exec ${profile} –server

这个方便的工具将启动本地EC2元数据实例,并将所有发往169.254.169.254的流量路由到您在本地运行的AWS-Vault服务器,从而提供临时安全凭证。启动服务器后,您可以通过运行curl 169.254.169.254来测试它。

删除这些硬编码凭据,应用程序中的AWS-SDK将自动使用AWS-Vault服务器在需要时刷新凭据。这意味着您的本地应用程序将以与您分配IAM角色要执行的实例配置文件的EC2实例相同的方式运行。 (至少我希望你在AWS环境中这样做。如果不是你……请立即阅读)。

开始使用角色假设和多重身份验证

最佳做法是将IAM用户配置为对控制台具有只读访问权限。这意味着当您登录控制台时,您无法更改任何内容,直到您承担具有提升权限的角色。这种方法类似于在shell会话中使用“sudo”。希望它会鼓励你在控制台周围进行更改时更加小心。您也可以在这些特权角色上强制执行MFA,如果您的凭据被意外泄露,则可以为您提供额外的保护层。

让我们快速了解AWS-Vault的假设角色。如果您熟悉配置角色假设,则可以向下滚动到下面的AWS-Vault配置。如果没有,请继续并登录控制台。

首先,如果您还没有这样做,请在您的用户上设置MFA。在IAM服务中找到您的用户,然后单击安全凭证选项卡并设置MFA设备。我使用Authy,所以我可以在我的所有设备上同步我的MFA代码(如果你像我一样有点笨拙,当你把手机放在家里时会有帮助)。 Google身份验证器是另一个合适的选择,最近AWS-Vault增加了对YubiKeys的支持;对那个人来说,对于j0hnsmith来说是一个巨大的荣誉。设置完成后,记下MFA ARN,稍后您将需要这个。

接下来,您将要创建一个新的IAM角色。我们将创建一个您将承担的AdministrativeUser角色。在框中输入您的帐户ID,如下面的屏幕截图所示,然后勾选需要MFA。

单击“下一步”,然后在“附加权限”策略屏幕上,找到AdministratorAccess策略并将其附加到此角色。在下一个屏幕上,为其命名为AdministrativeUser并创建它。这将创建一个与您自己的帐户建立信任关系的新角色。这意味着只有您帐户中已通过MFA设备身份验证的用户才能承担此角色。回到你的角色并编辑信任关系,看起来应该是这样的。

{“Version”:“2012-10-17”,“Statement”:( {“Effect”:“Allow”,“Principal”:{“AWS”:“arn:aws:iam :: 01234567809012:root”}, “行动”:“sts:AssumeRole”,“条件”:{“Bool”:{“aws:MultiFactorAuthPresent”:“true”}}}}}}

现在转到IAM用户,发现自己在列表中。添加如下所示的内联策略。这允许您的用户承担您刚刚创建的AdministrativeUser角色。

{“Version”:“2012-10-17”,“Statement”:( {“Effect”:“Allow”,“Action”:(“sts:AssumeRole”),“Resource”:(“arn:aws:iam :: 0123456789012:role / AdministrativeUser“,)})}

您可以通过单击顶部工具栏中的帐户并单击“切换角色”来测试切换角色。输入您的帐户ID和我们创建的新角色。

您应该注意到页面顶部的菜单已更改颜色,您现在应该看到您的姓名和当前承担的角色。

那么我们如何承担AWS-Vault的角色呢?

在您喜欢的编辑器中打开〜/ .aws / config并添加如下所示的管理员配置文件。您可以在IAM用户的安全凭证选项卡中找到您的mfa_serial。您需要根据需要修改值。 source_profile应该是使用aws-vault add命令创建的。

(profile readonly)region = eu-west-1(profile administrator)source_profile = readonlymfa_serial = arn:aws:iam :: 0123456789012:mfa / steverole_arn = arn:aws:iam :: 0123456789012:role / AdministrativeUser

现在去运行下面的登录命令。您会注意到它会提示您输入MFA令牌。如果成功,您应该发现自己在AWS控制台中具有管理员访问权限。

$aws-vault登录administrator输入arn的令牌:aws:iam :: 0123456789012:mfa / steve:

这也适用于跨账户角色假设。对于那些管理多个aws帐户凭据的人,我建议您在此处查看此AWS跨帐户角色假设文章。

好的,那么如何在AWS-Vault中轮换我的凭据?

好吧,它发生了一个奇妙的命令,将为您旋转您的IAM凭据。你不会相信这是多么容易:

$aws-vault rotate ${profile}轮廓“${profile}”的轮换凭据(需要10-20秒)为arn输入令牌:aws:iam :: 0123456789012:mfa / steve:123456Done

使用aws-vault,没有任何借口可以安全地处理开发环境中的机密。您可以通过删除〜/ .aws / credentials中的凭据并通过运行aws-vault add new-profile将其添加到aws-vault来获得快速获胜。现在只需执行您之前使用aws-vault前缀执行的相同AWS CLI命令。

$aws-vault exec new-profile – aws s3 ls

我只想感谢99designs创建一个工具来保护我们的本地IAM凭据。这应该是配置AWS配置文件以与AWS CLI一起使用的标准方法。我希望来自AWS团队的人正在读这篇文章;我希望AWS删除对从〜/ .aws / credentials或〜/ .aws / config检索凭据的支持。

您只需要阅读AWS博客帖子并观看re:发明视频,了解AWS确实是安全性的先驱,例如看看这个Twitter线程。但是我们在基础知识方面做得不够,让工程师太容易变得邋..我们看到DevSecOps在开发理念上发生了巨大变化,推动了“安全即代码”文化。让我们鼓励其他人一起采用最佳实践。

所以你已经看到通过花几分钟阅读这篇文章来使用AWS-Vault是多么容易。使用AWS-Vault很容易。稍后当您不受WanaCry Internet版“AWSGeddon”™影响时,您可以感谢我。

谢谢你的阅读。

在开发环境中保护AWS凭证最初发布在Hacker Noon on Medium上,人们通过突出显示和回复此故事来继续对话。

资讯来源:由0x资讯编译自BITCOININSIDER。版权归作者Anonymous所有,未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢