Amazon Linux 1 または Amazon Linux 2 を実行している EC2 インスタンスで、インターネットにアクセスせずに yum を更新したり、パッケージをインストールしたりするにはどうすればよいですか?

最終更新日: 2021年6月2日

Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで Amazon Linux 1 または Amazon Linux 2 を実行しています。インスタンスがインターネットにアクセスできない場合、yum を更新したり、パッケージをインストールしたりするにはどうすればよいですか?

簡単な説明

Amazon Linux リポジトリは、Amazon Simple Storage Service (Amazon S3) バケットでホストされます。インターネット接続なしでインスタンスにパッケージを更新したりインストールしたりするには、S3 Amazon Virtual Private Cloud (Amazon VPC) ゲートウェイエンドポイントを作成します。S3 VPC ゲートウェイエンドポイントに、リポジトリバケットへのアクセスを許可するポリシーを含めます。次に、VPC エンドポイントをインスタンスサブネットのルーティングテーブルに関連付けます。

注意: EPEL などのサードパーティのリポジトリを有効にするには、EC2 インスタンスが、次のいずれかを使用してインターネットにアクセスできる必要があります。

解決方法

注意: このソリューションを使用するときは、次の点に注意してください。

  • EC2 インスタンスにアタッチされたセキュリティグループで、アウトバウンド http トラフィックが許可されていることを確認します。
  • S3 VPC エンドポイントにアタッチされたセキュリティグループで、EC2 インスタンスのサブネットからのインバウンド http トラフィックが許可されていることを確認します。
  • EC2 インスタンスのサブネットに関連付けられているネットワーク ACL で、以下が許可されていることを確認します。
    ポート 80 (http) および 443 (HTTPS) でのリージョナル S3 サービスへの出力。
    リージョナル S3 サービスから一時的 TCP ポートへの入力。エフェメラルポートは 1024-65535 です。
    リージョナル S3 サービスは、S3 インターフェイスエンドポイントを含むサブネットの CIDR です。または、S3 ゲートウェイを使用している場合、リージョナル S3 サービスは S3 サービスのパブリック IP CIDR です。ネットワーク ACL はプレフィクスリストをサポートしません。ネットワーク ACL に S3 CIDR を追加するには、S3 CIDR として 0.0.0.0/0 を使用します。また、実際の S3 CIDR を ACL に追加することもできます。ただし、S3 CIDR はいつでも変更できることに注意してください。

1.    Amazon EC2 コンソールを開いてからインスタンスを選択します。

2.    [Networking] タブで、VPC IDサブネット ID を書き留めます。

3.    Amazon VPC コンソールを開き、[Subnets] を選択し、[Subnet ID] を選択します。

4.    [Route Table] タブを選択し、Route Table ID を書き留めます。

5.    [Endpoints] を選択し、[Create Endpoint] を選択します。

6.    次の情報を使用してエンドポイントを作成します。

[Service Name] で [com.amazonaws.[region].s3] を選択します。リソースがあるリージョンを選択します。たとえば、com.amazonaws.us-east-1.s3 などです。リージョンコードの完全なリストについては、利用できるリージョンを参照してください。

[VPC] で、自分のインスタンスの VPC ID を選択します。

[Configure route tables] で、インスタンスの [Route Table ID] を選択します。

7.    [Policy] で [Full Access] または [Custom] を選択します。

[Full Access] を選択した場合、エンドポイントポリシーで Amazon S3 へのフルアクセスを許可します。

[Custom] を選択した場合は、Amazon Linux リポジトリバケットで API 呼び出し s3: GetObject を許可する必要があります。

Amazon Linux 2

S3 バケット arn:aws:s3:::amazonlinux.region.amazonaws.com および arn:aws:s3:::amazonlinux-2-repos-region/* はレポジトリをホストします。次に、s3:GetObject API 呼び出しを許可するポリシーの例を示します。region を実際の AWS リージョンに置き換えます。

{
    "Statement": [
        {
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::amazonlinux.region.amazonaws.com/*",
                "arn:aws:s3:::amazonlinux-2-repos-region/*"
            ]
        }
    ]
}

Amazon Linux 1

S3 バケット arn:aws:s3:::packages.region.amazonaws.comarn:aws:s3:::repo.region.amazonaws.com はリポジトリをホストします。次に、s3:GetObject API 呼び出しアクセスを許可するポリシーの例を示します。region を実際の AWS リージョンに置き換えます。

{
    "Statement": [
        {
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::packages.region.amazonaws.com/*",
                "arn:aws:s3:::repo.region.amazonaws.com/*"
            ]
        }
    ]
}

注意: リソース ARN のリージョンを実際のインスタンスのリージョンに置き換えます。詳細については、「Amazon S3 のエンドポイントポリシー」を参照してください。

8.    [Create endpoint] を選択します。

S3 VPC エンドポイントを作成すると、Amazon Linux インスタンスにパッケージをインストールして更新できます。