【发布时间】:2021-12-25 11:04:12
【问题描述】:
我希望实例在其初始化脚本中附加 EBS 卷(通过 UserData 传递)。
我在 EC2 实例上安装了 awscli,但它缺少凭据。
如何允许我的实例在不复制我的凭据的情况下附加卷(并使用 S3)?
据我了解,我需要将策略添加到 IAM 角色/实例配置文件。我找到了这个教程:
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_ec2_ebs-owner.html 但我不明白 Condition 是什么以及它是否是强制性的。
为简化起见,我想让我的实例与我的所有 EBS 驱动器和 S3 一起工作。 (如果可以将工作仅限于 EBS 驱动器/S3 存储桶,其名称以某个前缀开头,那就更好了)
如何使用 boto3 创建这样的实例配置文件,以便 awscli 不需要凭据?
谢谢!
UPD:我尝试使用以下代码创建实例配置文件,并在使用创建的实例配置文件启动的实例上执行 aws ec2 attach-volume 时收到以下错误。我错过了什么?
name = 'myname'
trust_relationship_policy_document = dict(
Version = '2012-10-17',
Statement = dict(
Effect = 'Allow',
Principal = dict(Service = 'ec2.amazonaws.com'),
Action = 'sts:AssumeRole'
)
)
policy_document = dict(
Version = '2012-10-17',
Statement = [dict(
Effect = 'Allow',
Action = [
'ec2:AttachVolume',
'ec2:DetachVolume'
],
Resource = 'arn:aws:ec2:*:*:instance/*',
)]
)
iam.create_role(RoleName = name, AssumeRolePolicyDocument = json.dumps(trust_relationship_policy_document))
policy_arn = iam.create_policy(PolicyName = name, PolicyDocument = json.dumps(policy_document))['Policy']['Arn']
iam.attach_role_policy(RoleName = name, PolicyArn = policy_arn)
iam.create_instance_profile(InstanceProfileName = name)
iam.add_role_to_instance_profile(InstanceProfileName = name, RoleName = name)
# An error occurred (UnauthorizedOperation) when calling the AttachVolume operation: You are not authorized to perform this operation. Encoded authorization failure message:
【问题讨论】:
-
使用具有相关 IAM 权限的 IAM 角色启动 EC2 实例。您还可以将 IAM 角色附加到正在运行的实例。
-
@jarmod 这有多久了?多年来,您可以修改现有的实例配置文件,但添加一个实例配置文件和以前没有的实例是不受支持的
-
@jordanm 您可以将 IAM 角色attach 分配给正在运行或停止的实例。不确定这是什么时候首次引入的,但快速浏览一下 Wayback 机器表明它至少从 2017 年初就可以使用。
标签: amazon-web-services amazon-ec2 boto3 amazon-iam amazon-ebs