Amazon EC2에서 사용할 주소 범위 온보딩

Amazon EC2에서 사용할 주소 범위 온보딩 (Onboard your address range for use in Amazon EC2)

BYOIP(Bring Your Own IP) 온보딩 프로세스에는 필요에 따라 다음 작업이 포함돼요.

출처: 문서

본문

AWS에 공개 광고 가능한 주소 범위 프로비저닝 (Provision a publicly advertisable address range in AWS)

AWS와 함께 사용할 주소 범위를 프로비저닝할 때, 여러분이 주소 범위를 제어하고 Amazon이 이를 광고하도록 승인한다는 것을 확인하는 것이에요. 또한 서명된 승인 메시지를 통해 주소 범위를 제어함을 검증해요. 이 메시지는 RDAP 레코드를 X.509 인증서로 갱신할 때 사용한 자체 서명 X.509 키 쌍으로 서명돼요. AWS는 RIR에 제시하는 암호학적으로 서명된 승인 메시지를 요구해요. RIR은 RDAP에 추가한 인증서에 대해 서명을 인증하고 ROA에 대해 승인 세부 정보를 확인해요.

주소 범위 프로비저닝하기

  1. 메시지 작성(Compose message) 플레인텍스트 승인 메시지를 작성해요. 메시지의 형식은 다음과 같아요. 여기서 date는 메시지의 만료 날짜예요.
1|aws|<account>|<cidr>|YYYYMMDD|SHA256|RSAPSS

계정 번호, 주소 범위, 만료 날짜를 여러분의 값으로 바꿔 다음과 비슷한 메시지를 만들어요.

text_message="1|aws|0123456789AB|198.51.100.0/24|20211231|SHA256|RSAPSS"

이것은 비슷한 모양을 가진 ROA 메시지와 혼동하지 마세요. 2. 메시지 서명(Sign message) 이전에 만든 프라이빗 키로 플레인텍스트 메시지를 서명해요. 이 명령이 반환하는 서명은 다음 단계에서 사용해야 하는 긴 문자열이에요. 중요 이 명령을 복사해 붙여 넣을 것을 권장해요. 메시지 내용 외에는 값을 수정하거나 바꾸지 마세요.

signed_message=$( echo -n $text_message | openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -sign private-key.pem -keyform PEM | openssl base64 | tr -- '+=/' '-_~' | tr -d "\n")
  1. 주소 프로비저닝(Provision address) AWS CLI provision-byoip-cidr 명령으로 주소 범위를 프로비저닝해요. --cidr-authorization-context 옵션은 앞에서 만든 메시지와 서명 문자열을 사용해요. 중요 BYOIP 범위를 프로비저닝할 AWS 리전이 Configure the AWS CLI Default region name과 다르면 그 리전을 지정해야 해요.
aws ec2 provision-byoip-cidr --cidr address-range --cidr-authorization-context Message="$text_message",Signature="$signed_message" --region us-east-1

주소 범위 프로비저닝은 비동기 작업이므로 호출은 즉시 반환되지만, 상태가 pending-provision에서 provisioned로 바뀔 때까지 주소 범위를 사용할 수 없어요. 4. 진행 상황 모니터링(Monitor progress) 대부분의 프로비저닝은 2시간 이내에 완료되지만, 공개 광고 가능한 범위의 프로비저닝 프로세스는 최대 일주일이 걸릴 수 있어요. describe-byoip-cidrs 명령으로 진행 상황을 모니터링해요.

aws ec2 describe-byoip-cidrs --max-results 5 --region us-east-1

프로비저닝 중 문제가 발생해 상태가 failed-provision이 되면, 문제를 해결한 후 provision-byoip-cidr 명령을 다시 실행해야 해요.

공개 광고 가능하지 않은 IPv6 주소 범위 프로비저닝 (Provision an IPv6 address range that's not publicly advertisable)

기본적으로 주소 범위는 인터넷에 공개 광고 가능하도록 프로비저닝돼요. 공개 광고 가능하지 않을 IPv6 주소 범위를 프로비저닝할 수 있어요. 공개 광고 가능하지 않은 라우트의 경우 프로비저닝 프로세스는 일반적으로 몇 분 안에 완료돼요. 공개가 아닌 주소 범위의 IPv6 CIDR 블록을 VPC에 연결하면, 해당 IPv6 CIDR은 Direct Connect, AWS Site-to-Site VPN, Amazon VPC Transit Gateways 같은 IPv6를 지원하는 하이브리드 연결 옵션을 통해서만 접근할 수 있어요.

공개가 아닌 주소 범위를 프로비저닝하는 데는 ROA가 필요하지 않아요.

중요

  • 주소 범위가 공개 광고 가능한지는 프로비저닝 중에만 지정할 수 있어요. 나중에 광고 상태를 변경할 수 없어요.
  • Amazon VPC는 ULA(unique local address) CIDR을 지원하지 않아요. 모든 VPC는 고유한 IPv6 CIDR을 가져야 해요. 두 VPC는 같은 IPv6 CIDR 범위를 가질 수 없어요.

공개 광고 가능하지 않을 IPv6 주소 범위를 프로비저닝하려면 다음 provision-byoip-cidr 명령을 사용해요.

aws ec2 provision-byoip-cidr --cidr address-range --cidr-authorization-context Message="$text_message",Signature="$signed_message" --no-publicly-advertisable --region us-east-1

AWS를 통해 주소 범위 광고 (Advertise the address range through AWS)

주소 범위가 프로비저닝된 후에는 광고할 준비가 돼요. 프로비저닝한 정확한 주소 범위를 광고해야 해요. 프로비저닝된 주소 범위의 일부만 광고할 수 없어요.

공개 광고되지 않을 IPv6 주소 범위를 프로비저닝했다면 이 단계를 완료할 필요가 없어요.

AWS를 통해 광고하기 전에 다른 위치에서 주소 범위나 그 일부를 광고하는 것을 중지할 것을 권장해요. 다른 위치에서 IP 주소 범위나 그 일부를 계속 광고하면 AWS가 이를 안정적으로 지원하거나 문제를 해결할 수 없어요. 특히 주소 범위나 그 일부로의 트래픽이 우리 네트워크로 들어오리라는 것을 보장할 수 없어요.

다운타임을 최소화하기 위해, 광고 전에 AWS 리소스가 주소 풀의 주소를 사용하도록 구성한 다음, 현재 위치에서 광고를 중지하고 AWS를 통해 광고를 시작할 수 있어요. 주소 풀에서 탄력적 IP 주소 할당에 대한 자세한 내용은 탄력적 IP 주소 할당을 참고하세요.

  • 매번 다른 주소 범위를 지정하더라도 advertise-byoip-cidr 명령은 10초에 최대 한 번 실행할 수 있어요.
  • 매번 다른 주소 범위를 지정하더라도 withdraw-byoip-cidr 명령은 10초에 최대 한 번 실행할 수 있어요.

주소 범위를 광고하려면 다음 advertise-byoip-cidr 명령을 사용해요.

aws ec2 advertise-byoip-cidr --cidr address-range --region us-east-1

주소 범위 광고를 중지하려면 다음 withdraw-byoip-cidr 명령을 사용해요.

aws ec2 withdraw-byoip-cidr --cidr address-range --region us-east-1

참고 eu-central-1-ist-1 Local Zone에서는 광고와 철회가 비동기적이에요. 주소 범위는 작업이 완료되기 전에 pending-advertising 또는 pending-withdrawal 상태로 들어가요. 자세한 내용은 Local Zone 가용성을 참고하세요.

주소 범위 프로비저닝 해제 (Deprovision the address range)

AWS에서 주소 범위 사용을 중지하려면 먼저 탄력적 IP 주소를 해제하고 주소 풀에서 여전히 할당된 IPv6 CIDR 블록을 분리해요. 그런 다음 주소 범위 광고를 중지하고, 마지막으로 주소 범위의 프로비저닝을 해제해요.

주소 범위의 일부는 프로비저닝을 해제할 수 없어요. AWS에서 더 구체적인 주소 범위를 사용하려면 전체 주소 범위의 프로비저닝을 해제하고 더 구체적인 주소 범위를 프로비저닝해요.

(IPv4) 각 탄력적 IP 주소를 해제하려면 다음 release-address 명령을 사용해요.

aws ec2 release-address --allocation-id eipalloc-12345678abcabcabc --region us-east-1

(IPv6) IPv6 CIDR 블록을 분리하려면 다음 disassociate-vpc-cidr-block 명령을 사용해요.

aws ec2 disassociate-vpc-cidr-block --association-id vpc-cidr-assoc-12345abcd1234abc1 --region us-east-1

주소 범위 광고를 중지하려면 다음 withdraw-byoip-cidr 명령을 사용해요.

aws ec2 withdraw-byoip-cidr --cidr address-range --region us-east-1

주소 범위의 프로비저닝을 해제하려면 다음 deprovision-byoip-cidr 명령을 사용해요.

aws ec2 deprovision-byoip-cidr --cidr address-range --region us-east-1

주소 범위의 프로비저닝을 해제하는 데 최대 하루가 걸릴 수 있어요.

BYOIP 검증 (Validate your BYOIP)

  1. 자체 서명 x.509 키 쌍 검증 whois 명령으로 인증서가 업로드되어 유효한지 확인해요. ARIN의 경우 whois -h whois.arin.net r + 2001:0DB8:6172::/48로 주소 범위에 대한 RDAP 레코드를 조회해요. 명령 출력의 Public Comments 섹션에서 NetRange(네트워크 범위)를 확인해요. 인증서는 주소 범위에 대한 Public Comments 섹션에 추가되어야 해요. 인증서가 포함된 Public Comments를 검사하려면 다음 명령을 사용해요.
whois -h whois.arin.net r + 2001:0DB8:6172::/48 | grep Comments | grep BEGIN

이 명령은 키의 내용을 포함한 출력을 반환하며, 이는 다음과 비슷해야 해요.

Public Comments: -----BEGIN CERTIFICATE----- MIID1zCCAr+gAwIBAgIUBkRPNSLr... (인증서 내용) ... -----END CERTIFICATE-----
  1. ROA 객체 생성 검증 RIPEstat Data API를 사용해 ROA 객체가 성공적으로 생성되었는지 검증해요. 주소 범위를 Amazon ASN 16509와 14618, 그리고 현재 주소 범위를 광고하도록 승인된 ASN에 대해 테스트해야 해요. AWS GovCloud (US) 리전의 경우 ASN 8987에 대해 테스트해요. AWS European Sovereign Cloud의 경우 ASN 16509와 214101에 대해 테스트해요. 주소 범위로 여러 Amazon ASN의 ROA 객체를 검사하려면 다음 명령을 사용해요.
curl --location --request GET "https://stat.ripe.net/data/rpki-validation/data.json?resource=<ASN>&prefix=<CIDR>"

이 예시 출력에서 응답은 Amazon ASN 16509에 대해 "status": "valid" 결과를 가져요. 이는 주소 범위에 대한 ROA 객체가 성공적으로 생성되었음을 나타내요.

{
    "messages": [],
    "see_also": [],
    "version": "0.3",
    "data_call_name": "rpki-validation",
    "data_call_status": "supported",
    "cached": false,
    "data": {
        "validating_roas": [
            {
                "origin": "16509",
                "prefix": "2001:0DB8::/32",
                "max_length": 48,
                "validity": "valid"
            },
            {
                "origin": "14618",
                "prefix": "2001:0DB8::/32",
                "max_length": 48,
                "validity": "invalid_asn"
            },
            {
                "origin": "64496",
                "prefix": "2001:0DB8::/32",
                "max_length": 48,
                "validity": "invalid_asn"
            }
        ],
        "status": "valid",
        "validator": "routinator",
        "resource": "16509",
        "prefix": "2001:0DB8::/32"
    },
    "query_id": "20230224152430-81e6384e-21ba-4a86-852a-31850787105f",
    "process_time": 58,
    "server_id": "app116",
    "build_version": "live.2023.2.1.142",
    "status": "ok",
    "status_code": 200,
    "time": "2023-02-24T15:24:30.773654"
}

"unknown" 상태는 주소 범위에 대한 ROA 객체가 생성되지 않았음을 나타내요. "invalid_asn" 상태는 주소 범위에 대한 ROA 객체가 성공적으로 생성되지 않았음을 나타내요.

더 알아보기 (Learn more)