インバウンドトラフィックのプライベート接続エンドポイントのピン留め

Amazon Web Services (AWS) および Microsoft Azure (Azure)のSnowflakeアカウントでは、プライベート接続エンドポイントをアカウントにピン留め(指定、登録、マッピング)することができます。Snowflakeでは、プライベートエンドポイントをアカウントにピン留めすることで、ピン留めされたエンドポイントから発信されるインバウンドトラフィックが、ピン留めしたアカウントにのみ送られるようにしています。Snowflakeでは、ピン留めされたエンドポイント、ネットワークポリシー、およびネットワークルールを使用して、Snowflakeアカウントへのネットワーク攻撃対象領域を減らし、セキュリティ体制を強化することを推奨しています。

Tip

ピン留めにより、許可されたプライベートエンドポイントのみを使用して、顧客ネットワークから特定のSnowflakeアカウントにトラフィックを送信することができます。IPs および VPCE IDs/LinkIDs の特定のリストからSnowflakeアカウントへのインバウンドアクセスを制限する場合は、 ネットワークポリシー および ネットワークルール を使用します。

Snowflakeは、プライベート接続で受信したすべてのリクエストに対して、イングレスポイントでプライベートエンドポイントのピン留めチェックを実施します。このチェックでは、次の2つのキー情報を比較します:

  • リクエストヘッダに入力されたエンドポイント ID。

  • Snowflakeのメタデータに記録されている、エンドポイントがピン留めされたアカウント。

これらが一致した場合(言い換えれば、エンドポイントが登録されているアカウントからリクエストが発信された場合)、Snowflakeは接続を許可します。そうでない場合、Snowflakeは接続をブロックします。

例:

ピン留めされたプライベート接続エンドポイントを介したインバウンドトラフィックのアクセス許可の確認

ピン留めされたプライベートエンドポイント

プライベートエンドポイントがピン留めされたSnowflakeアカウント

リクエストのターゲットであるSnowflakeアカウント

Snowflakeによるピン留めチェックの判断

PE1

A1

A1

ALLOW

PE1

A1

A2

DENY

PE2

A2

A1

DENY

PE2

A2

A2

ALLOW

前提条件

プライベートエンドポイントをピン留めするための要件:

  • AWS またはAzureのSnowflakeアカウントに、プライベートリンクを設定する。

  • エンドポイントをSnowflakeアカウントに登録する際に使用するアクセストークンの範囲を制限する。

プライベートリンクの設定の詳細については、 AWS PrivateLink または Azure Private Link を参照してください。

遅延時間の引数を使用して管理を実施する

プライベートリンクを設定した後、 SYSTEM$REGISTER_PRIVATELINK_ENDPOINT システム関数を呼び出して、プライベート接続エンドポイントをSnowflakeアカウントに登録します。その関数呼び出しで、遅延時間を オプション で指定できます。遅延時間は、プライベートエンドポイントの登録を実施する前に待機する分数です。遅延時間の値を設定すると、新しいプライベートエンドポイントを登録する際に、誤ってSnowflakeへのアクセスがブロックされるのを防げます。最大遅延時間は1440分(24時間)で、デフォルト値は60分です。

Snowflakeアカウントに登録したプライベートエンドポイントは、他のSnowflakeアカウントにも登録できます。例えば、3つのSnowflakeアカウントがあり、その各Snowflakeアカウントに、必ず1つの登録済みプライベートエンドポイントを経由して接続させることができます。引数の遅延時間を60分に設定することで、プライベート接続エンドポイントを各Snowflakeアカウントに登録するのに十分な時間を確保できます。

ただし、プライベート接続エンドポイントを登録し、遅延時間を指定する場合、 システム関数を呼び出す最初のアカウント のローカルタイムスタンプに 注意する必要があります。実施時間は、システム関数を呼び出した最初のアカウントのローカルタイムスタンプに、指定したプライベート接続エンドポイントからの遅延時間を加えたものに基づきます。

例えば、同じタイムゾーンにある3つのアカウントに、1つのプライベート接続エンドポイントをピン留めするとします。

  • account1 のシステム関数を10:00 AM に呼び出し、遅延時間を60分と指定した場合、実施時間は11:00 AM となります。

  • account2 のシステム関数を10:30 AM に呼び出した場合、実施時間は11:00 AM となります。

  • account3 のシステム関数を11:01 AM に呼び出した場合、実施時間は即時(今すぐ)となります。

Tip

最初のアカウントでプライベートエンドポイントを登録した時のタイムスタンプを保存し、特定のプライベートエンドポイントにピン留めされているアカウントの記録を保持してください。

複数のアカウントを登録する予定であり、1440分の遅延時間では十分でないと予想される場合は、 Snowflakeサポート までご連絡ください。

Microsoft Azure でアクセストークンの範囲を管理する

AzureでSnowflakeアカウントにプライベートエンドポイントをピン留めする前に、 SYSTEM$REGISTER_PRIVATELINK_ENDPOINT システム関数に渡すアクセストークンの範囲を制限する必要があります。呼び出し元に、プライベートエンドポイントへのアクセストークンの範囲の制限を要求することで、Snowflake はエンドポイントへのアクセスを呼び出し元に許可するかどうかを判断します。つまり、このトークンはプライベートエンドポイントとシステム関数を呼び出すSnowflakeアカウントでのみ有効になります。

重要

SYSTEM$AUTHORIZE_PRIVATELINK システム関数で使用したトークンは使用しないでください。以下の手順で、 SYSTEM$REGISTER_PRIVATELINK_ENDPOINT に固有のトークンを生成してください。

Azure でプライベートエンドポイントのアクセストークンの範囲を制限するには、 Microsoft Azure アカウントで次の手順を実行します:

  1. ロール用のサブスクリプションカスタムロール定義を snowflake-pep-role という名前で 作成subscription_id プレースホルダをサブスクリプションの ID に置き換えます。

    az role definition create --role-definition '{"Name":"snowflake-pep-role","Description":
    "To generate advanced proof of access token for Snowflake private endpoint pinning","Actions":
    ["Microsoft.Network/privateEndpoints/read"],"AssignableScopes":["/subscriptions/<subscription_id>"]}'
    
    Copy

    サブスクリプション ID は、プライベートエンドポイントが存在するサブスクリプションと一致しなければなりません。ロール定義は、サブスクリプションに対して一度だけ作成する必要があります。

  2. ロールの割り当てを作成し、 snowflake-pep-role ロールとプライベートエンドポイントの範囲をユーザー(またはグループ)に 割り当てますuserprivate_endpoint_resource_id のプレースホルダーを置き換えます。

    az role assignment create --assignee <user> --role snowflake-pep-role --scope <private_endpoint_resource_id>
    
    Copy
  3. SYSTEM$REGISTER_PRIVATELINK_ENDPOINT システム関数で使用する アクセストークン を生成します。 subscription_id のプレースホルダを、サブスクリプションの ID で置き換えてください。

    az account get-access-token --subscription <subscription_id>
    
    Copy

Amazon Web Services でアクセストークンの範囲を管理する

AWS のSnowflakeアカウントにプライベートエンドポイントをピン留めする前に、 SYSTEM$REGISTER_PRIVATELINK_ENDPOINT システム関数に渡すアクセストークンの範囲を制限する必要があります。呼び出し元に、プライベートエンドポイントへのアクセストークンの範囲の制限を要求することで、Snowflake はエンドポイントへのアクセスを呼び出し元に許可するかどうかを判断します。つまり、このトークンはプライベートエンドポイントとシステム関数を呼び出すSnowflakeアカウントでのみ有効になります。

重要

SYSTEM$AUTHORIZE_PRIVATELINK システム関数で使用したトークンは使用しないでください。以下の手順で、 SYSTEM$REGISTER_PRIVATELINK_ENDPOINT に固有のトークンを生成してください。

AWS でプライベートエンドポイントのアクセストークンの範囲を制限するには、次の例に示すように、フェデレーショントークンを生成します:

aws sts get-federation-token --name snowflake --policy
'{ "Version": "2012-10-17", "Statement":
  [ {
  "Effect": "Allow", "Action": ["ec2:DescribeVpcEndpoints"],
  "Resource": ["*"] }
  ] }'
Copy

代表的な例として、接続をSnowflakeサービスにルーティングするエンドポイントを登録します。

  1. Snowflakeアカウントの AWS PrivateLink または Azure Private Link を設定します。すでにこのサービスが設定されている場合は、次のステップに進んでください。

  2. 公衆インターネットを使用してSnowflakeにログインします。つまり、 URL に privatelink セグメントが含まれていない URL を使用してください。

  3. SYSTEM$REGISTER_PRIVATELINK_ENDPOINT システム関数を呼び出して、 VPC エンドポイントをSnowflakeアカウントに登録します。 token 引数には切り捨てられた値を指定し、遅延時間の単位は分です。

    AWS

    SELECT SYSTEM$REGISTER_PRIVATELINK_ENDPOINT(
      'vpce-0c1...',
      '123.....',
      '{
        "Credentials": {
          "AccessKeyId": "ASI...",
          "SecretAccessKey": "alD...",
          "SessionToken": "IQo...",
          "Expiration": "2024-12-10T08:20:20+00:00"
        },
        "FederatedUser": {
          "FederatedUserId": "0123...:snowflake",
          "Arn": "arn:aws:sts::174...:federated-user/snowflake"
        },
        "PackedPolicySize": 9,
        }',
      120
      );
    
    Copy

    Azure

    SELECT SYSTEM$REGISTER_PRIVATELINK_ENDPOINT(
      '123....',
      '/subscriptions/0cc51670-.../resourceGroups/dbsec_test_rg/providers/Microsoft.Network/
      privateEndpoints/...',
      'eyJ...',
      120
    );
    
    Copy

#. Confirm the private connectivity endpoint mapping by calling the SYSTEM$GET_PRIVATELINK_ENDPOINT_REGISTRATIONS system function.

SYSTEM$UNREGISTER_PRIVATELINK_ENDPOINT システム関数を呼び出すと、Snowflakeアカウントからプライベート接続エンドポイントの登録を解除できます。

重要

Snowflakeで VPC エンドポイントまたはプライベートエンドポイントを登録し、 VPC または VNet でエンドポイントを削除した場合、Snowflakeアカウントで SYSTEM$UNREGISTER_PRIVATELINK_ENDPOINT システム関数を呼び出してエンドポイントの登録を解除する必要があります。解除しない場合、Snowflakeサービスへの接続にプライベート接続を使用できず、公衆インターネットが使用されます。