자습서 5: 서비스 엔드포인트 권한 구성 및 테스트¶
소개¶
자습서 1에서는 동일한 역할을 사용하여 서비스를 만들고 테스트합니다. 서비스를 생성하는 역할은 서비스의 소유자 역할이므로, 해당 역할을 사용하여 서비스와 통신할 수 있습니다.
이 자습서에서는 다양한 역할을 사용하여 서비스와 통신하는 방법을 알아봅니다.
서비스 사양에서 정의하는 서비스 역할 을 사용하여 이 역할에 USAGE 권한을 부여합니다.
이 자습서에서는 자습서 1 을 다음과 같이 수정합니다.
서비스와 통신하는 데 사용할 새로운 역할을 만듭니다.
서비스 사양을 다음과 같이 수정합니다.
하나의 엔드포인트 대신 두 개의 엔드포인트을 정의합니다. 두 번째 엔드포인트는 엔드포인트 권한이 어떻게 동작하는지 보여주기 위한 용도로만 추가되었습니다.
두 개의 엔드포인트 중 하나에만 액세스할 수 있는 서비스 역할을 정의합니다.
서비스 엔드포인트 중 하나에 액세스할 수 있도록 새로 만든 역할에 서비스 역할을 부여합니다.
새로운 역할을 사용하여 서비스 엔드포인트와 통신합니다.
준비¶
다음과 같이 수정하여 공통 설정 을 따릅니다.
공통 설정 단계를 완료합니다.
ACCOUNTADMIN 역할을 사용하여 다음 스크립트를 실행하여 다른 역할(
service_function_user_role
)을 만들고,user_name
을 Snowflake 사용자의 이름으로 바꿉니다. Echo 서비스를 생성한 후에는 이 역할을 사용하여 서비스와 통신합니다.USE ROLE ACCOUNTADMIN; CREATE ROLE service_function_user_role; GRANT ROLE service_function_user_role TO USER <user-name>; GRANT USAGE ON WAREHOUSE tutorial_warehouse TO ROLE service_function_user_role;
자습서 1 의 1단계와 2단계에 따라 이미지를 만들고 계정의 리포지토리에 업로드합니다. 이 자습서의 일부로 서비스를 생성하게 되므로 3단계는 진행하지 마십시오.
서비스를 만듭니다.¶
이 단계에서 SQL 문의 올바른 컨텍스트에 있는지 확인하려면 다음을 실행합니다.
USE ROLE test_role; USE DATABASE tutorial_db; USE SCHEMA data_schema; USE WAREHOUSE tutorial_warehouse;
서비스를 생성하려면
test_role
(서비스의 소유자 역할)을 사용하여 다음 명령을 실행합니다.CREATE SERVICE echo_service IN COMPUTE POOL tutorial_compute_pool FROM SPECIFICATION $$ spec: containers: - name: echo image: /tutorial_db/data_schema/tutorial_repository/my_echo_service_image:latest env: SERVER_PORT: 8000 CHARACTER_NAME: Bob readinessProbe: port: 8000 path: /healthcheck endpoints: - name: echoendpoint port: 8000 public: true - name: echoendpoint2 port: 8002 public: true serviceRoles: - name: echoendpoint_role endpoints: - echoendpoint $$;
인라인 사양에 따라
echo_service
는 2개의 공개 엔드포인트를 노출하지만 서비스 역할(echoendpoint_role
)은 엔드포인트 중 하나에 대해서만 USAGE 권한을 부여합니다.서비스가 실행 중인지 확인합니다.
SHOW SERVICES; SELECT SYSTEM$GET_SERVICE_STATUS('echo_service'); DESCRIBE SERVICE echo_service;
test_role
(서비스의 소유자 역할)을 사용하여 사양에 정의된 서비스 역할을 공통 설정의 일부로 생성한 새 역할(service_function_user_role
)에 부여합니다. 또한 데이터베이스와 스키마에 대한 USAGE 권한도 부여합니다.USE ROLE test_role; USE DATABASE tutorial_db; USE SCHEMA data_schema; GRANT USAGE ON DATABASE tutorial_db TO ROLE service_function_user_role; GRANT USAGE ON SCHEMA data_schema TO ROLE service_function_user_role; GRANT SERVICE ROLE echo_service!echoendpoint_Role TO ROLE service_function_user_role;
이 서비스 역할은
echoendpoint
엔드포인트에 대한service_function_user_role
USAGE 권한을 부여합니다.서비스 역할 이름이 대소문자를 구분한다는 것을 보여주기 위해 예제에서는
echoendpoint_Role
역할 이름을 사용합니다.
서비스 사용¶
서비스와 통신하기 위한 서비스 함수를 만듭니다. (서비스의 소유자 역할이 아닌) service_function_user_role
을 사용하여 서비스 함수를 만들고 서비스를 사용합니다.
서비스 함수를 만듭니다.
USE ROLE service_function_user_role; CREATE OR REPLACE FUNCTION my_echo_udf_try1 (InputText VARCHAR) RETURNS varchar SERVICE=echo_service ENDPOINT=echoendpoint AS '/echo';
해당 역할에 액세스 권한이 없는
echoservice2
엔드포인트를 참조하는 다른 서비스 함수를 만듭니다. 따라서 이 명령은 실패 해야 합니다.CREATE OR REPLACE FUNCTION my_echo_udf_try2 (InputText varchar) RETURNS varchar SERVICE=echo_service ENDPOINT=echoendpoint2 AS '/echo';
서비스 함수를 사용합니다.
SELECT my_echo_udf_try1('Hello');
정리¶
생성한 리소스를 제거하려면 자습서 1 에서 만든 다른 리소스를 정리하는 단계의 단계를 따릅니다.
다음에는 무엇을 해야 합니까?¶
이제 이 자습서를 마쳤으므로 서비스 사용하기 로 돌아가서 다른 항목을 살펴볼 수 있습니다.