如何解决在从 Amazon ECR 提取 Docker 映像时出现的“提取映像配置时出错:解析 HTTP 403 响应正文时出错”错误?

上次更新时间:2020 年 10 月 30 日

当我在 Amazon Elastic Container Service (Amazon ECS) 中从 Amazon Elastic Container Registry (Amazon ECR) 提取 Docker 映像时收到以下错误消息“提取映像配置时出错:解析 HTTP 403 响应正文时出错”。

简短描述

Amazon ECR 使用 Amazon Simple Storage Service (Amazon S3) 来存储映像层。当容器从 Amazon ECR 下载映像时,它们必须访问 Amazon ECR 来获取映像清单,然后访问 Amazon S3 才能下载映像层。以下是 Amazon S3 存储桶的 Amazon 资源名称 (ARN),其中包含每个 Docker 映像的层。

arn:aws:s3:::prod-region-starport-layer-bucket/*

如果您使用路由表中的 S3 网关终端节点,而其策略限制对 starport-layer-bucket 的访问,则您会收到以下错误消息:

error pulling image configuration: error parsing HTTP 403 response body: invalid character '<' looking for beginning of value: 
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>
SAMPLE-REQUEST-ID</RequestId><HostId>SAMPLE-HOST-ID</HostId></Error>"

默认情况下,当您在 Amazon S3 中创建网关终端节点时,您拥有对所有资源的完全访问权限。

如果您拥有允许访问特定资源的自定义策略,则必须将 starport-layer-bucket ARN 添加到 Amazon S3 策略中才能解决错误。 

解决方法

1.    打开 VPC 控制台

2.    从导航菜单中,选择终端节点

3.    从列表中选择 S3 终端节点。

4.    选择策略选项卡,然后选择编辑策略

5.    在策略的资源部分中,添加以下 ARN:

arn:aws:s3:::prod-region-starport-layer-bucket/*

注意:请确保 ARN 包含您的 AWS 区域。

作为参考,请考虑以下示例策略:

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "Access-to-specific-buckets",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::prod-us-east-1-starport-layer-bucket/*"
            ]
        }
    ]
}

这篇文章对您有帮助吗?


您是否需要账单或技术支持?