请帮助我理解为什么AWS建议向EC2实例分配角色(“基于角色的方法”) 将API密钥存储在实例上的文件中(“基于文件的方法”)?
请考虑以下三个用例: (i)在运行Web应用程序的实例上有一个“ tomcat”帐户。该应用程序不使用AWS API。 实例上还有另一个帐户(“支持”),该帐户使用AWS API进行内部维护和维护 (日志,指标等)。
采用基于文件的方法,如果攻击者利用该应用程序并获得对文件系统的访问权限(例如“ tomcat”), 他们将无法读取凭证文件(只能由“支持”读取),也将无法进行AWS API调用。 如果攻击者使用“ tomcat”帐户执行任意代码,情况也是如此。
但是,使用基于角色的方法,如果攻击者可以访问文件系统,他们将一无所获 (因为根本没有凭证文件),因此他们无法调用AWS API。但是,如果攻击者执行任意代码 他们可以调用API。
(ii)有一个运行Web应用程序的“ tomcat”帐户。该应用程序调用AWS API进行操作。 还有另一个帐户(“支持”)使用AWS API进行内部维护和维护。 这两个帐户都需要访问不同的资源(例如,“ tomcat”需要S3,而“支持”需要日志和指标)。
在基于角色的方法中,分配给实例的角色将有效地包含权限的并集 “ tomcat”和“ support”需要它,这违反了“最低特权”原则。即使权限是 从技术上将角色划分为两个角色,每个帐户最终都将能够承担其并不需要的角色。
使用基于文件的方法,如果攻击者获得对文件系统的访问权限,他们将能够读取“ tomcat” 凭证并从另一台计算机进行API调用(可以通过限制策略来避免这种情况 到特定的源IP,尽管维护起来很麻烦。如果攻击者执行任意 代码,他们将能够从EC2实例进行API调用。在这两种情况下,“支持”帐户都将保留 受操作系统保护。
采用基于角色的方法,如果攻击者获得了对文件系统的访问权,那么在API调用方面却毫无收获, 因为根本没有凭证文件。但是,如果攻击者执行任意代码,则可以进行API调用 从机构代表两个角色(“ tomcat”和“ support”)开始。
(iii)有一个运行Web应用程序的“ tomcat”帐户。该应用程序调用AWS API进行操作。 实例不会进行其他API调用。
使用基于文件的方法,如果攻击者获得对文件系统的访问权限,他们将能够读取“ tomcat” 凭证并从另一台计算机进行API调用(可以通过限制策略来避免这种情况 到特定的源IP,尽管维护起来很麻烦。如果攻击者执行任意 代码,他们将能够从EC2实例进行API调用。
采用基于角色的方法,如果攻击者获得了对文件系统的访问权,那么在API调用方面却毫无收获, 因为根本没有凭证文件。但是,如果攻击者执行任意代码,则可以进行API调用 从实例中获取。
因此,似乎推荐的基于角色的方法实际上会增加情况(i)和(ii)的风险。
我在这里想念什么?
答案 0 :(得分:1)
如果您在Amazon EC2实例上有多组用户,而每组用户都需要不同的IAM权限,则不适合通过向EC2实例分配IAM角色来提供凭据。
通常,建议使用Role方法,因为凭据不会存储在任何地方。有时会不小心将存储在磁盘上的凭据检查到源代码存储库中。有能力创建磁盘卷快照的用户也可以访问它们,然后可以将其附加到其他实例以访问配置文件并避免常规安全性。这表明通过仅向IAM用户授予其工作所需的特定权限来使用最低特权也很重要。
向实例分配角色需要ec2:PassRole
权限,因此还必须仔细授予此权限,以确保用户不会为自己分配那些授予过多权限来访问AWS服务的角色。
底线:非常高兴您一直在考虑安全性。遵循您认为最适合业务需求的过程。