如何一次性为多个实例附加IAM角色

时间:2018-08-11 15:06:43

标签: amazon-web-services cloud amazon-iam policy

我想将新创建的IAM角色附加到我现有的所有250个实例中,是否有任何“一次性”方法,因为我不想对所有250个实例一一附加。 / p>

谢谢

3 个答案:

答案 0 :(得分:1)

没有一个API可以一次将一个实例角色分配给多个实例,但是编写一些可以在命令行中完成的命令应该很容易。如果您更喜欢编程方式,那么还有大多数语言的SDK。

要为您的要求添加一点颜色,您需要创建一个与您的角色相关联的实例配置文件,然后将该 instance配置文件附加到您的每一个实例,而不是直接作用。

https://aws.amazon.com/blogs/security/new-attach-an-aws-iam-role-to-an-existing-amazon-ec2-instance-by-using-the-aws-cli/具有执行此操作所需的所有命令,因此您只需要遍历列表并针对尚未设置正确配置文件的每个实例执行该操作。

如果需要一些帮助对其进行编程,则应自己提供一些代码,并将其粘贴在此处,我们将为您提供进一步的帮助。

更新:由于您似乎还没有准备好进入本文的代码结尾,因此,我将带您进入我最喜欢的临时执行环境posix shell:

iprofile="your-instance-profile-name"
aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId' \
| xargs -n 1 -P 25 $aws ec2 associate-iam-instance-profile \
  YourInstanceId --iam-instance-profile Name=${iprofile} --instance-id 

应列出您的所有实例,然后以25个并行的组将$iprofile与每个实例关联。

答案 1 :(得分:0)

Python等效项如下:

import boto3

ec2 = boto3.client('ec2', region_name='ap-southeast-2')

instances = ec2.describe_instances()

for reservation in instances['Reservations']:
    for instance in reservation['Instances']:
        response = client.associate_iam_instance_profile(
            IamInstanceProfile={Name='XYZ'},
            InstanceId=instance['InstanceId']
        )

(我没有测试!)

答案 2 :(得分:0)

在丹尼尔(Daniel)解决方案的支持下,我创建了对我更有用的可读性

#!/bin/bash

#### Variables
region=eu-west-2
profile_id=<insert_profile_from_/.aws/credentials>
iam_instance_profile=<insert_IAM_instance_profile>
instances=$(aws ec2 describe-instances --query 'Reservations[*].Instances[*].InstanceId' --profile $profile_id --region $region | awk '{print $1}' | sed 's/[]","[]//g')

assign_instances()
{
  for instance in $instances; do aws ec2 associate-iam-instance-profile --instance-id $instance --iam-instance-profile Name=$iam_instance_profile --region $region --profile $profile_id; done
}
assign_instances