IP 制御
アプリをオフィスや会社の VPN からだけ使えるようにします。利用者のログインとアプリの権限に加えて、接続元のネットワークを確認します。この仕組みを IP 制御と呼びます。
対象は、サーバー側で動く Web アプリと、画面の配信と処理を分けたハイブリッドアプリの API 部分です。静的サイト、SPA、ハイブリッドアプリの静的ファイル、Media の配信 URL には適用されません。 詳しくは適用範囲を参照してください。
- 必要な権限 / プラン: アクセス元の作成、ワークスペースの既定、アプリごとの設定のいずれも Owner / Admin。アプリの
manage権限だけでは変更できません。全プラン - 完了条件: 許可したネットワークからはアプリが開け、それ以外からはアクセスできない旨の画面(接続元の IP アドレスが表示される)になる
IP 制御は「アクセス元」という単位で設定します。アクセス元は、許可するネットワークのアドレスを、名前を付けてまとめたものです。たとえば「東京オフィス」という名前で、複数の IP アドレスやアドレスの範囲を登録できます。範囲の指定には、203.0.113.0/24 のような CIDR という書き方を使います。
- ワークスペースでアクセス元を作る
- ワークスペースの既定として適用するアクセス元を選ぶ(空なら制限なし)
- アプリごとに「既定を引き継ぐ」か「このアプリ専用のアクセス元を選ぶ」かを決める
新しいアプリは既定を引き継ぎます。ワークスペースの既定を変更すると、それを引き継ぐアプリにまとめて適用できます。専用のアクセス元を設定したアプリには、その専用設定が使われます。
アクセス元を作る(Owner / Admin)
Section titled “アクセス元を作る(Owner / Admin)”コンソールの「設定」→「セキュリティ」→「アクセス元の管理」で「アクセス元を登録」を選びます。
- 名前 — 「福岡オフィス」「VPN」など
- IP / CIDR — 1 行に 1 つ。IPv4 / IPv6 両方に対応。単一 IP(
203.0.113.10)も範囲(203.0.113.0/24)も書けます。「現在の IP を追加」で自分の送信元を入れられます - ワークスペースの既定に追加 — チェックすると、作成と同時に既定に含まれます
ネットワーク管理者には「このアプリをオフィスと会社の VPN から利用できるようにしたい」と伝え、登録する固定 IP アドレスやアドレス範囲を確認します。
自宅や携帯回線では IP アドレスが変わることがあり、登録後にアクセスできなくなる場合があります。
アプリごとの設定(Owner / Admin)
Section titled “アプリごとの設定(Owner / Admin)”アプリ画面の「設定」→「セキュリティ」で選びます。
| モード | 動作 |
|---|---|
| ワークスペースの既定を引き継ぐ | 既定のアクセス元を適用する。既定が空なら制限なし |
| このアプリ専用のアクセス元 | 既定を置き換え、選んだアクセス元(1 つ以上)だけを適用する |
「制限なし」にしたいアプリがある場合は、既定を空にしたうえでそれを引き継ぐか、制限したいアプリだけに専用のアクセス元を設定します。
設定はデプロイなしで反映されます。通常は 2 分以内に反映されます。障害中の変更は復旧後に反映されます。
拒否されたとき
Section titled “拒否されたとき”許可されていないネットワークからブラウザで開くと、ログイン後に「このアプリは、許可されたアクセス元からのみ利用できます」という画面と、現在の接続元の IP アドレスが表示されます。
会社の VPN への接続が必要かを確認します。アクセス元への追加が必要な場合は、表示された IP アドレスを Owner / Admin に伝えます。
- 対象は、コンテナで動く Web アプリと、ハイブリッドアプリの API 部分への、ログインユーザーのアクセスです
- 静的サイト、SPA、ハイブリッドアプリの静的ファイル、Media の配信 URL(
/__keelson/media/<ファイルID>)には適用されません。Media ではログインとアプリの閲覧権限が確認されます(ファイルとメディア) - アプリトークンと Webhook には、ワークスペースやアプリの設定ではなく、トークンごとの許可 IP が適用されます(外部システムとの連携)
技術的な詳細
Section titled “技術的な詳細”判定は ログイン → アプリの権限 → IP の順で行われます。IP 制御は、ログインとアプリの権限確認に追加される制限です。
許可されていないネットワークからのアクセスには HTTP 403 を返します。ブラウザでページを開く場合は案内画面を、ページ内の通信(fetch / XHR)や API 呼び出しには JSON を返します。