不使用“source_profile”在 EC2 主机上进行 IAM 角色切换

不使用“source_profile”在 EC2 主机上进行 IAM 角色切换

我有一台 EC2 Ubuntu 主机,其中有一个用户帐户负责在不同时间运行不同的任务。每个任务都需要由相应 IAM 角色(我称之为“配置文件角色”)表示的特定权限。这个想法是在需要时授予此用户承担这些角色的权限。

目前的~/.aws/credentials配置如下:

[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

配置文件中的用户default具有单一权限:承担以 开头的任何角色role-for-profile。策略 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 模块还是其他什么)都可以指定配置文件名称并透明地承担所需的配置文件角色。

现在我担心的是:由于这是在 EC2 主机上运行的,我根本不需要明确地将任何凭据放入此主机。理论上,我可以将“主” IAM 角色直接附加到 EC2 主机,而不是创建用户、授予其切换角色权限并将其凭据明确放入default配置文件中。

但是,我似乎无法做到这一点,因为source_profile参数是必需的。有人知道我如何在不提供任何凭证的情况下授权 EC2 主机承担角色吗?换句话说,我希望主机原则上按照“我的东西”(具有给定 IAM 角色的 EC2 实例)而不是“我知道的东西”(明确提供的 IAM 用户的访问密钥和密钥)进行身份验证。

更新。发现了几个功能请求 - 看起来这个还不支持 :(

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

  1. 在主机级别不提供任何权限,除了承担多个特定角色的权限。
  2. 当脚本开始工作时,它需要承担相应的角色才能获得所需的权限。
  3. 同时,我不想将角色 ARN 嵌入到脚本中。相反,我想在 中定义多个配置文件~/.aws/credentials,每个配置文件都定义为承担特定角色。

我对前两项没有问题。但是,实现第三项需要我创建一个“默认”配置文件,其他配置文件将使用它作为参考,并且出于某种原因,这个“默认”配置文件必须具有用户的凭据。我想要引用附加到运行所有这些内容的 EC2 实例的角色。

答案1

我一直在尝试解决同样的问题。我能找到的最接近的要点是:https://gist.github.com/gene1wood/34b02fa3091e184e1997

它使用aws sts assume-role命令获取一组临时凭证(默认情况下 60 分钟后过期)。我假设您可以使用此脚本获取分配给 EC2 实例的角色的临时凭证,并更新“默认”配置文件的 AWS 访问密钥和 AWS 密钥。由于临时凭证每小时过期一次,因此您需要一个 cron 作业来定期更新它们。

这是一种丑陋的黑客行为,但直到它得到支持之前,我认为它很有可能发挥作用。

答案2

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

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

答案3

现在就可以了。详细说明如下: https://docs.aws.amazon.com/cli/latest/topic/config-vars.html#using-aws-iam-roles

请参阅 2018 年 10 月/12 月更新内容: https://github.com/aws/aws-cli/issues/1390

答案4

将“默认”角色附加为实例的主要角色。这样就无需在默认配置文件上输入凭据。

为其他角色创建具有凭证的非默认配置文件。

相关内容