Elastic Beanstalk部署停留在更新配置设置上

Jos*_*ver 2 amazon-web-services amazon-elastic-beanstalk

我一直在测试我的持续部署设置,试图获得一组最小的IAM权限,这将允许我的CI IAM组部署到我的"staging"Elastic Beanstalk环境.

在我的最新测试中,我的部署陷入困境.控制台中的最后一个事件是:

Updating environment staging's configuration settings.
Run Code Online (Sandbox Code Playgroud)

幸运的是,部署将在30分钟后超时,因此可以再次部署环境.

这似乎是一个权限问题,因为如果我授予s3:*所有资源,则部署可以正常工作.似乎在调用UpdateEnvironment时,Elastic Beanstalk对S3做了一些事情,但我无法弄清楚是什么.

我尝试了以下策略来授予EB对其资源桶的完全访问权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::elasticbeanstalk-REGION-ACCOUNT/resources/_runtime/_embedded_extensions/APP",
                "arn:aws:s3:::elasticbeanstalk-REGION-ACCOUNT/resources/_runtime/_embedded_extensions/APP/*",
                "arn:aws:s3:::elasticbeanstalk-REGION-ACCOUNT/resources/environments/ENV_ID",
                "arn:aws:s3:::elasticbeanstalk-REGION-ACCOUNT/resources/environments/ENV_ID/*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

其中REGION,ACCOUNT,APP,和ENV_ID是我的AWS区域,账号,应用程序名称和环境ID,分别.

有没有人知道S3动作和资源EB试图访问哪些?

小智 7

已经在您的博客上分享了这一点,但这可能会有更广泛的受众群体,所以在这里:

接下来,ElastiBeanstalk团队为我提供了有关S3权限的以下答案:

"[...]看到下面的要求,稍微锁定的版本会起作用吗?我已经在这个案例中附加了一个策略,该策略将使用elasticbeanstalk从桶中授予s3:GetObject.这主要是为了允许访问所有elasticbeanstalk存储桶,包括我们拥有的那些.你唯一需要做的就是使用GetObject,所以这应该足以完成你需要的一切."

因此,似乎ElasticBeanstalk正在从任何人的领域访问存储桶以便正常工作(这有点糟糕,但这就是它的方式).

由此,以下策略将足以使S3与以下内容一起使用:

{
  "Action": "s3:*",
  "Resource": [
    "arn:aws:s3:::elasticbeanstalk-<region>-<account_id>",
    "arn:aws:s3:::elasticbeanstalk-<region>-<account_id>/",
    "arn:aws:s3:::elasticbeanstalk-<region>-<account_id>/*"
  ],
  "Effect": "Allow"
},
{
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::elasticbeanstalk*",
  "Effect": "Allow"
}
Run Code Online (Sandbox Code Playgroud)

显然,您需要将其包含在IAM理解的适当策略声明中.您之前关于IAM策略的所有假设都已经证明是正确的,所以我猜这应该不是问题.