Microsoft Azure 에서의 외부 네트워크 액세스 및 비공개 연결¶
이 항목에서는 외부 네트워크 액세스 를 통해 외부 서비스에 대한 아웃바운드 비공개 연결을 설정하는 구성 세부 정보를 제공합니다. 아웃바운드 공용 연결과 아웃바운드 비공개 연결 구성의 주요 차이점은 비공개 연결의 경우 다음 작업을 수행해야 한다는 점입니다.
비공개 연결 엔드포인트를 생성합니다. 이 단계에는 ACCOUNTADMIN 역할이 필요합니다.
PRIVATE_HOST_PORT
속성을 사용할 네트워크 규칙을 만듭니다. 이 속성은 Azure URL 및 포트 번호를 포함하며, 이 속성을 사용하면 Snowflake에서 Microsoft Azure 로 연결할 때 공용 인터넷을 통하지 않고 Microsoft Azure 내부 네트워크를 통과할 수 있습니다.
청구 및 가격¶
처리된 총 데이터와 함께 각 비공개 연결 엔드포인트에 대한 비용을 지불합니다. 이러한 품목의 가격은 Snowflake서비스 사용 테이블 을 참조하십시오.
외부 네트워크 액세스 구성¶
이러한 단계는 Microsoft Azure 에서 외부 네트워크 액세스와 함께 아웃바운드 비공개 연결을 사용하는 경우에만 해당됩니다.
SYSTEM$PROVISION_PRIVATELINK_ENDPOINT 시스템 함수를 호출하여 Snowflake VNet에서 비공개 연결 엔드포인트를 프로비저닝하여 Snowflake가 비공개 연결을 사용하여 외부 서비스에 연결할 수 있도록 합니다.
USE ROLE ACCOUNTADMIN; SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT( '/subscriptions/1111-22-333-4444-55555/resourceGroups/external-access/providers/Microsoft.Sql/servers/externalaccessdemo', 'externalaccessdemo.database.windows.net', 'sqlServer' );
Azure Portal에서 Azure API 관리 리소스의 소유자로서 비공개 엔드포인트를 승인합니다. 자세한 내용은 Microsoft Azure 설명서 를 참조하십시오.
네트워크 규칙, 시크릿, 프로시저를 저장할 데이터베이스 및 스키마 를 생성합니다.
CREATE DATABASE ext_network_access_db; CREATE SCHEMA secrets; CREATE SCHEMA network_rules; CREATE SCHEMA procedures;
비공개 연결을 사용하도록
PRIVATE_HOST_PORT
속성을 지정하여 네트워크 규칙 을 생성합니다.CREATE OR REPLACE NETWORK RULE ext_network_access_db.network_rules.azure_sql_private_rule MODE = EGRESS TYPE = PRIVATE_HOST_PORT VALUE_LIST = ('externalaccessdemo.database.windows.net');
액세스 자격 증명을 안전하게 저장할 시크릿 을 생성합니다.
CREATE OR REPLACE SECRET ext_network_access_db.secrets.secret_password TYPE = PASSWORD USERNAME = 'my-username' PASSWORD = 'my-password';
이전 단계의 네트워크 규칙을 지정하여 외부 액세스 통합 을 생성합니다.
CREATE OR REPLACE EXTERNAL ACCESS INTEGRATION azure_private_access_sql_store_integration ALLOWED_NETWORK_RULES = (ext_network_access_db.network_rules.azure_sql_private_rule) ALLOWED_AUTHENTICATION_SECRETS = (ext_network_access_db.secrets.secret_password) ENABLED = TRUE;
프로시저 를 생성하여 외부 서비스에 연결합니다.
CREATE OR REPLACE PROCEDURE ext_network_access_db.procedures.connect_azure_sqlserver() RETURNS TABLE() LANGUAGE PYTHON RUNTIME_VERSION = 3.10 HANDLER = 'connect_sqlserver' EXTERNAL_ACCESS_INTEGRATIONS = (azure_private_access_sql_store_integration) SECRETS = ('cred' = ext_network_access_db.secrets.secret_password) IMPORTS=('@demo/pytds.zip') PACKAGES = ('snowflake-snowpark-python','pyopenssl','bitarray','certifi') AS $$ import pytds import certifi import _snowflake from snowflake.snowpark import types as T def connect_sqlserver(session): server = 'externalaccessdemo.database.windows.net' database = 'externalaccess' username_password_object = _snowflake.get_username_password('cred'); # Create a connection to the database with pytds.connect(server, database, username_password_object.username, username_password_object.password, cafile=certifi.where(), validate_host=False) as conn: with conn.cursor() as cur: cur.execute(""" SELECT O.OrderId, O.OrderDate, O.SodName, O.UnitPrice, O.Quantity, C.Region FROM Orders AS O INNER JOIN Customers AS C ON O.CustomerID = C.CustomerID;""") rows = cur.fetchall() schema = T.StructType([ T.StructField("ORDER_ID", T.LongType(), True), T.StructField("ORDER_DATE", T.DateType(), True), T.StructField("SOD_NAME", T.StringType(), True), T.StructField("UNIT_PRICE", T.FloatType(), True), T.StructField("QUANTITY", T.FloatType(), True), T.StructField("REGION", T.StringType(), True) ]) final_df = session.createDataFrame(rows, schema) return final_df $$;
프로시저를 호출하여 외부 서비스에 연결합니다.
CALL ext_network_access_db.procedures.connect_azure_sqlserver();
비공개 연결이 필요한 각 외부 네트워크 액세스 구성에 대해 이 단계를 반복합니다.
외부 네트워크 액세스 통합을 위해 비공개 연결 엔드포인트가 더 이상 필요하지 않은 경우 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT 시스템 함수를 호출합니다.