我已经设置了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访问权限有关。
问题:
答案 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问题,您需要检查两件事
s3:Get*
和s3:List*
(或更具体)权限的角色