Upgrade to Pro — share decks privately, control downloads, hide ads and more …

第4回 雲勉LT【オンライン:初心者向け】(GCP)限定公開のGoogleアクセスとCloud NATの実装

Y.Sumikura
November 21, 2022

第4回 雲勉LT【オンライン:初心者向け】(GCP)限定公開のGoogleアクセスとCloud NATの実装

Y.Sumikura

November 21, 2022
Tweet

More Decks by Y.Sumikura

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 2 • 野崎 ⾼弘(のざき たかひろ) • アイレット株式会社 クラウドインテグレーション事業部 プロジェクト企画推進セクション

    インフラ技術 • インフラ構築・保守やSOCセキュリティアナリストをやってました • 現在は技術検証やドキュメント作業が主 • 趣味︓資格取得、⽝の散歩、ドラクエ、巨⼈ファン、ドラマ • 好きな⾷べ物︓カレー、ハンバーグ、チーズ、パクチー、⽣クリーム系スイーツ • GCPは現在3冠、AWSは8冠 3
  2. 外部IPアドレスを付与しない⽅がいい理由 3 • 基本的にVMインスタンスに外部IPを付与するのは稀 • 標準VMインスタンスで使⽤されている静的 IP アドレスとエフェメラル IP アドレス(インスタンス起動

    時に発⾏される外部IPアドレス)- 0.004 ドル/時間 • とはいえインターネットに出られないと困るケースも多い • 外部からの通信を直接受ける必要はないが、外部への通信が必要となる処理(例えば、メーカーから提供 されるソフトウェアパッチを取得、外部のソースリポジトリからソースコードをクローニング)を、外部 IPアドレスを持たないVMから実施したい 本LTの対象者︓GCPのことはなんとなく知っているが、VPCネットワークをそれほど触ったことがない初⼼ 者 本LTは、初⼼者がGCPネットワークを把握するのにちょうどいい題材
  3. そこで 4 外部 IP アドレスを設定していない VM インスタンスに対して、限定公開の Google アクセスと Cloud

    NAT を実装します。その後、Google API およびサービスのパブリック IP アドレスへのアクセスと、その 他のインターネット接続を検証します。 外部 IP アドレスを設定していない VM インスタンスは、外部ネットワークから隔離されています。Cloud NAT を使⽤すると、これらのインスタンスがインターネットにアクセスして、更新、パッチ適⽤などが可 能になります。
  4. 限定公開の Google アクセスとは︖ 5 Private Google Access とも⾔い、Google Cloud の

    API (ドメイン名が *.googleapis.com)に対して、 外部IP(パブリックIP)を持たないVMやオンプレミスのクライアントから、インターネットを介さず、Google の内部プライベートネットワークを通してアクセスできるようにする仕組み ⇨AWSで⾔うところのVPCエンドポイント (https://qiita.com/suzuyui/items/b69be2a50df9cbedf402 より)
  5. Private Service Connect との違いは︖ 6 • インターネットに接していないノードを Google API へアクセスできるようにする仕組み

    • VPC 内に IP アドレスを持つエンドポイ ントを作成し、このエンドポイント経由 で Google API にアクセスする • エンドポイントには任意の IP アドレス を割り当てることができ、通常のプライ ベートIPアドレスも使える • Private Service Connect エンドポイントの作成は若⼲⼿間 • 限定公開の Google アクセスだと、199.36.153.4/30 や 199.36.153.8/30 といったIPアドレスを使う 必要があるため、Cloud Interconnect や Cloud VPN 経由でオンプレミス環境から利⽤する際などに、 ルーティングが複雑化する • 限定公開の Google アクセス機能は無料︕
  6. ⼿順の流れ 8 1. Cloud Storage バケットから画像をダウンロードできないことを確認 2. 限定公開の Google アクセスを有効化

    3. 再度1.を実⾏し、今度はうまくいくことを確認 4. インターネットへアクセスできないことを確認 5. Cloud NAT を実装 6. 再度4.を実⾏し、今度はうまくいくことを確認 7. Cloud NATログを⾒て、アクセスを確認 8. 今度は外部IPを付与してインターネットへアクセス 9. Cloud NATログを⾒て、今度は該当ログがないことを確認
  7. 事前準備 9 • VPCネットワークとそのファイアウォールルールを作成 • 外部 IP アドレスが設定されていない VM インスタンスを⽤意

    • サブネットで限定公開の Google アクセスを無効のままにする(デフォルト) • Cloud Storage バケットを作成して、サンプル画像を保存しておく
  8. ファイアウォール ルール忘れないように 10 次のように指定し、残りの設定はデフォルトのまま IAP 接続で使⽤される、特定の IP アドレスセット(35.235.240.0/20)を CIDR 範囲に制限

    IAP TCP 転送では、SSH、RDP、その他のトラフィックを VM インスタンスに転送できる暗号化トンネルを 確⽴する プロパティ 値 名前 privatenet-allow-ssh ネットワーク privatenet ターゲット ネットワーク上のすべてのインスタンス ソースフィルタ IPv4 範囲 送信元 IPv4 範囲 35.235.240.0/20 プロトコルとポート 指定したプロトコルとポート(tcp:22)
  9. 作業の流れ 12 1. 外部 IP アドレスを設定していない VM インスタンス(vm-internal)において、pingを実⾏して外部接続をテスト ping -c

    2 www.google.com vm-internal には外部 IP アドレスが付与されていないので、これは動作しないことを確認 2. Cloud Storageの画像が vm-internal にコピーできるかどうか、次のコマンドを実⾏ Gsutil cp gs://Nozaki_bucket/*.png . 限定公開の Google アクセスが無効になっているため、これは動作しないことを確認 (vm-internal がトラフィックを送信できるのは 、VPC ネットワーク内に限られます) 3. 限定公開の Google アクセスを有効にする 限定公開の Google アクセスは、サブネットレベルで設定します。有効にすると、サブネット内でプライベート IP ア ドレスしか持たないインスタンスが、デフォルトルート(0.0.0.0/0)を通じて Google API およびサービスにトラ フィックを送信できるようになります。
  10. 作業の流れ 13 4. 再度2.を試して、今度は無事に画像をダウンロードできることを確認 5. apt-get を実⾏して、vm-internal のパッケージインデックスを同期してみる sudo apt-get

    update 現在、vm-internal がアクセスできるのは Google API およびサービスだけであるため、これは 動作しな いことを確認 6. Cloud NAT ゲートウェイを構成する Cloud NATを設定するには、Cloud Routerも必要になります。どちらもリージョンごとに作成するリー ジョンリソースで、対象とするサブネットやIPアドレス範囲を細かく指定することが可能です。 この際、ロギングを有効にするため、[⾼度な構成] → [Stackdriver ロギング] で [変換とエラー] を選択
  11. 作業の流れ 14 7. 再度5.を試して、今度は無事にインターネットに接続してアップデートできることを確認 vm-internal で NAT ゲートウェイが使⽤されるため、これは正常に動作するはずです。 8. NATログの確認

    nat-config をクリックして [ログ] タブをクリック。次に、Cloud Logging へのリンクをクリックしま す。[オペレーションロギング] の新しいタブが開きます。 [ログエクスプローラ] をクリック。内部 VM への接続後に⽣成された 2 つの新しいログが表⽰されます。 (dest_ip にある 199.232.98.132 は、debian.map.fastly.net) Cloud NAT のログは次のシーケンスに対して⽣成されます。 • NAT を使⽤するネットワーク接続が作成 • NAT に使⽤可能なポートがないことが原因でパケットが破棄
  12. 作業の流れ 15 9. 外部 IP アドレスを設定して再度試す 今度は外部 IP アドレスを設定していない vm-internal

    に、外部IPエフェメラルアドレスを設定します。 再度5.を試すと、当然外部IPアドレスをそのまま使⽤して、無事にインターネットに接続してアップデート できることを確認 10. 再びNATログを確認 再度8.を実施してCloud NAT ログを⾒に⾏き、該当ログがないことを確認します。Cloud NATは、選択し たGoogle APIとサービスの外部IPアドレスに送信されたトラフィックに対してNATを実⾏しないためです。
  13. 確認 16 外部 IP アドレスが設定されていないインスタンス vm-internal を作成し、限定公開の Google アクセスの 有効化と

    NAT ゲートウェイの構成を⾏って、vm-internal が Google API およびサービス、ならびにその他 のパブリック IP アドレスに接続できることを確認できました。
  14. おまけ(とある Professional Cloud Network Engineer 試験の練習問題1) 17 問題1 Cloud Storage

    に保存される結果を⽣成するために、Compute Engine で実⾏されているアプリケーション があります。どのアプリケーション インスタンスにも外部 IP アドレスがない場合に、これを達成するため に使⽤できる 2 つの⽅法はどれですか? ア. すべてのサブネットでプライベート Google アクセスを有効にする。 イ. VPC でプライベート サービス アクセスを有効にする。 ウ. VPC でプライベート Google アクセスを有効にする。 エ. Cloud NAT を作成し、NAT ゲートウェイ経由でアプリケーショントラフィックをルーティングする。 皆さんならもう答え、お分かりですね︖
  15. おまけ(とある Professional Cloud Network Engineer 試験の練習問題)2 18 問題2 インスタンスからインターネットへの接続ができたことを⽰すために、Cloud NAT

    のログを設定するよう求 められました。 Cloud NAT が Cloud Logging に送信する 2 種類のログは次のうちどれですか︖ ア. NATログ イ. エラーログ ウ. 接続ログ エ. 変換ログ これもNATの設定のところでやりましたね