2017-08-24 46 views
1

通过谷歌搜索,我发现this tutorial on accessing S3 from EC2 instance without credential file。我遵循它的指示并获得了期望的实例。 aws web控制台页面看起来像 enter image description here如何给ec2实例访问s3使用boto3

但是,我不想每次都使用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: An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation.

难道我显然是错误的?

dev配置文件有AmazonEC2FullAccess。如果没有行IamInstanceProfile={'Name': 'harness-worker'},create_instances能够创建实例。

回答

2

要将IAMP分配给实例,AmazonEC2FullAccess是不够的。另外,您需要以下特权才能将角色传递给实例。

参见:Granting an IAM User Permission to Pass an IAM Role to an Instance

{ 
    "Effect": "Allow", 
    "Action": "iam:PassRole", 
    "Resource": "*" 
} 

首先,你可以充分IAM访问您的个人资料dev,看看它的工作原理。然后删除完整的IAM访问权限,只给出iam:PassRole并重试。

0

这与您尝试分配新EC2实例的角色无关。您正在运行的Python脚本没有RunInstances权限。

+0

对不起,我是boto3和aws的新手。你能解释一下如何解决它?谢谢。 – nos

+0

如果您的python脚本正在使用与AWS API接口的IAM凭据,则您需要进行一些排序。这些凭证没有权限创建新的EC2实例。这不是你的代码的问题。这是您正在使用的IAM帐户或个人资料的问题。 –

+0

开发人员配置文件具有AmazonEC2FullAccess。没有行IamInstanceProfile = {'Name':'harness-worker'},create_instances能够创建实例。 – nos