如何使用boto3为s3提供ec2实例访问权限

时间:2017-08-24 03:07:47

标签: amazon-web-services amazon-s3 amazon-ec2 boto3 amazon-iam

通过Google搜索,我找到了this tutorial on accessing S3 from EC2 instance without credential file。我按照指示操​​作,得到了所需的实例。 aws web控制台页面看起来像 enter image description here

但是,我不希望每次都使用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就可以创建实例。

2 个答案:

答案 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权限。