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>`이 있는 사용자가 해당 역할에 다음 권한을 부여해야 합니다.

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단계: 확장 프로그램 매니페스트 파일 만들기

다양한 스캐너 패키지 및 스캐너에 대한 정보와 메타데이터가 포함된 매니페스트 파일을 만듭니다.

  1. 매니페스트 파일을 만듭니다.

    매니페스트 파일의 요구 사항은 다음과 같습니다.

    • 매니페스트 파일의 이름은 tc_extension_manifest.yml 이어야 합니다.

    • tc_extension_manifest.yml 파일은 Native App manifest.yml 파일이 있는 명명된 스테이지의 디렉터리 구조 루트에 있어야 합니다.

    매니페스트 파일에는 스캐너 패키지 속성과 스캐너 패키지에 포함된 모든 스캐너가 나열됩니다.

    매니페스트 파일에 대해 다음 정의를 사용합니다.

    manifest_version: '2.0'
    scanner_packages:
    - id: ''
      name: ''
      short_description: ''
      description: ''
      scanners:
        - id: ''
          name: ''
          short_description: ''
          description: ''
          type: 'VULNERABILITY'
          callback:
            schema: ''
            name: ''
            version: ''
    
    Copy

    매니페스트 파일에는 다음과 같은 속성이 있습니다.

    속성

    설명

    최대 문자 수

    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, nameversion`을 지원하는 :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'
Copy

2단계: 스캐너 만들기

버전이 지정된 스키마 및 스캐너 논리를 구현하는 저장 프로시저를 만듭니다.

스캐너 패키지에 여러 스캐너가 포함된 경우 각 스캐너에 대해 서로 다른 버전 스키마를 사용하여 각 스캐너에 대해 다음 단계를 완료합니다.

  1. 스캐너 논리를 호스팅할 버전이 지정된 스키마를 만듭니다.

    스키마의 이름은 :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;
    
    Copy
  2. 스캐너 논리를 구현하는 저장 프로시저를 만듭니다.

    다음 예에서는 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 --
      $$;
    
    Copy

    저장 프로시저가 각 심각도 및 위험 ID 조합에 대해 정확히 하나의 행을 반환하는지 확인합니다.

    반환된 테이블에는 다음 열이 있어야 합니다.

    타입

    설명

    risk_id

    VARCHAR

    위험의 식별자입니다.

    risk_name

    VARCHAR

    위험의 이름입니다.

    total_at_risk_count

    NUMBER

    스캐너로 인해 위험에 처한 총 엔터티 수입니다. 스캐너가 위반을 감지하지 못하는 시나리오의 경우 값은 ``0``입니다. 위험에 처한 엔터티의 최대 개수는 1,000개이며, :ref:`배열<label-data_type_array>`에 있는 모든 값의 최대 결합 크기입니다. 128MB입니다.

    scanner_type

    VARCHAR

    현재는 VULNERABILITY 스캐너 유형만 지원됩니다.

    risk_description

    VARCHAR

    위험에 대한 설명입니다.

    suggested_action

    VARCHAR

    수정을 위해 제안된 작업입니다.

    impact

    VARCHAR

    위험을 해결하지 않을 경우 발생할 수 있는 결과입니다.

    severity

    VARCHAR

    위험의 심각도 수준입니다. 가능한 값은 LOW, MEDIUM, HIGH, CRITICAL입니다.

    at_risk_entities

    OBJECT값의 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가 필요한 저장 프로시저를 호출할 수 있도록 권한을 구성합니다.

확장 프로그램을 만들려면 다음 단계를 완료합니다.

  1. /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;
    
    Copy

    패키지의 모든 스캐너에 권한이 필요합니다.

  2. /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"
    
    Copy
  3. :doc:`/developer-guide/native-apps/creating-app-package`의 지침에 따라 확장 프로그램에 대한 애플리케이션 패키지를 만듭니다.

  4. :ref:`label-native_apps_relchan_register`의 지침에 따라 애플리케이션 패키지 버전을 등록합니다.

    애플리케이션 패키지에 등록된 버전이 있는지 확인하려면 :doc:`/sql-reference/sql/show-versions`를 실행하면 됩니다.

  5. :ref:`label-native_apps_application_creating_version`의 지침에 따라 등록된 버전을 기반으로 하는 애플리케이션을 만듭니다.

    애플리케이션 오브젝트가 생성되었는지 확인하려면 :doc:`/sql-reference/sql/show-applications`를 실행하면 됩니다.

4단계: 권한 부여

확장 프로그램을 설치한 후 다음 단계를 완료하여 필요한 권한을 부여합니다.

  1. `Snowsight를 사용하여 액세스 요청 관리하기`_의 지침에 따라 확장 프로그램에서 요청한 권한을 부여합니다.

  2. SNOWFLAKE에 대한 확장 프로그램의 네임스페이스에 있는 trust_center_integration_role 애플리케이션 역할을 부여하려면 GRANT APPLICATION ROLE 명령을 실행합니다.

    GRANT APPLICATION ROLE <extension_name>.trust_center_integration_role
      TO APPLICATION snowflake;
    
    Copy

    예를 들어, tc_extension.trust_center_integration_role 애플리케이션 역할을 SNOWFLAKE애플리케이션에 부여하려면 다음 명령을 실행합니다.

    GRANT APPLICATION ROLE tc_extension.trust_center_integration_role
      TO APPLICATION snowflake;
    
    Copy

5단계: 확장 프로그램 등록하기

다음 저장 프로시저를 호출하여 확장 프로그램을 등록하거나 등록 취소할 수 있습니다.

Trust Center에 확장 프로그램을 등록하려면 다음 단계를 완료합니다.

  1. SNOWFLAKE.TRUST_CENTER_ADMIN 애플리케이션 역할이 부여된 역할로 전환합니다.

  2. 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');
    
    Copy

    :doc:`/sql-reference/trust_center/extensions`를 쿼리하여 등록된 확장 프로그램에 대한 정보를 표시할 수 있습니다.

    참고

    확장 프로그램의 등록을 취소하려면 SNOWFLAKE.TRUST_CENTER.DEREGISTER_EXTENSION 저장 프로시저를 호출합니다.

  3. :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 확장 프로그램에는 하나 이상의 스캐너 패키지가 포함될 수 있습니다.

확장 프로그램을 검색하고 설치하려면 다음 단계를 따릅니다.

  1. Snowsight 에 로그인합니다.

  2. SNOWFLAKE.TRUST_CENTER_ADMIN 애플리케이션 역할이 부여된 역할로 전환합니다.

    이 역할 부여에 대한 자세한 내용은 필수 권한 섹션을 참조하십시오.

  3. 탐색 메뉴에서 Governance & security » Trust Center 를 선택합니다.

  4. Manage scanners 탭을 선택합니다.

  5. 계정에서 사용할 수 있는 확장 프로그램 목록을 보려면 :ui:`Extensions`를 선택합니다.

  6. 설치할 확장 프로그램을 선택합니다.

    확장 프로그램의 Snowflake Marketplace 페이지가 열립니다.

  7. 목록에 액세스하려면 :ui:`Get`을 선택합니다.

  8. 선택 사항: Application name 의 경우 이름을 입력합니다.

  9. 확장 프로그램을 설치하려면 :ui:`Get`을 선택합니다.

설치가 완료되면, Snowsight 알림이 나타나고 계정과 연결된 이메일 주소로 이메일이 전송됩니다.

Native Apps 설치에 대한 자세한 내용은 컨슈머로서 Snowflake Native Apps 사용 및 관리하기 섹션을 참조하세요.

2단계: 새 스캐너 패키지 관리하기

확장 프로그램을 설치할 때 하나 이상의 스캐너 패키지를 설치할 수 있습니다. 새로 설치된 스캐너 패키지를 보려면 다음 단계를 완료합니다.

  1. Snowsight 에 로그인합니다.

  2. SNOWFLAKE.TRUST_CENTER_ADMIN 애플리케이션 역할이 부여된 역할로 전환합니다.

    이 역할 부여에 대한 자세한 내용은 필수 권한 섹션을 참조하십시오.

  3. 탐색 메뉴에서 Governance & security » Trust Center 를 선택합니다.

  4. Manage scanners 탭을 선택합니다.

    스캐너 패키지 목록에는 각각의 새 스캐너 패키지에 대해 다음 정보가 표시됩니다.

    • NAME - 새 스캐너 패키지의 이름입니다.

    • SOURCE - 설치한 확장 프로그램의 이름입니다.

    • SCANNERS - 스캐너 패키지에서 활성화 및 비활성화된 스캐너의 수입니다.

    • STATUS - 스캐너 패키지의 상태입니다. 기본적으로 새로 설치된 스캐너 패키지는 비활성화되어 있습니다.

  5. 새 스캐너 패키지를 활성화하려면 다음 단계를 완료합니다.

    1. 스캐너 패키지 목록에서 스캐너 패키지를 선택합니다.

    2. 스캐너 패키지 페이지에서 :ui:`Enable package`를 선택합니다.

    3. 새 스캐너 패키지에 필요한 권한을 부여하려면 :ui:`Grant`를 선택합니다.

    4. Enable 을 선택합니다.

    활성화하려는 각 새 스캐너 패키지에 대해 이 단계를 반복합니다.

Trust Center에서 다른 스캐너 패키지를 관리하는 방식과 동일한 방식으로 새 스캐너 패키지를 관리할 수 있습니다. 예를 들어, 새 스캐너 패키지를 예약하거나 비활성화할 수 있습니다. 자세한 내용은 스캐너 패키지 관리 섹션을 참조하십시오.

다른 스캐너를 관리하는 방식과 동일한 방식으로 새 스캐너 패키지에서 스캐너를 관리할 수 있습니다. 예를 들어, 스캐너를 활성화, 비활성화 또는 예약할 수 있습니다. 자세한 내용은 스캐너 관리하기 섹션을 참조하십시오.

확장 프로그램과 연결된 Native App을 직접 모니터링하고 관리할 수도 있습니다. 자세한 내용은 앱 관리하기 섹션을 참조하십시오.

SNOWFLAKE.TRUST_CENTER.FINDINGS 뷰를 쿼리하여 확장 프로그램과 함께 설치된 스캐너 패키지에서 생성된 결과를 볼 수 있습니다. 예를 들어, 다음 쿼리는 :samp:`{extension_id}`가 :code:`4486988721`인 확장 프로그램과 함께 설치된 스캐너 패키지에 대한 결과를 반환합니다.

SELECT * FROM snowflake.trust_center.findings WHERE extension_id = 4486988721;
Copy

등록된 확장 프로그램의 식별자를 찾으려면 :doc:`/sql-reference/trust_center/extensions`를 쿼리합니다.

Trust Center 결과에 대한 자세한 내용은 결과보안 위험 보기 섹션을 참조하세요.

확장 프로그램 설치 및 등록 문제 해결하기

SNOWFLAKE.TRUST_CENTER.FINDINGS 뷰에서 쿼리가 COMPLETION_STATUS 열에 :code:`FAILED`를 반환하는 경우는 스캐너 실행이 실패한 것입니다. 스캐너 실패의 한 가지 가능한 이유는 확장 프로그램에 필요한 권한이 부여되지 않았기 때문입니다. :ref:`label-trust_center_extensions_grant_privileges`에 설명된 권한이 확장 프로그램에 부여되었는지 확인합니다.

필요한 권한을 부여한 후 스캐너 패키지를 다시 실행하여 새 결과를 생성합니다. SNOWFLAKE.TRUST_CENTER.FINDINGS 뷰에서 쿼리가 COMPLETION_STATUS 열에 :code:`FAILED`를 계속 반환하는 경우 Snowflake 지원에 문의하세요.