为什么在运行 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 EC2 实例上使用 yum 时收到错误?

3 分钟阅读
0

我在运行 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 Amazon Elastic Compute Cloud(Amazon EC2)实例上使用 yum 时收到错误。

简短描述

使用 yum 命令的输出消息来确定发生了什么错误。以下是常见的错误消息:

  • Connection timed out XXX milliseconds
  • HTTP Error 403 - Forbidden
  • Could not resolve host: xxxxxxxxx.$awsregion.$awsdomain
  • HTTP Error 407 - Proxy Authentication Required
  • Resolving timed out after 5000 milliseconds

解决方法

Connection timed out XXXX milliseconds

1.验证附加到您的 EC2 实例的安全组是否允许出站 HTTP 或 HTTPS 流量。

2.验证与您的 EC2 实例子网关联的网络 ACL 是否允许出站 HTTP 或 HTTPS 流量流经您的 NACL。

以下示例显示了允许端口 80 和 443 上的出站流量的自定义网络 ACL:

Inbound rules
Rule#    Type                    Protocol    Port Range    Source        Allow/Deny
100      Custom TCP Rule         TCP (6)     1024-65535    0.0.0.0/0     ALLOW
101      Custom TCP Rule         TCP (6)     1024-65535    ::/0          ALLOW
*        ALL Traffic             ALL         ALL           ::/0          DENY
*        ALL Traffic             ALL         ALL           0.0.0.0/0     DENY
Outbound rules
Rule #    Type                   Protocol    Port Range    Source       Allow/Deny
100       HTTP (80)              TCP (6)     80            0.0.0.0/0    ALLOW
101       HTTPS (443)            TCP (6)     443           0.0.0.0/0    ALLOW
102       HTTP (80)              TCP (6)     80            ::/0         ALLOW
103       HTTPS (443)            TCP (6)     443           ::/0         ALLOW
*         ALL Traffic            ALL         ALL           ::/0         DENY
*         ALL Traffic            ALL         ALL           0.0.0.0/0    DENY

3.使用以下选项之一验证您的 EC2 实例是否可以访问 Amazon Linux 存储库:

proxy=http://proxy-server-IP-address:proxy_port
proxy_username="proxy-user-name"
proxy_password="proxy-password"

有关详细信息,请参阅 fedoraproject.org 网站上的将 yum 与代理服务器结合使用

4.使用上述选项之一配置您的实例后,运行以下 curl 命令以确认该实例可以访问存储库。在以下命令中,将 us-east-1 替换为您的实例的 AWS 区域。

Amazon Linux 2023

curl -I al2023-repos-us-east-1-de612dc2.s3.dualstack.us-east-1.amazonaws.com

Amazon Linux 1

curl -I repo.us-east-1.amazonaws.com

Amazon Linux 2

curl -I amazonlinux.us-east-1.amazonaws.com

curl 命令已预先安装在所有亚马逊云机器镜像(AMI)上,但是如果没有凭证,则无法访问 Amazon Linux 存储库。curl 命令无法获取 yum 存储库的凭证。因此,您会收到一条类似于以下内容的访问被拒绝错误消息。curl 命令用于测试超时问题是否仍在发生。错误消息显示可以访问网络并且不再发生超时问题:

$ curl -I amazonlinux.us-east-1.amazonaws.com
HTTP/1.1 403 Forbidden
x-amz-bucket-region: us-east-1
x-amz-request-id: xxxxxxxx
x-amz-id-2: xxxxxxxxxxxxx=
Content-Type: application/xml
Date: Thu, 17 Nov 2022 16:59:59 GMT
Server: AmazonS3

要安装 telnet 等软件,请运行以下命令:

sudo yum install telnet

HTTP Error 403 - Forbidden

1.对于您的实例 VPC 中的 Amazon S3 VPC 端点,请验证附加的策略是否允许对以下资源进行 s3:GetObject API 调用。在以下示例中,请将 region 替换为您的实例的 AWS 区域。

Amazon Linux 2023:

“arn:aws:s3:::al2023-repos-us-east-1-de612dc2/*”

Amazon Linux 1:

“arn:aws:s3:::packages.region.amazonaws.com/*”

“arn:aws:s3:::repo.region.amazonaws.com/*”

Amazon Linux 2:

“arn:aws:s3:::amazonlinux.region.amazonaws.com/*”

“arn:aws:s3:::amazonlinux-2-repos-region/*”

有关详细信息,请参阅 Amazon S3 的网关端点

2.如果您使用代理访问 Amazon Linux 存储库,请验证 .amazonaws.com 子域是否在代理配置的白名单上。

Could not resolve host: xxxxxxxx.$awsregion.$awsdomain

1.运行以下命令以验证 /etc/yum/vars 目录是否定义了自定义 yum 变量。该目录必须包含变量 awsdomainawsregion。在以下示例命令中,请将 us-east-1 替换为您的实例的 AWS 区域。

$ cat /etc/yum/vars/awsregion
us-east-1

$ cat /etc/yum/vars/awsdomain
amazonaws.com

2.运行以下命令以验证您的实例的 DNS 解析。该实例必须解析 Amazon Linux 存储库的域名。

$ dig amazonlinux.us-east-1.amazonaws.com

$ dig repo.us-east-1.amazonaws.com

$ dig al2023-repos-us-east-1-de612dc2

通过 169.254.169.253 IPv4 地址和 fd00:ec2:: 253 IPv6 地址向 Amazon 提供的 DNS 服务器发出的查询成功。通过 VPC IPv4 网络范围基址 + 2 的预留 IP 地址向 Amazon 提供的 DNS 服务器发出的查询也成功。IPv6 地址只能在基于 Nitro 的 EC2 实例上访问。

HTTP Error 407 - Proxy Authentication Required

如果你的代理由于 yum 或 dnf 没有代理服务器的正确身份验证凭证而无法完成请求,则会发生 HTTP Error 407 错误。要将 yum 或 dnf 配置为使用代理,请使用以下参数修改 /etc/yum.conf 文件:

Amazon Linux 1 和 Amazon Linux 2:/etc/yum.conf
Amazon Linux 2023:/etc/dnf/dnf.conf

proxy=http://proxy-server-IP-address:proxy_port
proxy_username=proxy-user-name
proxy_password=proxy-password

Resolving timed out after 5000 milliseconds

运行以下命令以验证 /etc/resolv.conf 文件是否具有适用于您的 DNS 服务器的正确 IP:

cat /etc/resolv.conf
nameserver YourDNSIP

您可以通过修改 yum 配置文件中的 timeout 值来修改 5000 毫秒超时时间。有关详细信息,请参阅 linux.die.net 网站上的 yum.conf

要使用 dig 查看查询时间,请运行以下命令:

$ dig repo.us-east-1.amazonaws.com | grep time

对于 Amazon Linux 2023,请通过更改 /etc/yum.repos.d/amazonlinux.re 中的 metadata_expire 值来修改超时时间。

AWS 官方
AWS 官方已更新 10 个月前