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 서비스로 송신합니다.
    휘발성 TCP 포트에서 리전별 S3 서비스로부터 수신합니다. 휘발성 포트는 1024-65535입니다.
    리전별 S3 서비스는 S3 인터페이스 엔드포인트를 포함하는 서브넷의 CIDR입니다. 또는 S3 게이트웨이를 사용하는 경우 리전별 S3 서비스는 S3 서비스의 퍼블릭 IP CIDR입니다. 네트워크 ACL은 접두사 목록을 지원하지 않습니다. S3 CIDR을 네트워크 ACL에 추가하려면 0.0.0.0/0을 S3 CIDR로 사용합니다. ACL에 실제 S3 CIDR을 추가할 수도 있습니다. 그러나 S3 CIDR은 언제든 변경될 수 있습니다.

1.    Amazon EC2 콘솔을 열고 사용자의 인스턴스를 선택하세요.

2.    [네트워킹] 탭에서 VPC ID서브넷 ID를 기록해둡니다.

3.    Amazon VPC 콘솔을 열고 [Subnets(서브넷)]을 선택한 다음 사용자의 서브넷 ID를 선택합니다.

4.    [라우팅 테이블] 탭을 선택한 다음 라우팅 테이블 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(라우팅 테이블 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.comarn: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 인스턴스에 패키지를 설치하고 업데이트할 수 있습니다.