通过Google搜索,我找到了this tutorial on accessing S3 from EC2 instance without credential file。我按照指示操作,得到了所需的实例。 aws web控制台页面看起来像
但是,我不希望每次都使用Web控制台手动执行此操作。如何使用boto3创建此类EC2实例?
我试过
s = boto3.Session(profile_name='dev', region_name='us-east-1')
ec2 = s.resource('ec2')
rc = ec2.create_instances(ImageId='ami-0e297018',
InstanceType='t2.nano',
MinCount=1,
MaxCount=1,
KeyName='my-key',
IamInstanceProfile={'Name': 'harness-worker'},
)
其中harness-worker
是可以访问S3的IAM角色,但没有别的。
它也用于aws web控制台教程的第一种方法。
然后我说错误
ClientError:调用时发生错误(UnauthorizedOperation) RunInstances操作:您无权执行此操作 操作
我做错了什么?
dev
个人资料包含AmazonEC2FullAccess。如果没有行IamInstanceProfile={'Name': 'harness-worker'},
,create_instances
就可以创建实例。
答案 0 :(得分:3)
要将IAMProfile分配给实例,AmazonEC2FullAccess
是不够的。此外,您还需要以下权限才能将角色传递给实例。
请参阅:Granting an IAM User Permission to Pass an IAM Role to an Instance
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "*"
}
首先,您可以对dev
个人资料提供完整的IAM访问权限,并查看其是否有效。然后删除完整的IAM访问权限并仅提供iam:PassRole
并重试。
答案 1 :(得分:0)
这与您尝试分配新EC2实例的角色无关。您运行的Python脚本没有RunInstances权限。