워크로드 ID 페더레이션

이 문서는 다음을 대상으로 합니다.

  • 사내 클라우드 서비스 개발자.

  • 내부 및 외부 서비스와의 통합을 관리하는 관리자.

  • 플랫폼에서 실행 중인 개별 워크로드에 `OpenID Connect(OIDC) Federation<https://openid.net/developers/how-connect-works/>`_ ID 토큰을 발급하여 각 고객 워크로드가 Snowflake에 전용 사용자로 인증될 수 있도록 하려는 다중 테넌트 SaaS 애플리케이션 개발자.

워크로드 ID 페더레이션은 애플리케이션, 서비스 또는 컨테이너와 같은 워크로드가 AWS Identity and Access Management (AWS IAM) 역할, Microsoft Entra ID 및 Google Cloud 서비스 계정과 같은 클라우드 공급자의 네이티브 ID 시스템을 사용하여 Snowflake에 인증하고, Snowflake에서 사용하고 유효성을 검사할 수 있는 증명을 가져올 수 있도록 지원하는 서비스 간 인증 방법입니다.

워크로드 ID 페더레이션을 사용하면 Snowflake에 대한 인증을 위해 비밀번호, API 키, 키 쌍, 프로그래밍 방식 액세스 토큰과 같은 장기 자격 증명을 관리하고 저장할 필요가 없습니다. 또한 워크로드 ID 페더레이션은 자격 증명을 가져오는 데 따르는 복잡성이 줄어듭니다. 반면 :doc:`외부 OAuth</user-guide/oauth-ext-overview>`와 같은 다른 방법은 설정하는 데 더 많은 노력이 필요할 수 있습니다. Snowflake 커넥터를 사용하는 애플리케이션, 서비스, 컨테이너는 각 플랫폼의 네이티브 메커니즘을 통해 해당 플랫폼의 ID 공급자(IdP)로부터 단기 자격 증명을 자동으로 가져옵니다.

이점

이 섹션에서는 인증에 워크로드 ID 페더레이션을 사용해야 하는 이유에 대해 설명합니다.

  • 비용 효율성: 기존 IdPs를 사용하여 서비스 ID를 관리하면 추가 도구 또는 라이선스의 필요성이 줄어 비용 효율적일 수 있습니다.

  • 상호 운용성: AWS IAM, Entra ID 및 |google-csp-short|와 같이 대중적인 클라우드 공급자 서비스는 외부 워크로드에 대한 인증 방법으로 워크로드 ID 페더레이션을 지원하고 권장합니다.

  • 편리한 감사 및 모니터링:

워크로드 ID 페더레이션 구현을 위한 워크플로

워크로드 ID 페더레이션을 사용하면 다양한 IdPs를 통해 다양한 워크로드를 인증할 수 있지만, 다음 단계에 표시된 기본 워크플로는 동일하게 유지됩니다.

  1. 워크로드 관리자는 공급자가 워크로드 ID의 *증명*을 발급할 수 있도록 네이티브 ID 공급자를 사용하도록 서비스를 구성합니다. 이러한 증명은 JSON 웹 토큰(JWT)인 경우가 많지만 항상 그런 것은 아닙니다.

  2. Snowflake 관리자는 워크로드에 대한 Snowflake 서비스 사용자를 생성합니다. 이 사용자의 속성을 공급자가 보낸 증명에 있는 값으로 설정합니다. 예를 들어, 사용자 속성은 IAM 역할 이름 또는 공급자의 발급자 URL을 지정할 수 있습니다.

  3. 워크로드 개발자는 :ref:`Snowflake 드라이버<label-wif_supported_drivers>`를 사용하도록 워크로드를 구성합니다. 드라이버는 검증을 위해 증명을 Snowflake로 보냅니다.

다양한 유형의 워크로드 및 IdPs에 대한 이 워크플로의 엔드 투 엔드 예제를 보려면 시작하기 섹션을 참조하세요.

액세스 제어 요구 사항

Snowflake 서비스 사용자, 즉 TYPE 속성이 ``SERVICE``로 설정된 사용자에 대한 워크로드 ID 페더레이션을 구성하려면 활성화된 역할에 다음 권한 중 하나를 부여해야 합니다.

  • 서비스 사용자에 대한 OWNERSHIP.

  • 서비스 사용자에 대한 MODIFY PROGRAMMATIC AUTHENTICATION METHODS.

지원되는 Snowflake 드라이버

워크로드는 Snowflake에 연결할 때 Snowflake 드라이버를 사용하여 증명을 보냅니다. 워크로드 ID 페더레이션을 지원하는 드라이버는 다음과 같습니다.

드라이버

최소 버전

Go

v1.16.0

JDBC

v3.26.0

.NET

v4.8.0

Node.js

v2.2.0

ODBC

v3.11.0

Python

v3.17.0

보안 태세 강화하기

:doc:`인증 정책</user-guide/authentication-policies>`을 사용하여 워크로드 ID 페더레이션으로 인증할 수 있는 Snowflake 서비스 사용자를 제어합니다. 지정된 ID 공급자 또는 해당 공급자 내의 계정을 사용하는 경우에만 워크로드가 인증할 수 있도록 인증 정책을 생성하고 설정할 수도 있습니다.

예를 들어, 다음 인증 정책은 워크로드가 |microsoft-idp|를 공급자로 사용하고 증명 발급자가 테넌트 ID``https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0``가 있는 |microsoft-idp| 테넌트인 경우에만 인증하도록 허용합니다.

CREATE AUTHENTICATION POLICY workload_policy
  WORKLOAD_IDENTITY_POLICY=(
    ALLOWED_PROVIDERS = (AZURE)
    ALLOWED_AZURE_ISSUERS = (
      'https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0')
  );
Copy

WORKLOAD_IDENTITY_POLICY 매개 변수에 대한 자세한 내용은 CREATE AUTHENTICATION POLICY 섹션을 참조하세요.

인증 정책이 적용되도록 설정하는 방법에 대한 자세한 내용은 계정 또는 사용자에 대한 인증 정책 설정하기 섹션을 참조하세요.

시작하기

AWS IAM 역할 및 Snowflake Python 드라이버를 사용하여 Snowflake에 인증하기

AWS 구성하기

AWS 서비스를 구성하여 AWS IAM을 ID 공급자로 사용하려면 IAM 역할을 연결합니다. 자세한 내용은 워크로드에 해당하는 AWS 설명서를 참조하세요.

Snowflake 구성하기

Snowflake를 구성하려면 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 Snowflake 서비스 사용자, 즉 SERVICE 유형의 사용자를 생성합니다.

시작하기 전에

Snowflake를 성공적으로 구성하려면 Snowflake에 인증하는 인스턴스와 연관된 AWS 사용자 또는 역할을 고유하게 식별하는 Amazon 리소스 식별자(ARN)가 있어야 합니다. IAM 역할의 ARN을 가져오려면 다음 단계를 완료합니다.

  1. AWS Console에 로그인한 후 IAM 대시보드로 이동합니다.

  2. 왼쪽 탐색 창에서 :extui:`Roles`를 선택합니다.

  3. AWS 인스턴스에 연결한 역할의 이름을 선택합니다.

  4. Summary 섹션에서 ARN을 찾은 후 Copy 아이콘을 선택합니다.

Snowflake는 다음 형식의 `IAM 식별자<https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html>`_를 허용합니다.

  • arn:aws:iam::account:user/user_name_with_path

  • arn:aws:iam::account:role/role_name_with_path

  • arn:aws:sts::account:assumed_role/role_name/role_session_name

워크로드에 대한 서비스 사용자를 생성:

  1. Snowsight 에 로그인합니다.

  2. 워크시트 목록을 열려면 Projects » :ui:`Worksheets`를 선택합니다.

  3. 새 SQL 워크시트를 열려면 :ui:`+`를 선택합니다.

  4. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 서비스 사용자를 생성하려면 워크시트의 CREATE USER 문을 실행합니다.

    CREATE USER <username>
      WORKLOAD_IDENTITY = (
        TYPE = AWS
        ARN = '<amazon_resource_identifier>'
      )
      TYPE = SERVICE
      DEFAULT_ROLE = PUBLIC;
    
    Copy

    여기서, :code:`ARN`은 이러한 단계를 시작하기 전에 가져온 값입니다.

Snowflake 드라이버를 사용하도록 워크로드 구성하기

참고

워크로드 ID 페더레이션을 지원하는 모든 Snowflake 드라이버를 사용하도록 워크로드를 구성할 수 있습니다. 전체 목록은 지원되는 Snowflake 드라이버 를 참조하십시오.

워크로드에 Python 드라이버가 필요한 경우 다음 단계를 완료합니다.

  1. :doc:`Python용 Snowflake Connector를 설치</developer-guide/python-connector/python-connector-install>`합니다.

  2. Python 애플리케이션 코드에서 다음 소스 코드를 추가합니다.

    import os
    import snowflake.connector
    
    
    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='AWS'
    )
    
    Copy
  3. Python 애플리케이션을 실행합니다. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증합니다.

Microsoft Entra ID 및 Snowflake Python 드라이버를 사용하여 Snowflake에 인증하기

워크로드 ID 페더레이션을 사용하여 |microsoft-idp|에서 Snowflake에 인증하려면 아래 나열된 각 섹션의 단계를 완료합니다.

Microsoft Entra ID 구성하기

Microsoft Entra ID 테넌트 관리자가 Snowflake 워크로드 ID 사용을 허용하려면 다음 단계를 완료해야 합니다. 해당 단계는 Microsoft Entra ID 테넌트당 한 번만 수행해야 합니다.

  1. Microsoft Azure 포털에 로그인합니다.

  2. Azure tenant 관리자 권한이 있는지 확인합니다.

  3. `동의 URI<https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=fd3f753b-eed3-462c-b6a7-a4b5bb650aad&response_type=none&scope=openid&redirect_uri=https://www.snowflake.com/>`_를 방문하여 다중 테넌트 Snowflake EntraID 앱 설치에 동의합니다.

    다중 테넌트 Snowflake EntraID 앱은 게시자 검증을 받았으며 Snowflake를 리소스로 나타냅니다. 앱은 Snowflake에 인증할 때 액세스 토큰의 대상 그룹으로 사용됩니다. 이 앱에는 기본 권한만 필요하며 특권이 없습니다.

  4. :ui:`Accept`를 선택하여 Snowflake EntraID 앱에 권한을 부여합니다.

Microsoft Azure 구성하기

Microsoft Azure 서비스를 구성하여 워크로드 ID 페더레이션을 사용하려면 다음 단계를 완료합니다.

  1. Microsoft Azure 포털에 로그인합니다.

  2. `가상 머신<https://learn.microsoft.com/en-us/azure/virtual-machines/>`_ 또는 `앱 서비스<https://learn.microsoft.com/en-us/azure/app-service>`_와 같은 워크로드를 선택합니다.

  3. 사이드바에서 Security »:ui:`Identity`로 이동합니다.

  4. `Azure VM<https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-configure-managed-identities?pivots=qs-configure-portal-windows-vm#system-assigned-managed-identity>`_ 또는 `Azure 함수<https://learn.microsoft.com/en-us/azure/app-service/overview-managed-identity?tabs=portal%2Chttp>`_에 대한 관리 ID를 활성화합니다.

  5. 이후 단계를 위해 :extui:`Object (Principal) ID`를 저장합니다.

Snowflake 구성하기

Snowflake를 구성하려면 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 Snowflake 서비스 사용자, 즉 SERVICE 유형의 사용자를 생성합니다.

시작하기 전에

Snowflake를 성공적으로 구성하려면 다음 정보가 필요합니다.

  • 이전 단계<label-wif_azure_configure_azure>`에서 활성화된 관리 ID의 대문자와 소문자를 구분하는 오브젝트 ID(주체 ID) . Azure Portal을 사용하여 Azure VM 또는 함수에 대한 :extui:`Identity 페이지에서 이 식별자를 복사할 수 있습니다.

  • Microsoft Entra 테넌트 ID. 이 값을 사용하여 인증 URL을 구성합니다.

워크로드에 대한 서비스 사용자를 생성:

  1. Snowsight 에 로그인합니다.

  2. 워크시트 목록을 열려면 Projects » :ui:`Worksheets`를 선택합니다.

  3. 새 SQL 워크시트를 열려면 :ui:`+`를 선택합니다.

  4. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 서비스 사용자를 생성하려면 워크시트의 CREATE USER 문을 실행합니다.

    CREATE USER <username>
      WORKLOAD_IDENTITY = (
        TYPE = AZURE
        ISSUER = 'https://login.microsoftonline.com/<tenant_id>/v2.0'
        SUBJECT = '<managed_identity_object_id>'
      )
      TYPE = SERVICE
      DEFAULT_ROLE = PUBLIC;
    
    Copy

    여기서, ISSUER 및 :code:`SUBJECT`는 해당 단계를 시작하기 전에 가져온 값입니다.

Snowflake 드라이버를 사용하도록 워크로드 구성하기

참고

워크로드 ID 페더레이션을 지원하는 모든 Snowflake 드라이버를 사용하도록 워크로드를 구성할 수 있습니다. 전체 목록은 지원되는 Snowflake 드라이버 를 참조하십시오.

워크로드에 Python 드라이버가 필요한 경우 다음 단계를 완료합니다.

  1. :doc:`Python용 Snowflake Connector를 설치</developer-guide/python-connector/python-connector-install>`합니다.

  2. Python 애플리케이션 코드에서 다음 소스 코드를 추가합니다.

    import snowflake.connector
    
    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='AZURE'
    )
    
    Copy
  3. Python 애플리케이션을 실행합니다. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증합니다.

참고

워크로드 개발자는 워크로드 관리자가 활성화한 관리 ID와 관련된 환경 변수를 설정해야 할 수도 있습니다. 관리자가 시스템에서 할당한 ID가 아닌 `사용자가 할당한 관리 ID<https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-managed-identities-work-vm#user-assigned-managed-identity>`_를 활성화한 경우 MANAGED_IDENTITY_CLIENT_ID 환경 변수를 Snowflake에 인증하는 데 사용할 관리 ID의 클라이언트 ID로 설정해야 합니다.

Google Cloud 및 Snowflake Python 드라이버를 사용하여 Snowflake에 인증하기

Google Cloud 구성하기

|google-csp|를 ID 공급자로 사용하도록 서비스를 구성하려면 `GCE 또는 Cloud Run 인스턴스에 서비스를 연결<https://cloud.google.com/compute/docs/instances/change-service-account>`_합니다.

Snowflake 구성하기

Snowflake를 구성하려면 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 Snowflake 서비스 사용자, 즉 SERVICE 유형의 사용자를 생성합니다.

시작하기 전에

Snowflake를 성공적으로 구성하려면 서비스 계정의 uniqueId 속성 값이 있어야 합니다. 이 고유한 ID를 가져오려면 Google Cloud CLI를 사용하여 다음 명령을 실행합니다.

gcloud iam service-accounts describe "<SERVICE_ACCOUNT_EMAIL_ADDRESS>" --format="value(uniqueId)"
Copy

워크로드에 대한 서비스 사용자를 생성:

  1. Snowsight 에 로그인합니다.

  2. 워크시트 목록을 열려면 Projects » :ui:`Worksheets`를 선택합니다.

  3. 새 SQL 워크시트를 열려면 :ui:`+`를 선택합니다.

  4. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 서비스 사용자를 생성하려면 워크시트의 CREATE USER 문을 실행합니다.

    CREATE USER <username>
      WORKLOAD_IDENTITY = (
        TYPE = GCP
        SUBJECT = '<unique_id_of_service_account>'
      )
      TYPE = SERVICE
      DEFAULT_ROLE = PUBLIC;
    
    Copy

    여기서, :code:`SUBJECT`는 해당 단계를 시작하기 전에 가져온 값입니다.

Snowflake 드라이버를 사용하도록 워크로드 구성하기

참고

워크로드 ID 페더레이션을 지원하는 모든 Snowflake 드라이버를 사용하도록 워크로드를 구성할 수 있습니다. 전체 목록은 지원되는 Snowflake 드라이버 를 참조하십시오.

워크로드에 Python 드라이버가 필요한 경우 다음 단계를 완료합니다.

  1. :doc:`Python용 Snowflake Connector를 설치</developer-guide/python-connector/python-connector-install>`합니다.

  2. Python 애플리케이션 코드에서 다음 소스 코드를 추가합니다.

    import snowflake.connector
    
    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='GCP'
    )
    
    Copy
  3. Python 애플리케이션을 실행합니다. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증합니다.

|aws-kubernetes|의 OpenID Connect(OIDC) 발급자를 사용하여 Snowflake에 인증하기

워크로드 ID 페더레이션을 사용하여 |aws-kubernetes|에서 Snowflake에 인증하려면 아래 나열된 각 섹션의 단계를 완료합니다.

EKS 구성하기

  1. Snowflake와 호환되는 ID 토큰을 발급하도록 |aws-kubernetes-short|를 구성합니다.

    1. `포드 배포 YAML을 구성하여 예상되는 ServiceAccount 토큰 볼륨을 포함<https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#launch-a-pod-using-service-account-token-projection>`_합니다.

    2. ``snowflakecomputing.com``을 통해 대상 그룹 클레임을 포함하도록 ID 토큰을 구성합니다.

      다음은 적절한 대상 그룹을 포함하는 YAML 구성의 예제입니다.

      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          name: nginx
          volumeMounts:
          - mountPath: /var/run/secrets/tokens
            name: snowflake-token
        serviceAccountName: build-robot
        volumes:
        - name: snowflake-token
          projected:
            sources:
            - serviceAccountToken:
                path: snowflake-token
                expirationSeconds: 7200
                audience: snowflakecomputing.com
      
      Copy

Snowflake 구성하기

Snowflake를 구성하려면 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 Snowflake 서비스 사용자, 즉 SERVICE 유형의 사용자를 생성합니다.

시작하기 전에

Snowflake를 성공적으로 구성하려면 다음 정보가 필요합니다.

  • Kubernetes 서비스 계정의 ID 토큰을 생성하는 OIDC 공급자의 발급자 URL. 이 발급자 URL을 가져오려면 다음 작업 중 하나를 수행합니다.

    • 클러스터의 Overview 탭으로 이동하여 OpenID Connect provider URL 필드의 값을 복사합니다.

    • API 서버 엔드포인트에 대한 액세스 권한으로 다음 명령을 실행합니다.

      aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text
      
      Copy
  • Kubernetes 서비스 계정의 네임스페이스 및 이름. 이 정보를 사용하여 OIDC 공급자가 발행한 ID 토큰의 주체를 구성합니다.

워크로드에 대한 서비스 사용자를 생성:

  1. Snowsight 에 로그인합니다.

  2. 워크시트 목록을 열려면 Projects » :ui:`Worksheets`를 선택합니다.

  3. 새 SQL 워크시트를 열려면 :ui:`+`를 선택합니다.

  4. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 서비스 사용자를 생성하려면 워크시트의 CREATE USER 문을 실행합니다.

    CREATE USER my_eks_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = 'https://oidc.eks.<region>.amazonaws.com/id/<issuer_id>'
        SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>'
      )
      TYPE = SERVICE;
    
    Copy

    여기서, ISSUER 및 :code:`SUBJECT`는 해당 단계를 시작하기 전에 가져온 값입니다.

Snowflake 드라이버를 사용하도록 워크로드 구성하기

참고

워크로드 ID 페더레이션을 지원하는 모든 Snowflake 드라이버를 사용하도록 워크로드를 구성할 수 있습니다. 전체 목록은 지원되는 Snowflake 드라이버 를 참조하십시오.

워크로드에 Python 드라이버가 필요한 경우 다음 단계를 완료합니다.

  1. :doc:`Python용 Snowflake Connector를 설치</developer-guide/python-connector/python-connector-install>`합니다.

  2. Python 애플리케이션 코드에서 다음 소스 코드를 추가합니다.

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token_file_path='<service_account_token_path>'
    )
    
    Copy

    여기서, service_account_token_path`는 :ref:`label-wif_oidc_aws_kubernetes_configure_aws 단계에서 생성한 토큰입니다. 해당 단계의 YAML 예제를 기반으로 토큰 경로는 ``/var/run/secrets/tokens/snowflake-token``이 됩니다.

  3. Python 애플리케이션을 실행합니다. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증합니다.

|microsoft-azure-kubernetes|의 OpenID Connect(OIDC) 발급자를 사용하여 Snowflake에 인증하기

워크로드 ID 페더레이션을 사용하여 |microsoft-azure-kubernetes|에서 Snowflake에 인증하려면 아래 나열된 각 섹션의 단계를 완료합니다.

AKS 구성하기

Snowflake와 호환되는 ID 토큰을 발급하도록 AKS 구성하기:

  1. `AKS 클러스터에 OIDC 발급자를 활성화<https://learn.microsoft.com/en-us/azure/aks/use-oidc-issuer>`_합니다.

  2. Snowflake와 호환되는 ID 토큰을 발급하도록 |microsoft-azure-kubernetes-short|를 구성합니다.

    1. `포드 배포 YAML을 구성하여 예상되는 ServiceAccount 토큰 볼륨을 포함<https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#launch-a-pod-using-service-account-token-projection>`_합니다.

    2. ``snowflakecomputing.com``을 통해 대상 그룹 클레임을 포함하도록 ID 토큰을 구성합니다.

      다음은 적절한 대상 그룹을 포함하는 YAML 구성의 예제입니다.

      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          name: nginx
          volumeMounts:
          - mountPath: /var/run/secrets/tokens
            name: snowflake-token
        serviceAccountName: build-robot
        volumes:
        - name: snowflake-token
          projected:
            sources:
            - serviceAccountToken:
                path: snowflake-token
                expirationSeconds: 7200
                audience: snowflakecomputing.com
      
      Copy

Snowflake 구성하기

Snowflake를 구성하려면 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 Snowflake 서비스 사용자, 즉 SERVICE 유형의 사용자를 생성합니다.

시작하기 전에

Snowflake를 성공적으로 구성하려면 다음 정보가 필요합니다.

워크로드에 대한 서비스 사용자를 생성:

  1. Snowsight 에 로그인합니다.

  2. 워크시트 목록을 열려면 Projects » :ui:`Worksheets`를 선택합니다.

  3. 새 SQL 워크시트를 열려면 :ui:`+`를 선택합니다.

  4. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 서비스 사용자를 생성하려면 워크시트의 CREATE USER 문을 실행합니다.

    CREATE USER my_aks_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = 'https://<region>.oic.prod-aks.azure.com/<tenant_id>/<uuid>/'
        SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>'
      )
      TYPE = SERVICE;
    
    Copy

    여기서, ISSUER 및 :code:`SUBJECT`는 해당 단계를 시작하기 전에 가져온 값입니다.

Snowflake 드라이버를 사용하도록 워크로드 구성하기

참고

워크로드 ID 페더레이션을 지원하는 모든 Snowflake 드라이버를 사용하도록 워크로드를 구성할 수 있습니다. 전체 목록은 지원되는 Snowflake 드라이버 를 참조하십시오.

워크로드에 Python 드라이버가 필요한 경우 다음 단계를 완료합니다.

  1. :doc:`Python용 Snowflake Connector를 설치</developer-guide/python-connector/python-connector-install>`합니다.

  2. Python 애플리케이션 코드에서 다음 소스 코드를 추가합니다.

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token_file_path='<service_account_token_path>'
    )
    
    Copy

    여기서, service_account_token_path`는 :ref:`label-wif_oidc_azure_kubernetes_configure_azure 단계에서 생성한 토큰입니다. 해당 단계의 YAML 예제를 기반으로 토큰 경로는 ``/var/run/secrets/tokens/snowflake-token``이 됩니다.

  3. Python 애플리케이션을 실행합니다. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증합니다.

|google-kubernetes|의 OpenID Connect(OIDC) 발급자를 사용하여 Snowflake에 인증하기

워크로드 ID 페더레이션을 사용하여 |google-kubernetes|에서 Snowflake에 인증하려면 아래 나열된 각 섹션의 단계를 완료합니다.

GKE 구성하기

  1. Snowflake와 호환되는 ID 토큰을 발급하도록 |google-kubernetes-short|를 구성합니다.

    1. `포드 배포 YAML을 구성하여 예상되는 ServiceAccount 토큰 볼륨을 포함<https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#launch-a-pod-using-service-account-token-projection>`_합니다.

    2. ``snowflakecomputing.com``을 통해 대상 그룹 클레임을 포함하도록 ID 토큰을 구성합니다.

      다음은 적절한 대상 그룹을 포함하는 YAML 구성의 예제입니다.

      kind: Pod
      metadata:
        name: nginx
      spec:
        containers:
        - image: nginx
          name: nginx
          volumeMounts:
          - mountPath: /var/run/secrets/tokens
            name: snowflake-token
        serviceAccountName: build-robot
        volumes:
        - name: snowflake-token
          projected:
            sources:
            - serviceAccountToken:
                path: snowflake-token
                expirationSeconds: 7200
                audience: snowflakecomputing.com
      
      Copy

Snowflake 구성하기

Snowflake를 구성하려면 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 Snowflake 서비스 사용자, 즉 SERVICE 유형의 사용자를 생성합니다.

시작하기 전에

Snowflake를 성공적으로 구성하려면 다음 정보가 필요합니다.

  • Google Cloud 프로젝트 ID, 클러스터의 리전 및 클러스터 이름. 이 정보를 사용하여 OIDC 발급자를 구성합니다.

  • Kubernetes 서비스 계정의 네임스페이스 및 이름. 이 정보를 사용하여 OIDC 공급자가 발행한 ID 토큰의 주체를 구성합니다.

워크로드에 대한 서비스 사용자를 생성:

  1. Snowsight 에 로그인합니다.

  2. 워크시트 목록을 열려면 Projects » :ui:`Worksheets`를 선택합니다.

  3. 새 SQL 워크시트를 열려면 :ui:`+`를 선택합니다.

  4. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 서비스 사용자를 생성하려면 워크시트의 CREATE USER 문을 실행합니다.

    CREATE USER my_gke_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = 'https://container.googleapis.com/v1/projects/<project_id>/locations/<region>/clusters/<cluster_name>'
        SUBJECT = 'system:serviceaccount:<service_account_namespace>:<service_account_name>'
      )
      TYPE = SERVICE;
    
    Copy

    여기서, ISSUER 및 :code:`SUBJECT`는 해당 단계를 시작하기 전에 가져온 값입니다.

Snowflake 드라이버를 사용하도록 워크로드 구성하기

참고

워크로드 ID 페더레이션을 지원하는 모든 Snowflake 드라이버를 사용하도록 워크로드를 구성할 수 있습니다. 전체 목록은 지원되는 Snowflake 드라이버 를 참조하십시오.

워크로드에 Python 드라이버가 필요한 경우 다음 단계를 완료합니다.

  1. :doc:`Python용 Snowflake Connector를 설치</developer-guide/python-connector/python-connector-install>`합니다.

  2. Python 애플리케이션 코드에서 다음 소스 코드를 추가합니다.

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token_file_path='<service_account_token_path>'
    )
    
    Copy

    여기서, service_account_token_path`는 :ref:`label-wif_oidc_google_kubernetes_configure_google 단계에서 생성한 토큰입니다. 해당 단계의 YAML 예제를 기반으로 토큰 경로는 ``/var/run/secrets/tokens/snowflake-token``이 됩니다.

  3. Python 애플리케이션을 실행합니다. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증합니다.

사용자 지정 OpenID Connect(OIDC) 공급자를 사용하여 Snowflake에 인증하기

워크로드 ID 페더레이션을 사용하여 사용자 지정 OIDC 공급자에서 Snowflake에 인증하려면 아래 나열된 각 섹션의 단계를 완료합니다.

OIDC 공급자 구성하기

  1. 디스커버리 사양에 지정된 대로 OIDC 공급자가 OpenID 구성<https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderConfig>`_을 지원하는지 확인합니다. 구성 구성의 ``jwks_uri` 엔드포인트는 공개적으로 액세스할 수 있어야 합니다.

  2. snowflakecomputing.com 또는 비어 있지 않은 사용자 지정 목록으로 설정된 대상 클레임으로 ID 토큰을 발급하도록 OpenID 공급자를 구성합니다. 비어 있지 않은 사용자 지정 목록을 정의하는 경우 Snowflake에서 서비스 사용자를 생성할 때 지정해야 합니다.

Snowflake 구성하기

Snowflake를 구성하려면 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 Snowflake 서비스 사용자, 즉 SERVICE 유형의 사용자를 생성합니다.

시작하기 전에

Snowflake를 성공적으로 구성하려면 다음 정보가 필요합니다.

  • OIDC 공급자의 발급자 URL.

  • 워크로드와 관련된 주제 클레임.

워크로드에 대해 발급된 ID 토큰에서 isssub 클레임을 구문 분석하여 두 값을 모두 가져올 수 있습니다. 예를 들어 jq, cat, ``echo``를 사용하여 Unix 계열 환경에 액세스할 수 있는 경우 파일에 ID 토큰을 저장하고 다음 명령을 실행합니다.

ID_TOKEN_PATH=<id_token_path>

JWS_PAYLOAD=$(cat $ID_TOKEN_PATH | jq -R 'split(".") | .[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson')
echo "ISSUER = '$(echo $JWS_PAYLOAD | jq -r .iss)'"
echo "SUBJECT = '$(echo $JWS_PAYLOAD | jq -r .sub)'"
Copy

ID 토큰을 가져오는 방법을 알아보려면 OIDC 공급자에 대한 설명서를 참조하십시오.

워크로드에 대한 서비스 사용자를 생성:

  1. Snowsight 에 로그인합니다.

  2. 워크시트 목록을 열려면 Projects » :ui:`Worksheets`를 선택합니다.

  3. 새 SQL 워크시트를 열려면 :ui:`+`를 선택합니다.

  4. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증하는 서비스 사용자를 생성하려면 워크시트의 CREATE USER 문을 실행합니다.

    CREATE USER my_custom_service
      WORKLOAD_IDENTITY = (
        TYPE = OIDC
        ISSUER = '<issuer>'
        SUBJECT = '<subject>'
        OIDC_AUDIENCE_LIST = ('<custom_audience>')
      )
      TYPE = SERVICE;
    
    Copy

    여기서

    • ISSUER 및 :code:`SUBJECT`는 해당 단계를 시작하기 전에 가져온 값입니다.

    • :code:`OIDC_AUDIENCE_LIST`는 :ref:`label-wif_oidc_custom_configure_custom`에 설정된 ID 토큰의 대상 그룹 클레임의 비어 있지 않은 상위 ​​집합입니다. ID 토큰의 대상 그룹 클레임이 ``snowflakecomputing.com``인 경우 :code:`OIDC_AUDIENCE_LIST`를 지정할 필요가 없습니다.

Snowflake 드라이버를 사용하도록 워크로드 구성하기

참고

워크로드 ID 페더레이션을 지원하는 모든 Snowflake 드라이버를 사용하도록 워크로드를 구성할 수 있습니다. 전체 목록은 지원되는 Snowflake 드라이버 를 참조하십시오.

워크로드에 Python 드라이버가 필요한 경우 다음 단계를 완료합니다.

  1. :doc:`Python용 Snowflake Connector를 설치</developer-guide/python-connector/python-connector-install>`합니다.

  2. Python 애플리케이션 코드에서 다음 소스 코드를 추가합니다.

    conn = snowflake.connector.connect(
      account='<snowflake_account>',
      authenticator='WORKLOAD_IDENTITY',
      workload_identity_provider='OIDC',
      token='<id_token>'
    )
    
    Copy

    여기서, :samp:`{id_token}`은 워크로드에 대한 OIDC 공급자에서 받은, 만료되지 않은 ID 토큰입니다. 이 토큰을 가져오는 방법을 알아보려면 OIDC 공급자에 대한 설명서를 참조하세요.

  3. Python 애플리케이션을 실행합니다. 워크로드 ID 페더레이션을 사용하여 Snowflake에 인증합니다.

제한 사항 및 고려 사항

  • Azure 워크로드는 Azure China 및 Azure US 정부와 같은 Azure 소버린 클라우드에 위치할 수 없습니다. 이 제한 사항은 계정의 Snowflake 리전과 관련이 없습니다.