AWS Codedploy代理访问从EC2实例拒绝到S3

时间:2017-10-01 07:32:45

标签: amazon-web-services amazon-s3 amazon-ec2 aws-code-deploy

我已经设置了Codedeploy代理,但是当我运行它时,我收到错误:

Error: HEALT_CONSTRAINTS

进一步说,这是来自EC2实例的代码部署日志中的条目:

InstanceAgent::Plugins::CodeDeployPlugin::CommandPoller: Cannot reach InstanceService: Aws::S3::Errors::AccessDenied - Access Denied

我从存储桶中做了一个简单的wget,结果是:

Connecting to s3-us-west-2.amazonaws.com (s3-us-west-2.amazonaws.com)|xxxxxxxxx|:443... connected.
HTTP request sent, awaiting response... 403 Forbidden

相反,如果我使用AWS cli,我可以正确地访问S3存储桶。

EC2实例位于VPC上,它具有与S3完全权限相关联的角色,入站和出站的防火墙设置似乎正确。因此,这显然与从https访问权限有关。

问题:

  1. 代码部署代理运行在哪个凭据?
  2. 必须在S3存储桶上设置哪些权限或角色?

2 个答案:

答案 0 :(得分:0)

CodeDeploy使用"服务角色"访问AWS资源。在CodeDeploy的AWS控制台中,查找"服务角色"。在应用程序设置中分配您为CodeDeploy创建的IAM角色。

如果尚未为CodeDeploy创建IAM角色,请执行此操作,然后将其分配给CodeDeploy应用程序。

答案 1 :(得分:0)

从S3提取时将使用EC2实例的凭据(实例角色)。

要明确的是,CodeDeploy所需的服务角色不需要S3权限。 ServiceRole CodeDeploy需要允许CodeDeploy调用AutoScaling&用于描述实例的EC2 API,以便CodeDeploy知道如何部署它们。

话虽如此,对于S3的AccessDenied问题,您需要检查两件事

  • EC2实例具有s3:Get*s3:List*(或更具体)权限的角色
  • 您要部署的S3存储桶附加了一个策略,允许EC2实例角色获取该对象。

权限文档:http://docs.aws.amazon.com/codedeploy/latest/userguide/instances-ec2-configure.html#instances-ec2-configure-2-verify-instance-profile-permissions