為什麼我在執行 Amazon Linux 1 或 Amazon Linux 2 的 EC2 執行個體上使用 yum 會收到錯誤訊息?

3 分的閱讀內容
0

為什麼我在執行 Amazon Linux 1 或 Amazon Linux 2 的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上使用 yum 會收到錯誤訊息?

簡短說明

使用 yum 命令的輸出訊息來確定發生了什麼錯誤。以下是常見的錯誤訊息:

  • 連線逾時 XXX 毫秒
  • HTTP 錯誤 403 - 禁止
  • 無法解析主機:xxxxxxxxx.$awsregion.$awsdomain
  • HTTP 錯誤 407 - 需要 Proxy 驗證
  • **5000 毫秒後解析逾時 **

解決方法

連線逾時 XXXX 毫秒

1.    確認連接到 EC2 執行個體的安全群組允許傳出 http/https 流量。

2.    確認與 EC2 執行個體子網路相關聯的網路 ACL 允許透過 NACL 傳出 http/https 流量。

下列範例顯示允許連接埠 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 儲存庫

  • 您的執行個體位於具有網際網路閘道的公有子網路中。如需詳細資訊,請參閱開啟網際網路存取
  • 您的執行個體位於具有 NAT 閘道的私有子網路中。如需詳細資訊,請參閱 NAT 閘道
  • 您的執行個體位於具有 NAT 執行個體的私有子網路中。如需詳細資訊,請參閱 NAT 執行個體
  • 您的執行個體位於具有 Amazon Simple Storage Service (Amazon S3) VPC 端點的公有或私有子網路中。如需詳細資訊,請參閱如何在執行 Amazon Linux 1 或 Amazon Linux 2 的 EC2 執行個體上不存取網際網路而更新 yum 或安裝套件?
  • 您的執行個體位於具有 Proxy 的私有子網路中。若要設定 yum 使用 Proxy 伺服器,請使用下列參數修改 /etc/yum.conf 檔案。在下列範例中,請以 Proxy 的正確值取代 proxy-portproxy-user-nameproxy-password
proxy=http://proxy-server-IP-address:proxy_port
proxy_username="proxy-user-name"
proxy_password="proxy-password"

如需詳細資訊,請參閱 fedoraproject.org 網站上的搭配 Proxy 伺服器使用 yum

4.    使用上述其中一個選項設定執行個體後,請執行下列 curl 命令,以確認執行個體是否可以存取儲存庫。在下列命令中,請以執行個體的區域取代 ** us-east-1**。

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 錯誤 403 - 禁止

1.    如果您在執行個體的 VPC 中使用 Amazon S3 VPC 端點,請確認附加的政策允許對下列資源執行 s3:GetObject API 呼叫:

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/*"

**注意:**以您的執行個體的區域取代上述範例中的 Region。

如需詳細資訊,請參閱 Amazon S3 的端點政策

2.    如果您使用 Proxy 存取 Amazon Linux 儲存庫,請確認子網域 .amazonaws.com 位於 Proxy 組態的允許清單中。

無法解析主機:xxxxxxxx.$awsregion.$awsdomain

1.    執行下列指令以驗證 **/etc/yum/vars ** 目錄是否定義自訂 yum 變數。該目錄必須包括變數 awsdomainawsregion。在下列範例指令中,以您的執行個體的區域取代 us-east-1

$ 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

針對 Amazon 提供的 DNS 伺服器 (169.254.169.253 IPv4 位址和 fd00:ec2::253 IPv6 位址) 的查詢將會成功。針對 Amazon 提供的 DNS 伺服器 (以 VPC IPv4 網路範圍加 2 為基礎之預留 IP 位址) 的查詢也會成功。IPv6 位址只能在 Nitro System 上建置的 EC2 執行個體上存取。

HTTP 錯誤 407 - 需要 Proxy 驗證

如果您的 Proxy 伺服器無法完成要求,就會發生此錯誤,因為 yum 沒有適合 Proxy 伺服器的正確驗證憑證。若要設定 yum 使用 Proxy,請使用下列參數修改 /etc/yum.conf 檔案:

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

5000 毫秒後解析逾時

執行下列命令,以確認 /etc/resolv.conf 檔案具有適用於您的 DNS 伺服器的正確 IP:

cat /etc/resolv.conf
nameserver YourDNSIP

您可以修改 yum 組態檔中的逾時值,以修改 5000 毫秒的逾時期。

若要使用 dig 檢查查詢時間,請執行下列命令:

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

AWS 官方
AWS 官方已更新 1 年前