[新機能]Azure上のSnowflakeで内部ステージのパブリックアクセスをブロックしつつ特定IPのみ許可できるようになりました

[新機能]Azure上のSnowflakeで内部ステージのパブリックアクセスをブロックしつつ特定IPのみ許可できるようになりました

2026.03.30

はじめに

2026年3月のアップデートで、Microsoft Azure 上の Snowflake 環境において、内部ステージへのパブリックアクセスをブロックしつつ、特定の IP アドレスのみを例外として許可できる機能が追加されました。

こちらの機能を試してみた内容を本記事でまとめます。

https://docs.snowflake.com/en/release-notes/2026/other/2026-03-20-block-public-stage-access-with-exceptions

アップデートの概要

本機能については以下に記載があります。

https://docs.snowflake.com/en/user-guide/private-internal-stages-azure#label-private-internal-stage-block-public-with-exceptions

https://docs.snowflake.com/en/sql-reference/functions/system_block_internal_stages_public_access_with_exception

Azure 上の Snowflake には、内部ステージへのパブリックネットワーク経由のアクセスをブロックするSYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS関数が用意されています。ただし、これまではすべてのパブリック IP アドレスを一括でブロックするしかなく、特定の IP アドレスのみを許可するといった例外構成はできませんでした。

今回追加されたSYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS_WITH_EXCEPTION関数を使用することで、パブリックアクセスをブロックしつつ、特定の IP アドレスを例外として許可リストに追加できるようになりました。これにより、サードパーティツールや特定の管理端末など、限られたアクセス元のみを許可するといった柔軟な構成が可能になります。

試してみる

前提条件

以下の環境を使用しています。

  • Snowflake
    • クラウドサービス:Microsoft Azure
    • リージョン:japaneast

ブロック前の確認

はじめに、パブリックアクセスをブロックする前の状態を確認します。手元の端末から内部ステージのエンドポイントに対して接続テストを行うと、パブリック IP に解決されます。
SYSTEM$ALLOWLIST()で内部ステージの場所を確認できます。

>Test-NetConnection -ComputerName <ストレージアカウント名>.blob.core.windows.net -Port 443
ComputerName     : <ストレージアカウント名>.blob.core.windows.net
RemoteAddress    : <パブリックIP>
RemotePort       : 443
InterfaceAlias   : Wi-Fi
SourceAddress    : <ローカルIP>
TcpTestSucceeded : True

内部ステージへの PUT も試してみます。

>PUT file://C:/Users/<User>/test.csv @my_int_stage;
+----------+-------------+-------------+-------------+--------------------+--------------------+----------+---------+
| source   | target      | source_size | target_size | source_compression | target_compression | status   | message |
|----------+-------------+-------------+-------------+--------------------+--------------------+----------+---------|
| test.csv | test.csv.gz |           0 |          32 | NONE               | GZIP               | UPLOADED |         |
+----------+-------------+-------------+-------------+--------------------+--------------------+----------+---------+

問題なくアップデートできました。

内部ステージのパブリックアクセスをブロック

まずSYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESSを実行し、内部ステージへのパブリックアクセスをすべてブロックします。

SELECT SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS();

2026-03-30_13h10_28

ステータスは SYSTEM$INTERNAL_STAGES_PUBLIC_ACCESS_STATUS で確認できます。

SELECT SYSTEM$INTERNAL_STAGES_PUBLIC_ACCESS_STATUS();

2026-03-30_13h15_32

この状態で、内部ステージへの PUT を試してみます。

PUT file://C:/Users/<User>/test.csv @my_int_stage;
+----------+-------------+-------------+-------------+--------------------+--------------------+--------+-----------------------------------------------------------------------------------------------------+
| source   | target      | source_size | target_size | source_compression | target_compression | status | message                                                                                             |
|----------+-------------+-------------+-------------+--------------------+--------------------+--------+-----------------------------------------------------------------------------------------------------|
| test.csv | test.csv.gz |           0 |           0 | NONE               | GZIP               | ERROR  | HTTPError('403 Client Error: This request is not authorized to perform this operation. for url: https://<ストレージアカウント名>.blob.core.windows.net/<コンテナ名>/test.csv.gz?xxxxx') |
+----------+-------------+-------------+-------------+--------------------+--------------------+--------+-----------------------------------------------------------------------------------------------------+
1 Row(s) produced. Time Elapsed: 1.738s

出力は上記の通りエラーとなり、パブリックアクセスがブロックされていることが確認できました。

例外 IP の設定

続けて、SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS_WITH_EXCEPTIONで手元の端末の IP アドレスを例外として許可します。

USE ROLE ACCOUNTADMIN;
SELECT SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS_WITH_EXCEPTION('<許可するIPアドレス>');

この状態でステータスを確認すると、ブロック状態を維持しつつ、指定の IP が許可リストに追加されていることを確認できます。

>SELECT SYSTEM$INTERNAL_STAGES_PUBLIC_ACCESS_STATUS();
+--------------------------------------------------------------------------+
| SYSTEM$INTERNAL_STAGES_PUBLIC_ACCESS_STATUS()                            |
|--------------------------------------------------------------------------|
| Public Access to internal stages is blocked. IP allowlist: <許可したIPアドレス> |
+--------------------------------------------------------------------------+

再度同じネットワークから PUT を試みると、問題なく実行できました。

PUT file://C:/Users/<User>/test.csv @my_int_stage;
+----------+-------------+-------------+-------------+--------------------+--------------------+---------+---------+
| source   | target      | source_size | target_size | source_compression | target_compression | status  | message |
|----------+-------------+-------------+-------------+--------------------+--------------------+---------+---------|
| test.csv | test.csv.gz |           0 |           0 | NONE               | GZIP               | SKIPPED |         |
+----------+-------------+-------------+-------------+--------------------+--------------------+---------+---------+

さいごに

簡単ではありますが、内部ステージのパブリックアクセスブロックに例外 IP を設定できる機能を試してみました。外部ツール向けの特定の例外を許可する際などで使用できます。
こちらの内容がどなたかの参考になれば幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事