はじめに
こんにちは, IT基盤部ネットワークグループのnagiです.
BYOIPとはBring Your Own IP Addressの略で, 自社保有のグローバルIPアドレスをAWS上に持ち込むことができるサービスです. これまでは, RDAPを用いた所有者検証が可能なインターネットレジストリ1のみが, BYOIPに対応していました. しかし, 新たな所有者検証手法としてDNS検証が先日リリースされました2. これによりレジストリの制限がなくなり, DeNAが割り当てを受けているJPNICのアドレスでもBYOIPを利用可能になりました.
BYOIPを利用する利点の1つとして, グローバルIPv4アドレスを無料で利用できる点が挙げられます. 2024年2月, 料金改定によりAWSから割り当てられるグローバルIPv4アドレスが有料になりました3. 根本対応としては, IPv6化やNATゲートウェイの利用が望ましいですが, 一部のサービスでは工数の面等から対応が難しいものもありました. そのような状況下で, BYOIPのレジストリ制限撤廃は嬉しいアップデートでした.
この記事では, BYOIPの利用方法と運用例について紹介します.
BYOIP利用前の下準備
JPNIC割り当てのアドレスでBYOIPを利用するために, 2点の下準備を実施します.
- ROAの更新
- JPIRRのRouteオブジェクト更新
ROAは, AS番号とIPアドレスを紐づけるための署名付きデータです. IPアドレスが, 認可されたAS番号から正しく広報されているかを検証するために利用されます. BYOIPを利用すると, 経路広報元ASがAWS(AS16509)になるので, AS16509を登録する必要があります. ROAは, JPNICのRPKIシステムから作成できます4 (詳しくはリンク先を参照してください).
また同様にJPIRRにも, AWSのAS番号とアドレスを紐づけたRouteオブジェクトを作成します. Routeオブジェクトは, 実際に経路広報されるアドレスの広報元AS番号を記録するためのオブジェクトです. Routeオブジェクトの更新対応は, メールで実施します5(こちらも詳細は割愛します). 更新を怠ると, JPNICから心臓に悪いハイジャックアラートが届いてしまいます. 6
実際に届いたアラートメール↓
ご担当者様
以下の通り、経路ハイジャックが疑われる状態を検知しました。
----------------------------------------------------------
検知日時 : Wed 12 Jun 2024 10:50:23 +0900 (JST)
Routeオブジェクト : 27.131.8.0/24
RouteオブジェクトのOrigin: AS38636
検知したPrefix : 27.131.8.0/24
検知したOrigin : AS16509
ROAに関する情報 : 2024-06-11T13:26:47Z 14618 27.131.8.0/24
2024-06-11T13:26:52Z 16509 27.131.8.0/24
アドレスのプロビジョニング
下準備が完了したら, 実際にアドレスをAWSに登録していきます. まずアドレスを登録するための土台となるIPAMリソースを作成します. IPAM7は, Amazon VPC IP Address Managerというサービスで, 名前の通りアドレス管理のためのリソースです. 一般的にはVPC内のプライベートアドレスの追跡に使われますが, 今回はBYOIPアドレスの登録に利用します. またアドレスの登録は, 実際にアドレスを利用するアカウントではなく, 管理アカウントを別で用意し実施します. これはアドレスの管理を一元化し, アカウント間のアドレスの移動を容易にするためです.
IPAMには, Free Tier(無料)とAdvanced Tier(有料)の2つのプランがあります. BYOIPを利用するだけならばFree Tierで問題はありませんが, 前述のアドレス管理一元化のためにはAdvanced Tierを選択する必要があります. Advanced Tierは, アクティブなアドレス(使用中のアドレス)1つにつき料金が発生します(AWSプールのIPv4料金と比較すると微々たるものですが, できればFree Tierでアドレス配布ができるようになると嬉しいですね). 作成後は, DNS検証に用いる検証トークンを生成しておきます.
IPAMの作成後, IPAM Poolを作成します. IPAM Poolは, IPアドレスの登録先リソースになります. IPAM Pool作成時の注意点として, IPAMスコープはパブリックを選択すること, EC2(EIP/VPC)を有効サービスにしておく必要があります. IPAMスコープは, IPAM作成時に自動生成されています.
次にIPAM Poolにアドレスを追加します. CIDRのプロビジョンに進み, DNS TXT(認証方法)を選択して, プロビジョニングを実行します.
プロビジョニングを完了するために, 対象アドレスの逆引きゾーンに検証トークンをTXTレコードとして登録します. 正常にレコードが追加できていれば, 自動的にプロビジョニングが完了します.
dig -t txt TOKEN_ID.8.131.27.in-addr.arpa
#
#;; ANSWER SECTION:
#TOKEN_ID.8.131.27.in-addr.arpa. 300 IN TXT "TOKEN_VALUE"
最後にアドバタイズをすることで, 実際にアドレスがAWSからインターネットに広報されるようになります.
組織内へのアドレス配布
さて登録が完了したアドレスを, 利用アカウントに配布していきます. AWS OrganizationsとIPAM機能を連携し, 組織内のアカウントをIPAMアカウントして委任することで, IPAM Poolをメンバーアカウントに配布できます8. 配布にはAWS Resource Access Manager (RAM)を利用します.
IPAMアカウントの委任は, IPAMコンソール画面の組織設定から実施します.
委任が完了したらIPAM Poolを分割します. IPAM Poolは, 親ソースとしてIPAM Poolを指定でき, 階層構造を作ることができます.
子Poolの作成が完了したら, RAMを設定し対象アカウントに対してIPAM Poolリソースを共有して完了です.
Elastic IPへのアドレス付与
共有されたIPAM Poolのアドレスを利用するには, 利用アカウントでアドレスをPublic IPv4 Poolに紐づけする必要があります. Public IPv4 Poolは, コンソール画面から作成できないためCLIで作成をします.
aws ec2 create-public-ipv4-pool --region ap-northeast-1
#{
# "PoolId": "ipv4pool-ec2-hogehoge"
#}
作成後, アドレスをPublic IPv4 Poolに紐づけします.
aws ec2 provision-public-ipv4-pool-cidr --region ap-northeast-1 --ipam-pool-id ipam-pool-fugafuga --pool-id ipv4pool-ec2-hogehoge --netmask-length 27
#{
# "PoolId": "ipv4pool-ec2-hogehoge",
# "PoolAddressRange": {
# "FirstAddress": "27.131.8.0",
# "LastAddress": "27.131.8.31",
# "AddressCount": 32,
# "AvailableAddressCount": 32
# }
#}
これでようやくBYOIPアドレスを, Elastic IPとして利用できるようになります(IPv6の場合はVPCに直接紐づけができます). BYOIPであっても通常のElastic IPであることは変わらないのでEC2インスタンス等に問題なくアタッチできます.
まとめ
簡易的ではありましたが, レジストリ制限がなくなったBYOIPの利用方法について紹介させていただきました. アドレス割り当てを受けている事業者様に限定されてしまいますが, 本記事がご参考になれば幸いです.
-
IPアドレス等のインターネット資源を管理する組織 (ARIN, APNIC, JPNICなどがある) ↩︎
-
Amazon VPC IPAM が任意のインターネットレジストリに登録された IP の BYOIP のサポートを開始 - AWS ↩︎
-
新着情報 – パブリック IPv4 アドレスの利用に対する新しい料金体系を発表 / Amazon VPC IP Address Manager が Public IP Insights の提供を開始 | Amazon Web Services ブログ ↩︎
-
IPAM を AWS Organizations 内のアカウントと統合する - Amazon Virtual Private Cloud ↩︎
最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。