最初に言い訳しておくと、私は「閉域にしたい」という一言を軽く見ていました。社内ネットワークから外に出したくない、監査で説明できる経路にしたい――その要件でSnowflakeのOpenflowを動かそうとして、AWS PrivateLinkに手を伸ばしたのが始まりです。
結論から言うと、Openflow×AWS PrivateLinkは、うまく噛み合うと気持ちいいくらい「外に出ない」運用ができます。ただ、初手でつまずくポイントがいくつかあり、そこを踏むと一気に沼になります。この記事は、私が検証〜本番移行で実際に踏んだ落とし穴と、最短で復帰できた手順をまとめた“現場寄り”のメモです。
そもそも「Openflow privatelink」で検索する人が求めていること
この検索をする人の多くは、たぶんこうです。
- SnowflakeのOpenflow(データ連携やフロー管理の文脈)を、ネットワーク的に安心して使いたい
- AWSのVPCから、パブリックインターネットを経由せずに接続したい
- でも「DNS」「承認」「ポリシー」「どこまで閉域か」がごちゃついて、確信が持てない
私もまったく同じでした。特に、検証環境ではつながるのに本番で落ちると、焦りと疑いが一気に増えます。原因は大体、設定そのものというより“周辺の整合性”です。
私がやった全体像:やることは大きく3つだけ
細部はさておき、作業は次の3ブロックに整理すると迷いが減ります。
- AWS PrivateLink側で「接続の器」を作る(VPCエンドポイント周り)
- Snowflake側で「PrivateLinkで来た接続を正として扱う」状態にする
- そして最後に、Openflowがその経路で確実に到達できることを確認する(DNSとポリシーが肝)
この順番が大事で、私は最初、勢いで3から触ってドツボにハマりました。到達経路が成立していないのにアプリ側をいじっても、答えが出ません。
手順:Openflow × PrivateLink 接続の“迷わない”進め方
ここからは、私が「次やるならこの順でやる」と決めた流れです。チェックリストのつもりで読んでください。
1) AWS PrivateLinkで“つなぐ口”を用意する
- VPC内にInterface Endpoint(VPCエンドポイント)を作る
- サブネットとセキュリティグループの設計を先に決める
- 私はここで「とりあえず広め」で作ってしまい、後から締める時に何が効いてるのか分からなくなりました
- 最初から「通信元はどこ」「宛先はどこ」「ポートは何」を紙に書いた方が早いです
体感ですが、閉域化のプロジェクトで詰まるのは、8割が“意図のない許可”を入れた後の整理です。最初は面倒でも、最小構成を作った方が結果的に速い。
2) “承認”を忘れない(地味だけど最重要)
AWS PrivateLinkは、作っただけで終わりになりがちです。私は初回これを忘れて、延々とDNSを疑いました。
- 状態がPendingのままなら、そもそも道が開いていない
- 承認のフローがあるなら、そこで止まっていないかを最初に見る
「つながらない」の前に「つながる状態になってる?」を疑う。これだけで無駄な時間が減りました。
3) DNS設計:ここが一番、心が折れそうになる
本番で一番効いたのはDNSです。私はDNSで2回やり直しました。
- CNAMEの向き先が合っているか
- “どこで”名前解決を持つか(VPC内のResolver、Private Hosted Zone、社内DNSの委譲など)
- SnowflakeのPrivateLink用URLと、普段のURLを混ぜていないか
失敗談としては、「DNSを直したつもりで、違うVPCを見ていた」「クライアント端末と実行環境で参照DNSが違っていた」です。笑えないやつです。
私が落ち着けた確認の順番はこれでした。
- 実行環境(例:踏み台、コンテナ、ワーカー)から
nslookup/digで期待のCNAMEに到達しているか - そのIPがVPCエンドポイントのENIのものになっているか
- その先でTCPが開くか(ポート疎通)
DNSは“正しく見えても、正しくないことがある”ので、必ず実行環境から確認します。ローカルPCでOKでも、本番ワーカーでNGは普通に起きます。
4) Snowflake側:ネットワークポリシーで自分を締め落とさない
「閉域で安全にしたい」ので、ネットワークポリシーを入れたくなります。私も最初に入れました。そして自分で自分を締めました。
- 許可する範囲を狭めるのは最後
- まずは“PrivateLink経由でつながる”成功体験を作る
- その後、段階的に絞る(IP、ロール、用途で切る)
検証で“いけた”あとに本番で“急にいけない”のは、だいたいここです。ポリシーを一気に強めると、原因が特定できなくなります。
5) 内部ステージ・UIなど「別経路に見える」場所を見落とさない
私が地味に驚いたのは、同じ“Snowflakeを使っているつもり”でも、挙動が分かれる場面があることでした。
- UI(ブラウザ)だけ違う経路に見える
- 内部ステージ周りだけ別設定が必要に見える
- データ取り込み系だけが不安定に見える
ここは「仕組みの問題」というより「どのコンポーネントがどの名前を引いて、どの経路を使っているか」の整理不足でした。私は、用途別に“到達確認の手順”を分けたら落ち着きました。
体験談:私が踏んだ“落とし穴TOP6”と回避のコツ
落とし穴1:DNSは正しいのに“正しい場所で”引けていなかった
ローカルPCで引ける、踏み台で引ける、でも実行環境で引けない。これ、普通に起こります。特にコンテナやマネージド環境は参照DNSが別になりやすい。
回避策は単純で、必ず「実行する場所」から確認します。
落とし穴2:VPCエンドポイントは作ったが、承認していなかった
これは恥ずかしい。けど、最初は本当に見落としやすい。
回避策は「Pending/Acceptの状態確認」を、疎通確認の最初に固定すること。
落とし穴3:セキュリティグループを“締めたつもり”で締めていなかった
逆もあります。締めすぎて落とすパターン。
回避策は、通信フローを紙に書くこと。送信元・宛先・ポート・名前解決をセットで。
落とし穴4:ネットワークポリシーをいきなり本番相当にして切り分け不能
セキュリティの気持ちは分かります。でも最初は“動くこと”が最優先です。
回避策は、段階的に絞る。1変更1検証。
落とし穴5:「いつものURL」と「PrivateLink用URL」を混ぜていた
気づきにくいのがこれです。体感、名前が似ていて見分けづらい。
回避策は、手順書に「使う名前」を明記して、環境変数や設定ファイルに固定すること。
落とし穴6:閉域化した結果、別の依存(アップデート・外部取得)が止まった
閉域は気持ちいい反面、外に出る前提の処理が止まります。
回避策は、最初から“外に出ない前提”の依存関係を洗い出すこと。必要ならVPCエンドポイント設計も含めて考えます。
最後に:Openflow privatelinkを“運用で勝つ”ための考え方
私の結論は、技術より手順です。
- まず経路を成立させる(承認・DNS・疎通)
- 次にアプリ(Openflow)を乗せる
- 最後にセキュリティを締める(ポリシーやSGの最小化)
この順番にしてから、トラブルの再現性が上がり、切り分けが早くなりました。閉域化のプロジェクトは、どうしても「怖いから先に固めたい」気持ちになります。でも、固めるほど原因が見えなくなることもあります。
もし今、まさに「つながらない」で止まっているなら、まずは落ち着いて、実行環境からDNS→IP→TCP→承認状態の順で見直してみてください。私が遠回りした分、あなたの時間が短くなるはずです。


コメント