我的公司使用 AWS 进行计算、存储、数据库等。但是,他们使用根密钥访问所有内容,出于安全考虑,我正尝试摆脱这种做法。任何泄漏都可能导致灾难性的数据泄漏,或 AWS 的巨额账单。我希望通过授权密钥(我知道如何做到这一点)并让密钥在 x 周后自动过期来尽可能地防止这种情况发生。
我做了一些探索,但还没有找到完美的东西。我发现最接近的是以下内容。(我们使用 Azure 授权用户使用 AWS)它是一种通过 azure 授权允许 aws cli 访问 aws 的工具:https://github.com/dtjohnson/aws-azure-login
上述内容为我们提供了通过 CLI 访问 AWS 某些部分的每日授权。然而,这并不是我们想要的。为了方便起见,管理层更喜欢更长的有效期,而我们需要实际的密钥才能使用 Cyberduck 之类的工具并在 AWS 中启动实例等。
是否可以根据用户创建每 X 周过期一次的密钥并需要重新请求密钥?
答案1
根用户
根用户应启用 MFA,然后将其锁定并永远不要使用。切勿为根用户创建访问密钥。
IAM 管理员
创建一个具有 MFA 要求且拥有完全权限(包括计费)的 IAM 管理员用户。
IAM 策略和组
接下来创建一个 IAM 策略,让用户访问他们可以使用的服务和功能。除了允许进入 IAM 设置 MFA 之外,该策略还应强制要求所有功能都使用 MFA。将此策略附加到组。您可以根据需要创建任意数量的策略和组。如果您发现任何好处,可以使用服务控制策略进一步锁定。您可以在 IAM 或 SCP 中执行区域强制执行和防止使用昂贵资源(例如 GPU 实例或 RedShift/RDS)等操作。
联合或 IAM 用户
现在,要么将您的账户联合到本地活动目录,要么创建 IAM 用户并将其添加到组中。不要直接向用户添加策略。这些用户可以拥有访问密钥,但这些密钥也受 MFA 约束。
联盟链接:一,二。关键搜索词是“AWS Active Directory Federation”。
两周
我怀疑两周的请求只是个幌子。一旦你正确设置了所有用户,你就不需要那么频繁地更改访问密钥 - 每隔几个月可能就足够了,或者可能长达一年。
结果
所有这些让您可以很好地控制您的帐户,让您可以追踪谁做了什么(确保 Cloud Trail 已启用并且存储桶受到保护),减少黑客增加账单的风险,并且可能还有其他好处。
答案2
请勿使用您的 AWS 账户根用户的访问密钥。使用 IAM 用户与 AWS 进行日常交互。现在一切都已解决...
使用临时安全凭证
您可以创建 IAM 角色(而不是用户)并生成临时安全凭证。这些凭证具有访问密钥 ID、秘密访问密钥和指示凭证何时过期的安全令牌。
通常情况下,访问密钥在您手动撤销之前一直有效。但是,通过 IAM 角色和 AWS Security Token Service 的其他功能获得的临时安全凭证会在短时间后过期。
在您的示例中,讨论实例或 CLI 脚本,而不是将访问密钥传递或嵌入到应用程序中,定义一个具有适当应用程序权限的 IAM 角色,并使用 EC2 角色启动 Amazon EC2 实例。这会将 IAM 角色与 Amazon EC2 实例关联,并让应用程序获取临时安全凭证,然后可以使用这些凭证进行调用。CLI 可以自动从角色获取临时凭证。