Trust Center 확장 프로그램 사용하기¶
솔루션을 Trust Center와 통합하기 위해 보안 파트너는 :doc:`Snowflake Native App Framework</developer-guide/native-apps/native-apps-about>`를 사용하여 하나 이상의 추가 스캐너 패키지를 제공하는 애플리케이션을 생성할 수 있습니다. 이러한 애플리케이션을 *Trust Center 확장 프로그램*이라고 합니다.
Trust Center 확장 프로그램을 만들어 요구 사항에 더 적합하도록 보안, 개인정보 보호, 거버넌스 및 규정 준수 솔루션을 맞춤화한 후 조직에서 확장 프로그램을 공유할 수 있습니다. 더 광범위하게 사용할 수 있는 확장 프로그램을 만들어 특정 Snowflake 계정 또는 Snowflake Marketplace`_에 나열할 수도 있습니다. 자세한 내용은 :ref:`label-trust_center_extensions_developing 섹션을 참조하십시오.
사용자는 스캐너 패키지가 포함된 서드 파티 확장 프로그램을 검색, 설치, 관리할 수 있습니다. 자세한 내용은 Trust Center 확장 프로그램 설치 섹션을 참조하십시오.
액세스 제어 요구 사항¶
Trust Center 확장 프로그램을 만들고 관리하려면 :ref:`ACCOUNTADMIN 역할<label-access_control_overview_roles_system>`이 있는 사용자가 해당 역할에 다음 권한을 부여해야 합니다.
SNOWFLAKE.TRUST_CENTER_ADMIN 애플리케이션 역할
CREATE APPLICATION PACKAGE
CREATE APPLICATION
Trust Center 확장 프로그램 개발¶
스캐너 패키지를 사용하여 Trust Center 확장 프로그램을 개발하고 배포할 수 있습니다. :doc:`Native App 버전 관리</developer-guide/native-apps/update-app-overview>`를 사용하여 Trust Center 확장 프로그램의 버전을 관리할 수 있습니다. 또한 확장 프로그램은 :doc:`Native App 권한 모델</developer-guide/native-apps/requesting-about>`을 사용하여 고객 계정 또는 Account Usage 뷰 내의 테이블과 같은 모든 데이터나 메타데이터에 액세스합니다.
전제 조건¶
스캐너 패키지로 확장 프로그램을 개발하기 전에 다음 전제 조건을 완료합니다.
Native App 개발 방법을 이해합니다.
Snowflake :doc:`저장 프로시저</developer-guide/extensibility>`를 만들고 사용하는 방법을 이해합니다.
확장 프로그램 공급자 계정 역할을 할 수 있는 Snowflake 계정을 만들거나 식별합니다. 모든 Native App에는 공급자 계정이 필요합니다.
스캐너 패키지 매니페스트 및 스캐너 만들기¶
1단계: 확장 프로그램 매니페스트 파일 만들기¶
다양한 스캐너 패키지 및 스캐너에 대한 정보와 메타데이터가 포함된 매니페스트 파일을 만듭니다.
매니페스트 파일을 만듭니다.
매니페스트 파일의 요구 사항은 다음과 같습니다.
매니페스트 파일의 이름은
tc_extension_manifest.yml이어야 합니다.tc_extension_manifest.yml파일은 Native Appmanifest.yml파일이 있는 명명된 스테이지의 디렉터리 구조 루트에 있어야 합니다.
매니페스트 파일에는 스캐너 패키지 속성과 스캐너 패키지에 포함된 모든 스캐너가 나열됩니다.
매니페스트 파일에 대해 다음 정의를 사용합니다.
manifest_version: '2.0' scanner_packages: - id: '' name: '' short_description: '' description: '' scanners: - id: '' name: '' short_description: '' description: '' type: 'VULNERABILITY' callback: schema: '' name: '' version: ''
매니페스트 파일에는 다음과 같은 속성이 있습니다.
속성
설명
최대 문자 수
manifest_version현재, ``2.0``만 유효합니다.
해당 없음
scanner_packages.id공급자가 스캐너 패키지의 수명 동안 유지 관리해야 하는 스캐너 패키지의 고유 식별자입니다. ASCII 영숫자 및 밑줄 문자만 지원됩니다. 고객이 스캐너 패키지에 적용하는 모든 구성은 이 ID를 사용하여 Trust Center에 유지됩니다.
25
scanner_packages.name스캐너 패키지의 이름입니다.
30
scanner_packages.short_description스캐너 패키지에 대한 간략한 설명입니다.
150
scanner_packages.description스캐너 패키지에 대한 설명입니다.
700
scanner_packages.scanners.id공급자가 스캐너의 수명 동안 유지해야 하는 스캐너의 고유 식별자입니다. ASCII 영숫자 및 밑줄 문자만 지원됩니다. 고객이 스캐너에 적용하는 모든 구성은 이 ID를 사용하여 Trust Center에 유지됩니다.
25
scanner_packages.scanners.name스캐너의 이름입니다.
30
scanner_packages.scanners.short_description스캐너에 대한 간략한 설명입니다.
150
scanner_packages.scanners.description스캐너에 대한 긴 설명입니다.
1,500
scanner_packages.scanners.type스캐너의 유형입니다. 현재는 :code:`VULNERABILITY`만 지원됩니다.
—
scanner_packages.scanners.callback스캐너의 콜백 섹션입니다. 모든 스캐너에는
schema,name및version`을 지원하는 :code:`callback섹션이 있습니다.해당 없음
scanner_packages.scanners.callback.schema저장 프로시저의 스키마입니다. 스키마는
setup_script.sql파일에 존재해야 합니다. 이 파일에 대한 자세한 내용은 3단계: 확장 프로그램 만들기 섹션을 참조하세요.해당 없음
scanner_packages.scanners.callback.name저장 프로시저의 이름입니다. 저장 프로시저에는 다음 요구 사항이 적용됩니다.
현재, 이름이 ``scan``이어야 합니다.
여기에 정의된 저장 프로시저 이름은
callback.schema`에 지정된 스키마 아래의 ``setup_script.sql`파일에 존재해야 합니다.
해당 없음
scanner_packages.scanners.callback.version저장 프로시저에 대한 버전입니다. 현재는 ``1.0``만 지원됩니다.
해당 없음
다음 예는 매니페스트 파일의 내용을 보여줍니다.
manifest_version: '2.0'
scanner_packages:
- id: 'se_extension'
name: 'Security Extension'
short_description: 'Enhances security features and capabilities.'
description: 'This extension provides additional security features and capabilities to the platform.'
scanners:
- id: 'es_check'
name: 'NA event sharing check'
short_description: 'Checks for NA event sharing configurations.'
description: 'This scanner checks for event sharing configurations in the North America region.'
type: 'VULNERABILITY'
callback:
schema: 'security_essentials_na_consumer_es_check'
name: 'scan'
version: '1.0'
- id: 'se_mfa'
name: 'MFA Required for Users'
short_description: 'Ensures that MFA is required for all users.'
description: 'This scanner checks that Multi-Factor Authentication (MFA) is enforced for all users in the system.'
type: 'VULNERABILITY'
callback:
schema: 'security_essentials_mfa_required_for_users_check'
name: 'scan'
version: '1.0'
- id: 'se_client'
name: 'Client Security'
short_description: 'Ensures that client security best practices are followed.'
description: 'This scanner checks that client security best practices are enforced for all clients in the system.'
type: 'VULNERABILITY'
callback:
schema: 'security_essentials_client_security'
name: 'scan'
version: '1.0'
- id: 'cis_1_4'
name: 'Extension CIS 1_4'
short_description: 'Checks for compliance with CIS Benchmark 1.4.'
description: 'This scanner checks for compliance with the CIS Benchmark 1.4, ensuring that security best practices are followed.'
type: 'VULNERABILITY'
callback:
schema: 'security_essentials_cis1_4'
name: 'scan'
version: '1.0'
- id: 'cis_3_1'
name: 'Extension CIS 3_1'
short_description: 'Checks for compliance with CIS Benchmark 3.1.'
description: 'This scanner checks for compliance with the CIS Benchmark 3.1, ensuring that security best practices are followed.'
type: 'VULNERABILITY'
callback:
schema: 'security_essentials_cis3_1'
name: 'scan'
version: '1.0'
2단계: 스캐너 만들기¶
버전이 지정된 스키마 및 스캐너 논리를 구현하는 저장 프로시저를 만듭니다.
스캐너 패키지에 여러 스캐너가 포함된 경우 각 스캐너에 대해 서로 다른 버전 스키마를 사용하여 각 스캐너에 대해 다음 단계를 완료합니다.
스캐너 논리를 호스팅할 버전이 지정된 스키마를 만듭니다.
스키마의 이름은 :ref:`확장 프로그램 매니페스트 파일<label-trust_center_extensibility_model_create_scanner_package_manifest>`에서 스캐너에 지정된 스키마와 동일해야 합니다.
예를 들어, 다음 SQL 문은 이름이 ``security_essentials_mfa_required_for_users``인 버전이 지정된 스키마를 만듭니다.
CREATE OR ALTER VERSIONED SCHEMA security_essentials_mfa_required_for_users;
스캐너 논리를 구현하는 저장 프로시저를 만듭니다.
다음 예에서는
security_essentials_mfa_required_for_users스키마에 이름이 ``scan``인 저장 프로시저를 만듭니다.CREATE OR REPLACE PROCEDURE security_essentials_mfa_required_for_users.scan( run_id VARCHAR) RETURNS TABLE( risk_id VARCHAR, risk_name VARCHAR, total_at_risk_count NUMBER, scanner_type VARCHAR, risk_description VARCHAR, suggested_action VARCHAR, impact VARCHAR, severity VARCHAR, at_risk_entities ARRAY ) LANGUAGE SQL AS $$ -- Scanning logic -- $$;
저장 프로시저가 각 심각도 및 위험 ID 조합에 대해 정확히 하나의 행을 반환하는지 확인합니다.
반환된 테이블에는 다음 열이 있어야 합니다.
열
타입
설명
risk_idVARCHAR
위험의 식별자입니다.
risk_nameVARCHAR
위험의 이름입니다.
total_at_risk_countNUMBER
스캐너로 인해 위험에 처한 총 엔터티 수입니다. 스캐너가 위반을 감지하지 못하는 시나리오의 경우 값은 ``0``입니다. 위험에 처한 엔터티의 최대 개수는 1,000개이며, :ref:`배열<label-data_type_array>`에 있는 모든 값의 최대 결합 크기입니다. 128MB입니다.
scanner_typeVARCHAR
현재는
VULNERABILITY스캐너 유형만 지원됩니다.risk_descriptionVARCHAR
위험에 대한 설명입니다.
suggested_actionVARCHAR
수정을 위해 제안된 작업입니다.
impactVARCHAR
위험을 해결하지 않을 경우 발생할 수 있는 결과입니다.
severityVARCHAR
위험의 심각도 수준입니다. 가능한 값은 LOW, MEDIUM, HIGH, CRITICAL입니다.
at_risk_entitiesOBJECT값의 ARRAY
배열의 OBJECT 값 구조는 다음과 같습니다.
[ { "entity_id": <id>, "entity_name": "<name>", "entity_object_type": "<type>", "entity_detail": { ..., -- custom data } }, ... ]
OBJECT 값에는 다음 키-값 페어가 포함됩니다.
entity_id- 위험에 처한 엔터티의 ID에 해당하는 선택적 필드입니다.entity_name- 위험에 처한 엔터티의 이름에 해당하는 필수 필드입니다.entity_object_type- 위험에 처한 엔터티의 유형에 해당하는 필수 필드입니다. 예:APPLICATION,TASK, NETWORK_POLICY,SECURITY_INTEGRATION,ROLE,PROCEDURE,QUERY,DRIVER,PARAMETER,TABLE,STAGE,DATA_MASKING_POLICY,ROW_ACCESS_POLICY.entity_detail- 엔터티를 설명하는 사용자 지정 데이터입니다.
배열의 최대 크기는 128MB입니다.
스캐너가 위반을 감지하지 못하는 시나리오의 경우 값은 빈 목록입니다.
3단계: 확장 프로그램 만들기¶
*확장 프로그램*은 Native App에서 스캐너 패키지를 번들로 제공하고, Trust Center에서 액세스할 수 있도록 하며, Trust Center가 필요한 저장 프로시저를 호출할 수 있도록 권한을 구성합니다.
확장 프로그램을 만들려면 다음 단계를 완료합니다.
/developer-guide/native-apps/creating-setup-script`의 지침에 따라 확장 프로그램에 대한 ``setup_script.sql` 파일을 만듭니다.
setup_script.sql파일에서 이름이 ``trust_center_integration_role``인 애플리케이션 역할을 만듭니다.그런 다음 :ref:`버전이 지정된 스키마 및 저장 프로시저<label-trust_center_extensions_create_scanners>`에 대한 필수 권한을 해당 애플리케이션 역할에 부여합니다.
다음 예에서는 애플리케이션 역할 ``trust_center_integration_role``을 만든 후 필수 권한을 부여하는 방법을 보여줍니다.
CREATE APPLICATION ROLE IF NOT EXISTS trust_center_integration_role; GRANT USAGE ON SCHEMA security_essentials_mfa_required_for_users TO APPLICATION ROLE trust_center_integration_role; GRANT USAGE ON PROCEDURE security_essentials_mfa_required_for_users.scan(VARCHAR) TO APPLICATION ROLE trust_center_integration_role;
패키지의 모든 스캐너에 권한이 필요합니다.
/developer-guide/native-apps/manifest-overview`의 지침에 따라 확장 프로그램에 대한 ``manifest.yml` 파일을 만듭니다.
다음 예에서는 Trust Center 확장 프로그램에 대한
manifest.yml파일의 내용을 보여줍니다.manifest_version: 1 artifacts: setup_script: setup_script.sql readme: README.md privileges: - IMPORTED PRIVILEGES ON SNOWFLAKE DB: description: "Required access to SNOWFLAKE.ACCOUNT_USAGE views to scan for vulnerabilities"
:doc:`/developer-guide/native-apps/creating-app-package`의 지침에 따라 확장 프로그램에 대한 애플리케이션 패키지를 만듭니다.
:ref:`label-native_apps_relchan_register`의 지침에 따라 애플리케이션 패키지 버전을 등록합니다.
애플리케이션 패키지에 등록된 버전이 있는지 확인하려면 :doc:`/sql-reference/sql/show-versions`를 실행하면 됩니다.
:ref:`label-native_apps_application_creating_version`의 지침에 따라 등록된 버전을 기반으로 하는 애플리케이션을 만듭니다.
애플리케이션 오브젝트가 생성되었는지 확인하려면 :doc:`/sql-reference/sql/show-applications`를 실행하면 됩니다.
4단계: 권한 부여¶
확장 프로그램을 설치한 후 다음 단계를 완료하여 필요한 권한을 부여합니다.
`Snowsight를 사용하여 액세스 요청 관리하기`_의 지침에 따라 확장 프로그램에서 요청한 권한을 부여합니다.
SNOWFLAKE에 대한 확장 프로그램의 네임스페이스에 있는
trust_center_integration_role애플리케이션 역할을 부여하려면 GRANT APPLICATION ROLE 명령을 실행합니다.GRANT APPLICATION ROLE <extension_name>.trust_center_integration_role TO APPLICATION snowflake;
예를 들어,
tc_extension.trust_center_integration_role애플리케이션 역할을 SNOWFLAKE애플리케이션에 부여하려면 다음 명령을 실행합니다.GRANT APPLICATION ROLE tc_extension.trust_center_integration_role TO APPLICATION snowflake;
5단계: 확장 프로그램 등록하기¶
다음 저장 프로시저를 호출하여 확장 프로그램을 등록하거나 등록 취소할 수 있습니다.
Trust Center에 확장 프로그램을 등록하려면 다음 단계를 완료합니다.
SNOWFLAKE.TRUST_CENTER_ADMIN 애플리케이션 역할이 부여된 역할로 전환합니다.
SNOWFLAKE.TRUST_CENTER.REGISTER_EXTENSION 저장 프로시저를 호출합니다.
확장 프로그램에 대한 세부 정보를 보려면 SHOW APPLICATIONS 명령을 실행하면 됩니다. 애플리케이션 패키지 또는 목록 식별자는
source열에 있습니다.예를 들어
my_tc_package`라는 애플리케이션 패키지에서 설치된 `tc_extension확장 프로그램을 등록하려면 다음의 저장 프로시저를 호출합니다.CALL SNOWFLAKE.TRUST_CENTER.REGISTER_EXTENSION( 'APPLICATION PACKAGE', 'my_tc_package', 'tc_extension');
:doc:`/sql-reference/trust_center/extensions`를 쿼리하여 등록된 확장 프로그램에 대한 정보를 표시할 수 있습니다.
참고
확장 프로그램의 등록을 취소하려면 SNOWFLAKE.TRUST_CENTER.DEREGISTER_EXTENSION 저장 프로시저를 호출합니다.
:ref:`label-trust_center_view_scanner_packages`의 지침에 따라 확장 프로그램에서 제공하는 스캐너 패키지가 이제 Trust Center 스캐너 패키지 목록에 있는지 확인합니다.
6단계: 확장 프로그램 테스트¶
권한을 부여하고 스캐너 패키지를 활성화한 후 확장 프로그램을 테스트하고 SNOWFLAKE.TRUST_CENTER.FINDINGS 뷰를 쿼리하여 스캐너에서 생성된 결과를 검사합니다. 스캐너 실행에 실패한 경우 ERROR_CODE 및 ``ERROR_MESSAGE``를 확인하여 스캐너 오류를 디버깅합니다.
DATA_SHARING_USAGE 스키마</sql-reference/data-sharing-usage>`의 뷰를 사용하여 Trust Center 확장 프로그램에 대한 원격 분석 데이터를 모니터링할 수도 있습니다. 예를 들어, :doc:/sql-reference/data-sharing-usage/application-state-view`를 쿼리하여 확장 프로그램의 설치된 인스턴스 수를 찾고 :doc:`/sql-reference/data-sharing-usage/listing-access-history`를 쿼리하여 확장 프로그램의 컨슈머 사용량을 모니터링할 수 있습니다.
Trust Center 확장 프로그램 설치¶
스캐너 패키지가 포함된 서드 파티 확장 프로그램을 검색, 설치, 관리할 수 있습니다.
서드 파티 스캐너 패키지 설치 및 관리하기¶
1단계: 확장 프로그램 검색 및 설치하기¶
`Snowflake Marketplace`_에 게시된 Trust Center 확장 프로그램을 검색하고 설치하거나 비공개 목록을 사용하여 공유할 수 있습니다. Trust Center 확장 프로그램에는 하나 이상의 스캐너 패키지가 포함될 수 있습니다.
확장 프로그램을 검색하고 설치하려면 다음 단계를 따릅니다.
Snowsight 에 로그인합니다.
SNOWFLAKE.TRUST_CENTER_ADMIN 애플리케이션 역할이 부여된 역할로 전환합니다.
이 역할 부여에 대한 자세한 내용은 필수 권한 섹션을 참조하십시오.
탐색 메뉴에서 Governance & security » Trust Center 를 선택합니다.
Manage scanners 탭을 선택합니다.
계정에서 사용할 수 있는 확장 프로그램 목록을 보려면 :ui:`Extensions`를 선택합니다.
설치할 확장 프로그램을 선택합니다.
확장 프로그램의 Snowflake Marketplace 페이지가 열립니다.
목록에 액세스하려면 :ui:`Get`을 선택합니다.
선택 사항: Application name 의 경우 이름을 입력합니다.
확장 프로그램을 설치하려면 :ui:`Get`을 선택합니다.
설치가 완료되면, Snowsight 알림이 나타나고 계정과 연결된 이메일 주소로 이메일이 전송됩니다.
Native Apps 설치에 대한 자세한 내용은 컨슈머로서 Snowflake Native Apps 사용 및 관리하기 섹션을 참조하세요.
2단계: 새 스캐너 패키지 관리하기¶
확장 프로그램을 설치할 때 하나 이상의 스캐너 패키지를 설치할 수 있습니다. 새로 설치된 스캐너 패키지를 보려면 다음 단계를 완료합니다.
Snowsight 에 로그인합니다.
SNOWFLAKE.TRUST_CENTER_ADMIN 애플리케이션 역할이 부여된 역할로 전환합니다.
이 역할 부여에 대한 자세한 내용은 필수 권한 섹션을 참조하십시오.
탐색 메뉴에서 Governance & security » Trust Center 를 선택합니다.
Manage scanners 탭을 선택합니다.
스캐너 패키지 목록에는 각각의 새 스캐너 패키지에 대해 다음 정보가 표시됩니다.
NAME - 새 스캐너 패키지의 이름입니다.
SOURCE - 설치한 확장 프로그램의 이름입니다.
SCANNERS - 스캐너 패키지에서 활성화 및 비활성화된 스캐너의 수입니다.
STATUS - 스캐너 패키지의 상태입니다. 기본적으로 새로 설치된 스캐너 패키지는 비활성화되어 있습니다.
새 스캐너 패키지를 활성화하려면 다음 단계를 완료합니다.
스캐너 패키지 목록에서 스캐너 패키지를 선택합니다.
스캐너 패키지 페이지에서 :ui:`Enable package`를 선택합니다.
새 스캐너 패키지에 필요한 권한을 부여하려면 :ui:`Grant`를 선택합니다.
Enable 을 선택합니다.
활성화하려는 각 새 스캐너 패키지에 대해 이 단계를 반복합니다.
Trust Center에서 다른 스캐너 패키지를 관리하는 방식과 동일한 방식으로 새 스캐너 패키지를 관리할 수 있습니다. 예를 들어, 새 스캐너 패키지를 예약하거나 비활성화할 수 있습니다. 자세한 내용은 스캐너 패키지 관리 섹션을 참조하십시오.
다른 스캐너를 관리하는 방식과 동일한 방식으로 새 스캐너 패키지에서 스캐너를 관리할 수 있습니다. 예를 들어, 스캐너를 활성화, 비활성화 또는 예약할 수 있습니다. 자세한 내용은 스캐너 관리하기 섹션을 참조하십시오.
확장 프로그램과 연결된 Native App을 직접 모니터링하고 관리할 수도 있습니다. 자세한 내용은 앱 관리하기 섹션을 참조하십시오.
SNOWFLAKE.TRUST_CENTER.FINDINGS 뷰를 쿼리하여 확장 프로그램과 함께 설치된 스캐너 패키지에서 생성된 결과를 볼 수 있습니다. 예를 들어, 다음 쿼리는 :samp:`{extension_id}`가 :code:`4486988721`인 확장 프로그램과 함께 설치된 스캐너 패키지에 대한 결과를 반환합니다.
SELECT * FROM snowflake.trust_center.findings WHERE extension_id = 4486988721;
등록된 확장 프로그램의 식별자를 찾으려면 :doc:`/sql-reference/trust_center/extensions`를 쿼리합니다.
확장 프로그램 설치 및 등록 문제 해결하기¶
SNOWFLAKE.TRUST_CENTER.FINDINGS 뷰에서 쿼리가 COMPLETION_STATUS 열에 :code:`FAILED`를 반환하는 경우는 스캐너 실행이 실패한 것입니다. 스캐너 실패의 한 가지 가능한 이유는 확장 프로그램에 필요한 권한이 부여되지 않았기 때문입니다. :ref:`label-trust_center_extensions_grant_privileges`에 설명된 권한이 확장 프로그램에 부여되었는지 확인합니다.
필요한 권한을 부여한 후 스캐너 패키지를 다시 실행하여 새 결과를 생성합니다. SNOWFLAKE.TRUST_CENTER.FINDINGS 뷰에서 쿼리가 COMPLETION_STATUS 열에 :code:`FAILED`를 계속 반환하는 경우 Snowflake 지원에 문의하세요.