在不使用“source_profile”的情况下在EC2主机上切换IAMangular色

我有一个EC2 Ubuntu主机,我有一个用户帐户,负责在不同的时间运行不同的任务。 每个任务都需要由相应的IAMangular色表示的特定权限(我称之为“个人档案angular色”)。 这个想法是授予这个用户在需要时承担这些angular色的权限。

现在, ~/.aws/credentialsconfiguration如下所示:

 [default] aws_access_key_id = XXX aws_secret_access_key = YYY [profile1] role_arn = arn:aws:iam::XXXXXXXXXX:role/role-for-profile1 source_profile = default [profile2] role_arn = arn:aws:iam::XXXXXXXXXX:role/role-for-profile2 source_profile = default ... [profileN] role_arn = arn:aws:iam::XXXXXXXXXX:role/role-for-profileN source_profile = default 

defaultconfiguration文件中的用户具有一个权限:承担以role-for-profile开始的任何angular色。 JSON策略如下所示:

 { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1494333413000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::XXXXXXXXXX:role/role-for-profile*" ] } ] } 

因此,任何需要访问特定AWS服务以执行特定任务(无论是使用AWS CLI,Boto还是Ansible模块等)的应用程序都可以指定configuration文件名称并透明地采用所需的configuration文件angular色。

现在我担心的是:因为这是在EC2主机上运行的,所以我不需要明确地把任何凭据放到这个主机上。 理论上,我可以直接将“主”IAMangular色附加到EC2主机,而不是创build用户,授予angular色权限切换权限,并将其凭据明确地置于defaultconfiguration文件中。

但是,我似乎无法做到这一点,因为source_profile参数是强制性的。 有没有人有一个想法,我怎么能授权EC2主机承担angular色,而不给它任何凭据? 换句话说,我希望主机通过“我是我的”(具有给定IAMangular色的EC2实例)原理进行authentication,而不是“我知道的东西”(明确提供了IAM用户的访问密钥和密钥)。

UPDATE。 发现了几个function请求 – 看起来像这还不支持:(

  • https://github.com/aws/aws-sdk-go/issues/1019
  • https://github.com/aws/aws-cli/issues/1390

UPDATE2。 看起来我需要澄清这个设置的目的。 我有不同的脚本运行在相同的主机上(甚至可能是并行的)。 每个脚本都需要一组特定的权限。 我想要达到的是,每个脚本只有这样的权限,而不是更多。 在我看来,实现这个目标的最好方法如下:

  1. 在主机级别上根本不提供任何权限,除了承担许多特定angular色的权限外。
  2. 当脚本开始工作时,它需要承担相应的angular色才能获得所需的权限。
  3. 同时,我不想把angular色ARN烧成脚本。 相反,我想在~/.aws/credentials定义一些configuration文件,每个configuration文件都被定义为承担特定的angular色。

前两项没有问题。 但是,实现第三个需要我创build一个“默认”configuration文件,其他configuration文件将用作参考,并且由于某种原因,这个“默认”configuration文件必须具有用户的凭证。 我想要的是参考所有这些东西运行的EC2实例附加的angular色。

我一直在试图解决同样的问题。 我能find的最近的东西是这个要点: https : //gist.github.com/gene1wood/34b02fa3091e184e1997

它使用aws sts assume-role命令获取一组临时凭证(默认情况下会在60分钟内过期)。 我假设您可以使用此脚本获取分配给EC2实例的angular色的临时证书,并更新“默认”configuration文件的AWS访问密钥和AWS密钥。 由于临时凭证每小时过期,您需要定期更新这些凭证。

一种丑陋的黑客,但直到它被支持,我认为它有一个很好的工作机会。

AWS只允许您将一个angular色分配给EC2实例。 该angular色应具有EC2实例可能需要承担的所有权限。 参考 。

您可以使用命令行更改分配给实例的angular色,但这不是您想要在运行时定期执行的操作。

附加“默认”angular色作为实例的主angular色。 这样可以避免在默认configuration文件中需要凭据。

使用其他angular色的凭据创build非默认configuration文件。