我希望实例在其init脚本中附加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:
在启动Amazon EC2实例之前,创建一个具有必要权限的IAM角色。如果您想允许附加任何EBS卷,则可以省略"条件"。
然后,启动AmazonEC2实例,并将IAM角色关联到该实例。这将自动向想要访问您的AWS服务的实例上的AWS CLI和任何其他软件提供凭据。
然后,您的脚本可以调用aws ec2 attach-volume
等