我有 s3 端点悲伤。当我的实例初始化时,它们无法安装 docker。细节:
我的 ASG 实例位于带有 pub 和私有子网的 VPC 中。适当的路由和 EIP/NAT 都被缝合了。私有子网中的实例有出站 0.0.0.0/0 路由到各自公有子网中的 NAT。公共子网的 NACL 允许 Internet 流量进出,私有子网周围的 NACL 允许来自公共子网的流量进出、出入 Internet 的流量(以及来自 s3 cidr 的流量进出)。我希望它完全锁定。
- 我在我的 VPC 中启用了 DNS 和主机名
- 我了解 NACL 是无状态的,并且已为临时端口范围上的 s3 amazon IP cidr 块启用了 IN 和 OUTBOUND 规则(是的,我还启用了 pub 和私有子网之间的流量)
- 是的,我已经在我的私有路由表中检查了为我的 s3 端点配置的路由
- 是的,我确定这是 s3 端点导致我悲伤,而不是另一个错误 -> 当我删除它并打开我的 NACL 时,我可以 yum 更新并安装 docker(如预期的那样)我不是在寻找需要打开我的建议的建议NACL,我正在使用 VPC 网关端点,因为我想将事物锁定在私有子网中。我提到这一点是因为类似的讨论似乎在说“我在所有端口上打开了 0.0.0.0/0,现在 x 可以工作”
- 我应该烤一个安装了 docker 的 AMI 吗?如果我不能解决这个问题,我会这样做。我真的很想建立我的网络,所以一切都很好地锁定了,感觉使用端点应该很简单。在很大程度上,这是一个网络练习,所以我宁愿不这样做,因为它避免了解决和理解问题。
- 我知道我的其他 VPC 端点运行良好 -> 自动缩放服务接口端点正在执行(我可以看到它根据策略缩减实例),SSM 接口端点允许我使用会话管理器,并且 ECR 端点正在运行结合 s3 网关端点(需要 s3 网关端点,因为图像层在 s3 中)-> 我知道这是可行的,因为如果我打开 NACLS 并删除我的 s3 端点并安装 docker,然后再次锁定所有内容,带回我的 s3 gatewayendpoint 我可以成功提取我的 ECR 图像。所以 s3 网关端点可以很好地访问 ecr 映像层,但不能访问 amazon-linux-extra 存储库。
- 附加到实例的 SG 不是问题(实例具有默认出站规则)
- 我已经尝试向我的 s3 端点添加越来越慷慨的策略,正如我在这个 7 岁的线程中看到的那样,并认为这必须解决问题(是的,我正确地替换了我的区域)
- 我强烈认为解决方案在于该线程中讨论的 s3 网关策略,但是我越来越绝望的策略几乎没有运气。
另一个 s3 与分辨率的斗争:
我努力了:
S3Endpoint:
Type: 'AWS::EC2::VPCEndpoint'
Properties:
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal: '*'
Action:
- 's3:GetObject'
Resource:
- 'arn:aws:s3:::prod-ap-southeast-2-starport-layer-bucket/*'
- 'arn:aws:s3:::packages.*.amazonaws.com/*'
- 'arn:aws:s3:::repo.*.amazonaws.com/*'
- 'arn:aws:s3:::amazonlinux-2-repos-ap-southeast-2.s3.ap-southeast-2.amazonaws.com/*'
- 'arn:aws:s3:::amazonlinux.*.amazonaws.com/*'
- 'arn:aws:s3:::*.amazonaws.com'
- 'arn:aws:s3:::*.amazonaws.com/*'
- 'arn:aws:s3:::*.ap-southeast-2.amazonaws.com/*'
- 'arn:aws:s3:::*.ap-southeast-2.amazonaws.com/'
- 'arn:aws:s3:::*repos.ap-southeast-2-.amazonaws.com'
- 'arn:aws:s3:::*repos.ap-southeast-2.amazonaws.com/*'
- 'arn:aws:s3:::repo.ap-southeast-2-.amazonaws.com'
- 'arn:aws:s3:::repo.ap-southeast-2.amazonaws.com/*'
RouteTableIds:
- !Ref PrivateRouteTableA
- !Ref PrivateRouteTableB
ServiceName: !Sub 'com.amazonaws.${AWS::Region}.s3'
VpcId: !Ref BasicVpc
VpcEndpointType: Gateway
(如您所见,非常绝望)第一个规则是 ECR 接口端点从 s3 拉图像层所必需的,所有其他规则都是尝试到达 amazon-linux-extras 存储库。
以下是我通过使用 SSM 端点连接会话管理器重新创建的初始化时发生的行为:
https://aws.amazon.com/premiumsupport/knowledge-center/connect-s3-vpc-endpoint/
我不能 yum 安装或更新
root@ip-10-0-3-120 bin]# yum install docker -y
加载的插件:extras_suggestions、langpacks、priorities、update-motd 无法检索镜像列表https://amazonlinux-2-repos-ap-southeast-2.s3.ap-southeast-2.amazonaws.com/2/core/latest/ x86_64/mirror.list错误为 14:HTTPS 错误 403 - 禁止
配置的存储库之一失败(未知),并且 yum 没有足够的缓存数据来继续。在这一点上,yum 能做的唯一安全的事情就是失败。有几种方法可以“解决”这个问题:
1. Contact the upstream for the repository and get them to fix the problem.
2. Reconfigure the baseurl/etc. for the repository, to point to a working
upstream. This is most often useful if you are using a newer
distribution release than is supported by the repository (and the
packages for the previous distribution release still work).
3. Run the command with the repository temporarily disabled
yum --disablerepo=<repoid> ...
4. Disable the repository permanently, so yum won't use it by default. Yum
will then just ignore the repository until you permanently enable it
again or use --enablerepo for temporary usage:
yum-config-manager --disable <repoid>
or
subscription-manager repos --disable=<repoid>
5. Configure the failing repository to be skipped, if it is unavailable.
Note that yum will try to contact the repo. when it runs most commands,
so will have to try and fail each time (and thus. yum will be be much
slower). If it is a very temporary problem though, this is often a nice
compromise:
yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true
无法为 repo 找到有效的 baseurl:amzn2-core/2/x86_64
并且不能:
amazon-linux-extras install docker
Catalog is not reachable. Try again later.
目录https://amazonlinux-2-repos-ap-southeast-2.s3.ap-southeast-2.amazonaws.com/2/extras-catalog-x86_64-v2.json , https://amazonlinux-2- repos-ap-southeast-2.s3.ap-southeast-2.amazonaws.com/2/extras-catalog-x86_64.json 回溯(最后一次调用):文件“/usr/lib/python2.7/site-packages/amazon_linux_extras/software_catalog.py”,第 131 行,在 fetch_new_catalog 请求 = urlopen(url) 文件“/usr/lib64/python2. 7/urllib2.py",第 154 行,在 urlopen 返回 opener.open(url,数据,超时) 文件 "/usr/lib64/python2.7/urllib2.py",第 435 行,打开响应 = meth(req,响应)文件“/usr/lib64/python2.7/urllib2.py”,第 548 行,在 http_response 'http',请求,响应,代码,味精,hdrs)文件“/usr/lib64/python2.7/urllib2. py”,第 473 行,错误返回 self._call_chain(*args) 文件“/usr/lib64/python2.7/urllib2.py”,第 407 行,在 _call_chain 结果 = func(*args) 文件“/usr/lib64 /python2.7/urllib2.py”,第 556 行,在 http_error_default 中引发 HTTPError(req.get_full_url(), code, msg, hdrs,fp)HTTPError:HTTP错误403:禁止
我错过了什么陷阱?我很困在这里。我熟悉基本的 VPC 网络、NACL 和 VPC 端点(我至少使用过的那些),我已经完成了故障排除(尽管我已经按照概述进行了所有设置)。
我觉得 s3 政策是这里的问题或镜像列表。非常感谢您阅读所有内容!想法?