我正在使用“aws ec2 run-instances”命令(来自AWS命令行界面(CLI) )启动Amazon EC2实例。 我想为我启动的EC2实例设置一个IAMangular色 。 IAMangular色已configuration,我可以在从AWS Web UI启动实例时成功使用它。 但是当我尝试使用该命令来执行此操作时,以及“–iam-instance-profile”选项失败。 执行“aws ec2 run-instances help”会显示值为Arn =和Name =子字段。 当我尝试使用“aws iam list-instance-profiles”来查找Arn时,它给出了这个错误消息:
发生客户端错误(AccessDenied):用户:arn:aws:sts :: xxxxxxxxxxxx:承担angular色/shell/ I-15c2766d未被授权执行:资源上的iam:ListInstanceProfiles:arn:aws:iam :: xxxxxxxxxxxx:实例-profile /
(其中xxxxxxxxxxxx是我的AWS 12位帐号)
我通过Web UI查询了Arnstring,并在run-instances命令中通过“–iam-instance-profile Arn = arn:aws:iam :: xxxxxxxxxxxx:instance-profile / shell”使用该string, :
发生客户端错误(UnauthorizedOperation):您无权执行此操作。
如果我完全不使用“–iam-instance-profile”选项,实例将启动,但不会有我需要的IAMangular色设置。 所以许可似乎与使用“–iam-instance-profile”或访问IAM数据有关。 我曾多次重复AWS故障(他们有时会发生),但没有成功。
我怀疑也许有一个限制,即具有IAMangular色的实例不允许启动具有更强大IAMangular色的实例。 但在这种情况下,我正在执行命令的实例与我尝试使用的IAMangular色具有相同的作用。 命名为“壳”(虽然我也试过使用另一个,没有运气)。
设置一个IAMangular色甚至不允许从一个实例(通过它的IAMangular色凭证)?
使用IAMangular色需要一些更高的IAMangular色权限,而不是启动普通实例所需的权限?
“–iam-instance-profile”是指定IAMangular色的适当方式吗?
我需要使用Arnstring的一个子集,还是以其他方式进行格式化?
是否有可能设置一个IAMangular色,可以做任何IAMangular色访问(也许是一个“超级根IAM”…组成这个名字)?
仅供参考,一切都涉及在实例上运行的Linux。 另外,我从一个实例运行所有这些,因为我无法在桌面上安装这些工具。 这和我不想把我的IAM用户凭据放在任何AWS存储上,就像这里 AWS的build议一样。
回答之后:
我没有提到“PowerUserAccess”(与“AdministratorAccess”)的启动实例权限,因为我没有意识到在提问时需要额外的访问权限。 我认为IAMangular色是启动时附带的“信息”。 但它确实不止于此。 这是一个许可的授予。
Mike Pope在AWS安全博客上发表了一篇关于授予权限以启动IAMangular色(PassRole权限)的EC2实例的好文章,从AWS的angular度解释了这个主题。
Skaperen的回答是部分正确的(+1),但稍微不准确/误导如下(这个解释似乎有点太复杂的评论,因此这个单独的答案):
要启动具有IAMangular色的EC2实例,需要对IAM工具进行pipe理访问。
这是正确的,并指出了潜在的问题,但所需的pipe理权限是相当有限的,所以下面的结论…
由于IAMangular色授予权限,显然有一个安全问题需要解决。 您不希望IAMangular色成为允许升级的手段。
…有点误导,只要潜在的安全问题得到妥善解决。 授予在Amazon EC2实例上运行的应用程序访问AWS资源中的主题 :
您可以使用IAMangular色来pipe理在Amazon EC2实例上运行的应用程序的凭据。 在使用angular色时,您不必将AWS凭证分发到Amazon EC2实例。 相反,您可以使用应用程序在Amazon EC2上运行并调用其他AWS资源时所需的权限来创buildangular色。 当开发人员启动Amazon EC2实例时,他们可以指定您创build的与实例关联的angular色。 在实例上运行的应用程序可以使用angular色凭证对请求进行签名。
现在,在手头的使用案例中,所提到的开发者发布Amazon EC2实例本身实际上是EC2实例,这似乎产生了Skaperen所概述的安全问题。 实际情况并非如此,如使用Amazon EC2angular色所需权限一节中的示例策略所示:
{ "Version": "2012-10-17", "Statement": [{ "Effect":"Allow", "Action":"iam:PassRole", "Resource":"*" }, { "Effect":"Allow", "Action":"iam:ListInstanceProfiles", "Resource":"*" }, { "Effect":"Allow", "Action":"ec2:*", "Resource":"*" }] }
所以, iam:PassRole
实际上是唯一需要的IAM许可,虽然在技术上属于行政性质,但这并不是那么深远 – 当然,上述样本政策仍然允许通过上市的方式升级权限,但可以通过仅指定想要/安全地传递给用例的那些angular色来阻止这种情况 – 这在“ 限制哪些angular色可以传递到Amazon EC2实例(使用PassRole)”一节中进行了概述:
您可以使用PassRole权限来阻止用户将angular色传递给具有比已授予用户更多权限的Amazon EC2,然后在该angular色的提升特权下运行应用程序。 在angular色策略中,允许PassRole操作并指定一个资源(例如arn:aws:iam :: 111122223333:role / ec2Roles / *)来指示只有特定angular色或angular色集可以传递给Amazon EC2实例。
相应的示例策略说明了与手头用例完全匹配的情况,即通过使用Amazon EC2 API授予使用angular色启动实例的权限 :
{ "Version": "2012-10-17", "Statement": [{ "Effect":"Allow", "Action":"ec2:RunInstances", "Resource":"*" }, { "Effect":"Allow", "Action":"iam:PassRole", "Resource":"arn:aws:iam::123456789012:role/Get-pics" }] }
要启动具有IAMangular色的EC2实例,需要对IAM工具进行pipe理访问。 即使新实例与执行启动的实例具有完全相同的angular色,也是如此。 我启动的实例拥有“PowerUserAccess”权限,允许启动实例,但不允许IAMangular色访问。 一旦我将启动实例中的权限提升到“AdministratorAccess”,那么它就起作用了。
由于IAMangular色授予权限,显然有一个安全问题需要解决。 您不希望IAMangular色成为允许升级的手段。 但是这也意味着为了授予任何IAMangular色,启动的实例必须具有“AdministratorAccess”或从实例内(不推荐)使用用户访问/秘密密钥(具有这样的许可),这将允许授予任何IAMangular色。
能够启动具有与启动实例相同的权限(相同的IAMangular色)的实例会很有用,但是EC2或IAM或者没有这个级别的粒度,或者没有办法安全地validation这个。