Openflow와 함께 Workload Identity Federation 사용하기

Openflow와 함께 Workload Identity Federation 사용하기

Workload Identity Federation(WIF)을 사용하면 Openflow 런타임이 액세스 키, 클라이언트 시크릿, 서비스 계정 키 같은 장기 자격 증명을 저장하지 않고도 AWS, Microsoft Azure, Google Cloud 등 외부 클라우드 서비스에 인증할 수 있습니다.

출처: Snowflake 문서

본문

Workload Identity Federation(WIF)을 사용하면 Openflow 런타임이 Amazon Web Services(AWS), Microsoft Azure, Google Cloud 등 외부 클라우드 서비스에 액세스 키, 클라이언트 시크릿, 서비스 계정 키 같은 장기 자격 증명을 저장하지 않고도 인증할 수 있습니다. Snowflake가 OpenID Connect(OIDC) 공급자 역할을 합니다. 런타임은 Snowflake에서 단기, 서명 토큰을 얻고 이를 클라우드 계정의 임시, 범위 지정 자격 증명으로 교환합니다.

이것은 Openflow가 Snowpark Container Services(SPCS)에서 실행될 때 특히 유용합니다. 여기서 컴퓨팅은 자체 계정이 아닌 Snowflake의 클라우드 계정에서 실행됩니다. 컴퓨팅에 ID를 부착하는 전통적인 클라우드 인증 메커니즘(예: AWS 인스턴스 프로파일 또는 서비스 계정용 IAM 역할)을 사용할 수 없으므로 정적 자격 증명이 유일한 옵션이 됩니다. Snowflake 자체가 ID 토큰을 발행하므로 런타임은 컴퓨팅이 어디에서 실행되든 클라우드 계정으로 페더레이션할 수 있으며 정적 시크릿을 저장할 필요가 없습니다.

참고: 이 주제는 Openflow가 Workload Identity Federation을 소비하도록 구성하는 방법을 설명합니다. 이 기능의 기반이 되는 Snowflake 개념(시크릿 객체, 트러스트 관계, 토큰 발행)은 외부 서비스에 접근하는 Snowflake 워크로드를 위한 Workload identity federation 문서를 참조하세요.

작동 방식

  1. WORKLOAD_IDENTITY_FEDERATION 유형의 Snowflake 시크릿을 만듭니다. Snowflake는 고유한 issuer URL을 가진 OIDC 공급자가 되고, 시크릿은 고유한 subject 식별자를 가진 OIDC 클라이언트가 됩니다.
  2. 클라우드 공급자 쪽에서 issuer URL과 subject 식별자를 사용하여 트러스트 관계를 설정합니다.
  3. Openflow에서 SnowflakeWorkloadIdentityTokenProvider 컨트롤러 서비스가 구성된 audience에 대해 Snowflake에서 서명 토큰을 얻습니다.
  4. 클라우드별 자격 증명 컨트롤러 서비스가 해당 토큰을 임시 클라우드 자격 증명으로 교환하며, Openflow 프로세서와 매개변수 공급자는 이를 사용하여 클라우드 리소스에 접근합니다.

사전 요구 사항

  • 런타임이 있는 Openflow Snowflake 배포(SPCS). Set up Openflow - Snowflake Deployment - Task overview 참조.
  • Snowflake에서 시크릿, 네트워크 규칙, 외부 액세스 통합을 생성할 권한.
  • 대상 클라우드 공급자(AWS IAM, Microsoft Entra ID 또는 Google Cloud IAM)에서 트러스트 관계를 구성할 관리자 접근 권한.

Snowflake 시크릿 생성

WORKLOAD_IDENTITY_FEDERATION 유형의 시크릿을 만듭니다. 시크릿은 스키마 수준 객체이므로 특정 데이터베이스와 스키마에 생성됩니다.

USE ROLE ACCOUNTADMIN;

CREATE DATABASE IF NOT EXISTS wif_demo;
CREATE SCHEMA IF NOT EXISTS wif_demo.secrets_schema;

CREATE SECRET wif_demo.secrets_schema.my_demo
    TYPE = WORKLOAD_IDENTITY_FEDERATION;

자세한 내용은 CREATE SECRET 문서를 참조하세요. 클라우드 공급자 쪽 트러스트 관계를 구성하는 데 필요한 두 값을 검색하려면 시크릿을 설명(describe)하세요:

DESC SECRET wif_demo.secrets_schema.my_demo;

출력에서 다음 값을 기록하세요:

열 (Column) 설명 (Description)
workload_identity_federation_issuer OIDC 공급자로서의 Snowflake issuer URL입니다. 토큰의 iss 클레임과 비교됩니다.
workload_identity_federation_subject OIDC 클라이언트로서의 워크로드 식별자입니다. 토큰의 sub 클레임과 비교됩니다.

참고: issuer는 Snowflake 계정에 고유하며 계정에서 생성된 모든 시크릿에 동일합니다. subject는 각 시크릿에 고유합니다.

Openflow 런타임에 할당된 execute-as 역할에 데이터베이스, 스키마, 시크릿에 대한 USAGE 권한을 부여하세요:

GRANT USAGE ON DATABASE wif_demo TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;
GRANT USAGE ON SCHEMA wif_demo.secrets_schema TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;
GRANT USAGE ON SECRET wif_demo.secrets_schema.my_demo TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;

공통 Openflow 컨트롤러 서비스 설정

다음 컨트롤러 서비스는 모든 클라우드 공급자에 필요합니다.

Snowflake Connection Service

아직 없다면(Snowflake 제공 커넥터에는 기본적으로 하나 포함됨) SnowflakeConnectionService 컨트롤러 서비스 인스턴스를 만들고 Authentication Strategy를 Snowflake Managed Token으로 설정하세요. 컨트롤러 서비스를 활성화하세요. 참고: 컨트롤러 서비스의 구성 보기에서 Verify를 선택하여 활성화 전에 구성이 올바른지 확인할 수 있습니다.

Snowflake Workload Identity Token Provider

다음 구성으로 SnowflakeWorkloadIdentityTokenProvider 컨트롤러 서비스 인스턴스를 만드세요:

  • Connection Pooling Service: Snowflake Connection Service를 참조.
  • Snowflake Secret Name: 시크릿의 정규화된 이름(예: wif_demo.secrets_schema.my_demo).
  • Audience: 클라우드 공급자 쪽 ID 공급자에 구성된 audience 값(아래 클라우드별 섹션 참조).

컨트롤러 서비스를 활성화하세요.

AWS

IAM ID 공급자 생성

참고: IAM ID 공급자는 Snowflake 계정당 한 번만 생성하세요.

  1. AWS 콘솔에서 IAM » Identity providers로 이동하여 Add provider를 선택합니다.
  2. Provider type에서 OpenID Connect를 선택합니다.
  3. Provider URL에 workload_identity_federation_issuer 값을 입력합니다.
  4. Audience에 원하는 값(예: snowflake)을 입력합니다. Snowflake Workload Identity Token Provider 컨트롤러 서비스의 Audience와 같은 값을 사용하세요.
  5. Add provider를 선택합니다.

IAM 역할 및 정책 생성

  1. AWS 콘솔에서 IAM » Roles로 이동하여 Create role을 선택합니다.
  2. Trusted entity type에서 Web identity를 선택합니다.
  3. Identity provider에서 생성한 ID 공급자를 선택하고 정의한 audience를 선택합니다.
  4. 키가 :sub로 끝나고, 조건이 StringEquals이며, 값이 workload_identity_federation_subject 값인 조건을 추가합니다. 이는 Snowflake 시크릿과 IAM 역할 사이에 일대일 관계를 만듭니다.
  5. Openflow 런타임이 접근해야 하는 리소스에 필요한 정책을 연결하고 역할 이름을 지정하여 생성합니다.

Openflow 구성에 사용할 역할의 Amazon Resource Name(ARN)을 저장하세요.

참고: 단일 시크릿과 여러 IAM 역할 사이에 일대다 매핑을 만들 수 있습니다. 예를 들어 한 Snowflake 역할에는 읽기 전용 접근을, 다른 역할에는 읽기/쓰기 접근을 부여하려면 역할의 트러스트 정책을 편집하여 Openflow 런타임에 할당된 execute-as 역할 이름과 같은 sf_rnm 클레임에 조건을 추가하세요:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::<ACCOUNT_ID>:oidc-provider/identity.snowflake.com/oauth2/<PATH>"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "identity.snowflake.com/oauth2/<PATH>:sub": "<SUBJECT>",
          "identity.snowflake.com/oauth2/<PATH>:aud": "snowflake",
          "identity.snowflake.com/oauth2/<PATH>:sf_rnm": "AWS_RO"
        }
      }
    }
  ]
}

외부 액세스 통합 구성

리소스 자체에 대한 네트워크 규칙 외에도 토큰을 교환하는 데 사용되는 AWS Security Token Service(STS) 엔드포인트에 대한 접근을 허용하는 네트워크 규칙을 추가하세요. 다음 예시는 STS와 Amazon SQS에 대한 접근을 허용합니다:

USE ROLE SECURITYADMIN;

USE DATABASE openflow_db;
USE SCHEMA openflow_schema;

CREATE NETWORK RULE openflow_sqs_network_rule
    MODE = EGRESS
    TYPE = HOST_PORT
    VALUE_LIST = ('sts.eu-central-1.amazonaws.com:443', 'sqs.eu-central-1.amazonaws.com:443');

CREATE EXTERNAL ACCESS INTEGRATION openflow_sqs_eai
    ALLOWED_NETWORK_RULES = (openflow_sqs_network_rule)
    ENABLED = TRUE;

GRANT USAGE ON INTEGRATION openflow_sqs_eai TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;

Amazon S3(예: ListS3 또는 FetchS3Object 프로세서)의 경우 STS와 리전 및 전역 S3 엔드포인트를 모두 허용하세요. AWS SDK는 리전 또는 전역 S3 엔드포인트 중 하나를 사용하여 연결할 수 있습니다. Snowflake 네트워크 규칙은 정확한 호스트 이름 일치를 요구하므로 두 형태와 virtual-hosted 버킷 URL이 사용하는 와일드카드 변형을 모두 허용하세요. 다음 예시에서 각 리전 항목의 us-east-1을 버킷 리전으로 바꾸세요:

USE ROLE SECURITYADMIN;
USE DATABASE openflow_db;
USE SCHEMA openflow_schema;

CREATE NETWORK RULE openflow_s3_network_rule
    MODE = EGRESS
    TYPE = HOST_PORT
    VALUE_LIST = (
      'sts.us-east-1.amazonaws.com:443',
      's3.us-east-1.amazonaws.com:443',
      's3.amazonaws.com:443',
      '*.s3.us-east-1.amazonaws.com:443',
      '*.s3.amazonaws.com:443'
    );

CREATE EXTERNAL ACCESS INTEGRATION openflow_s3_eai
    ALLOWED_NETWORK_RULES = (openflow_s3_network_rule)
    ENABLED = TRUE;

GRANT USAGE ON INTEGRATION openflow_s3_eai TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;

외부 액세스 통합을 만든 후에는 런타임과 연결하세요. Set up Openflow - Snowflake Deployment: Configure allowed domains for Openflow connectors를 참조하세요.

AWS Credentials Provider Service 구성

대부분의 구성 요소가 AWS 서비스와 상호작용하려면 AWSCredentialsProviderControllerService 컨트롤러 서비스를 구성하세요:

  • Assume Role ARN: 생성한 IAM 역할의 ARN.
  • Assume Role Session Name: 세션을 식별하는 설명 문자열.
  • Assume Role STS Region: STS 엔드포인트 리전(접근하는 리소스와 같은 리전).
  • OAuth2 Access Token Provider: Snowflake Workload Identity Token Provider 컨트롤러 서비스를 참조.

컨트롤러 서비스를 활성화하세요.

AWS 구성 요소 구성

AWS 구성 요소(예: ListS3 또는 ConsumeKinesis)가 생성한 자격 증명 컨트롤러 서비스를 참조하도록 구성하세요. 이는 AWS Secrets Manager 매개변수 공급자에도 적용됩니다. 그러나 매개변수 공급자는 흐름 수준 구성 요소가 아닙니다. 매개변수 공급자가 참조할 수 있도록 흐름 컨트롤러 수준(Controller Settings » Management controller services)에서 컨트롤러 서비스를 만드세요.

IAM 인증을 사용하는 AWS MSK

ConsumeKafka 프로세서에서 Kafka Connection Service 속성이 AmazonMSKConnectionService 컨트롤러 서비스를 참조하도록 설정하세요. 구성 요소 선택기가 이 이름의 서비스 두 개를 나열하면 Snowflake 배지가 없는 것을 선택하세요. Snowflake 배지 서비스는 더 이상 사용되지 않으며 workload identity federation을 지원하지 않습니다. 컨트롤러 서비스에서 다음 속성을 순서대로 설정하세요. 각 선택은 다음 단계에 필요한 속성을 드러냅니다:

  • Security Protocol을 SASL_SSL로 설정.
  • SASL Mechanism을 AWS_MSK_IAM으로 설정.
  • AWS Role Source를 Web Identity Provider로 설정하면 다음 속성이 드러납니다:
  • AWS Assume Role Session Name: 세션을 식별하는 설명 문자열.
  • AWS Web Identity Token Provider: Snowflake Workload Identity Token Provider 컨트롤러 서비스를 참조.
  • AWS Web Identity STS Region: STS 엔드포인트 리전(MSK 인스턴스와 같은 리전).

IAM 인증을 사용하는 AWS RDS for PostgreSQL

  1. RDS 인스턴스의 STS 리전을 사용하여 Configure the AWS Credentials Provider Service에서 설명한 대로 AWSCredentialsProviderControllerService를 만듭니다.
  2. AwsRdsIamDatabasePasswordProvider 컨트롤러 서비스를 만듭니다:
  3. Region: RDS 인스턴스와 같은 리전.
  4. DBCPConnectionPool 컨트롤러 서비스에서 Password Source를 Password Provider로 설정하고 Database Password Provider가 AwsRdsIamDatabasePasswordProvider를 참조하도록 설정합니다.

Azure

Microsoft Entra ID에 애플리케이션 등록

  1. Microsoft Entra ID에서 새 애플리케이션을 등록하고 이름을 지정합니다.
  2. 애플리케이션의 Tenant ID와 Client ID를 기록합니다.
  3. Certificates & secrets » Federated credentials로 이동하여 Add credential을 선택합니다.
  4. 시나리오로 Other issuer를 선택합니다.
  5. Issuer에 workload_identity_federation_issuer 값을 입력합니다. Value(subject 식별자)에는 workload_identity_federation_subject 값을 입력합니다. 자격 증명에 이름을 지정하고 Audience를 기록하세요. Snowflake Workload Identity Token Provider 컨트롤러 서비스의 Audience와 같은 값을 설정합니다.

외부 액세스 통합 구성

리소스 자체에 대한 네트워크 규칙 외에도 토큰을 교환하는 데 사용되는 Microsoft 로그인 엔드포인트(login.microsoftonline.com)에 대한 접근을 허용하는 네트워크 규칙을 추가하세요. 다음 예시는 Azure Key Vault에 대한 접근도 허용합니다:

USE ROLE SECURITYADMIN;

USE DATABASE openflow_db;
USE SCHEMA openflow_schema;

CREATE NETWORK RULE openflow_azure_network_rule
    MODE = EGRESS
    TYPE = HOST_PORT
    VALUE_LIST = ('login.microsoftonline.com:443', 'myvault.vault.azure.net:443');

CREATE EXTERNAL ACCESS INTEGRATION openflow_azure_eai
    ALLOWED_NETWORK_RULES = (openflow_azure_network_rule)
    ENABLED = TRUE;

GRANT USAGE ON INTEGRATION openflow_azure_eai TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;

참고: 토큰 교환에 필요한 엔드포인트는 login.microsoftonline.com입니다. 접근하는 서비스에 따라 다른 엔드포인트를 추가하세요. myvault.vault.azure.net은 Key Vault 서비스의 예시일 뿐입니다.

외부 액세스 통합을 만든 후에는 런타임과 연결하세요. Set up Openflow - Snowflake Deployment: Configure allowed domains for Openflow connectors를 참조하세요.

Azure Identity Federation Token Provider 구성

Openflow에서 Controller Settings » Management controller services(Snowflake Connection Service와 Snowflake Workload Identity Token Provider를 추가한 곳)로 이동하여 StandardAzureIdentityFederationTokenProvider 인스턴스를 추가하세요:

  • Snowflake Workload Identity Token Provider 컨트롤러 서비스를 참조.
  • 등록한 Entra 애플리케이션의 Tenant ID와 Client ID를 설정.

계속하기 전에 Verify를 선택하여 토큰을 교환할 수 있는지 확인하세요.

Azure Credentials Controller Service 구성

StandardAzureCredentialsControllerService 컨트롤러 서비스를 추가하고 전략으로 Identity Federation을 선택한 뒤 Azure Identity Federation Token Provider 컨트롤러 서비스를 참조하세요. 모든 컨트롤러 서비스를 활성화하세요.

Azure Key Vault 매개변수 공급자로 시크릿 접근

  1. Azure에서 Key Vault를 만들고 Openflow에서 매개변수로 사용할 시크릿을 추가합니다.
  2. Key Vault에서 Access control(IAM)로 이동하여 역할 할당을 추가합니다. Entra 애플리케이션(서비스 주체)에 Key Vault Secrets User 역할을 할당하고 할당을 검토·승인합니다.
  3. Openflow에서 Parameter Providers로 이동하여 AzureKeyVaultSecretsParameterProvider를 추가합니다:
  4. Vault URI: Key Vault 개요 페이지에 표시된 URI.
  5. Verify를 선택하여 시크릿에 대한 접근을 확인합니다.

Microsoft Entra ID를 통한 AWS

AWS 계정이 Microsoft Entra ID를 OIDC ID 공급자로 신뢰하고 Snowflake를 다른 ID 공급자로 등록할 수 없을 때 이 대안을 사용하세요. Openflow는 Snowflake ID를 Entra를 통해 연결합니다. Snowflake가 서명된 JWT를 발행하고, Entra가 JWT를 액세스 토큰으로 교환하며, AWS Security Token Service(STS)가 Entra 토큰을 임시 AWS 자격 증명으로 교환합니다.

중요: 이 절차에는 Openflow Runtime Extensions 2026.8.6.2 이상이 필요합니다. 이전 버전에서는 JWT Bearer OAuth2 Access Token Provider가 이 구성에 필요한 외부 어설션(external assertion) 속성을 포함하지 않습니다.

Microsoft Entra 애플리케이션 구성

  1. Microsoft Entra ID에서 새 애플리케이션을 등록하거나 기존 애플리케이션을 선택합니다. 애플리케이션의 Tenant ID와 Client ID를 기록합니다.
  2. Expose an API로 이동하여 Application ID URI를 api://<CLIENT_ID>로 설정합니다. 참고: Application ID URI를 설정하지 않으면 api://<CLIENT_ID>/.default 범위를 사용한 요청이 AADSTS500011 오류로 실패합니다.
  3. Certificates & secrets » Federated credentials로 이동하여 Add credential을 선택하고 자격 증명을 구성합니다:
  4. Issuer에 workload_identity_federation_issuer 값을 입력합니다.
  5. Subject identifier에 workload_identity_federation_subject 값을 입력합니다.
  6. Audience에 api://AzureADTokenExchange를 사용합니다.
  7. Enterprise applications로 이동하여 애플리케이션을 선택하고 개요 페이지에서 Object ID를 기록합니다. 이는 AWS 트러스트 정책의 sub 조건에 사용하는 서비스 주체 Object ID입니다.

참고: Enterprise applications의 Object ID는 App registrations의 Object ID와 다릅니다. App Registration Object ID를 AWS sub 조건에 사용하면 AWS STS가 토큰을 거부합니다.

IAM ID 공급자 생성

  1. AWS 콘솔에서 IAM » Identity providers로 이동하여 Add provider를 선택합니다.
  2. Provider type에서 OpenID Connect를 선택합니다.
  3. Provider URL에 https://sts.windows.net/<TENANT_ID>/을 입력합니다. 끝에 슬래시를 포함하세요.
  4. Audience에 Entra Application ID URI인 api://<CLIENT_ID>를 입력합니다.
  5. Add provider를 선택합니다.

참고: audience로 https://graph.microsoft.com을 사용하지 마세요. AWS ID 공급자 audience는 Entra 토큰의 aud 클레임과 일치해야 하며, 이 구성에서는 api://<CLIENT_ID>입니다. 그렇지 않으면 AWS STS가 InvalidIdentityToken을 반환합니다.

IAM 역할 생성

ID 공급자를 신뢰하는 IAM 역할을 만들고 Openflow 런타임이 접근하는 AWS 리소스에 필요한 정책을 연결하세요. 다음 트러스트 정책은 Entra 애플리케이션에 대한 접근을 제한합니다:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::<ACCOUNT_ID>:oidc-provider/sts.windows.net/<TENANT_ID>/"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "sts.windows.net/<TENANT_ID>/:sub": "<SERVICE_PRINCIPAL_OBJECT_ID>",
          "sts.windows.net/<TENANT_ID>/:aud": "api://<CLIENT_ID>"
        }
      }
    }
  ]
}

Openflow 구성에 사용할 역할의 ARN을 저장하세요.

외부 액세스 통합 구성

흐름이 사용하는 Entra 토큰 엔드포인트, AWS STS 엔드포인트, AWS 서비스 엔드포인트에 대한 접근을 허용하세요. 다음 예시는 Entra, AWS STS, Amazon S3에 대한 접근을 허용합니다. <REGION>을 버킷 리전으로 바꾸세요:

USE ROLE SECURITYADMIN;
USE DATABASE openflow_db;
USE SCHEMA openflow_schema;

CREATE NETWORK RULE openflow_entra_aws_network_rule
    MODE = EGRESS
    TYPE = HOST_PORT
    VALUE_LIST = (
      'login.microsoftonline.com:443',
      'sts.<REGION>.amazonaws.com:443',
      's3.<REGION>.amazonaws.com:443',
      's3.amazonaws.com:443',
      '*.s3.<REGION>.amazonaws.com:443',
      '*.s3.amazonaws.com:443'
    );

CREATE EXTERNAL ACCESS INTEGRATION openflow_entra_aws_eai
    ALLOWED_NETWORK_RULES = (openflow_entra_aws_network_rule)
    ENABLED = TRUE;

GRANT USAGE ON INTEGRATION openflow_entra_aws_eai TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;

외부 액세스 통합을 만든 후에는 런타임과 연결하세요. Set up Openflow - Snowflake Deployment: Configure allowed domains for Openflow connectors를 참조하세요.

Openflow 컨트롤러 서비스 구성

이 페이지 앞부분에서 설명한 공통 컨트롤러 서비스 외에 다음 컨트롤러 서비스를 만드세요:

  1. Snowflake Workload Identity Token Provider에서 Audience를 api://AzureADTokenExchange로 설정합니다. 이 값은 Entra 페더레이션 자격 증명의 audience와 일치해야 합니다.
  2. StandardWebClientServiceProvider 컨트롤러 서비스를 만들고 활성화합니다. 기본 속성 값을 사용할 수 있습니다.
  3. 다음 구성으로 JWTBearerOAuth2AccessTokenProvider 컨트롤러 서비스를 만듭니다:
  4. External Assertion Provider: Snowflake Workload Identity Token Provider를 참조.
  5. Token Endpoint URL: https://login.microsoftonline.com/<TENANT_ID>/oauth2/v2.0/token.
  6. Grant Type: client_credentials.
  7. Assertion Parameter Name: client_assertion.
  8. Web Client Service: Standard Web Client Service Provider를 참조.
  9. JWT Bearer OAuth2 Access Token Provider에 다음 동적 속성을 추가합니다:
  10. JWT Bearer OAuth2 Access Token Provider에서 Verify를 선택하여 Snowflake-to-Entra 토큰 교환을 확인한 다음 컨트롤러 서비스를 활성화합니다.
  11. 다음 구성으로 AWSCredentialsProviderControllerService 컨트롤러 서비스를 만듭니다:
  12. Assume Role ARN: 생성한 IAM 역할의 ARN.
  13. Assume Role Session Name: 세션을 식별하는 설명 문자열.
  14. Assume Role STS Region: STS 엔드포인트 리전.
  15. AWS Credentials Provider Service를 활성화하고 ListS3 같은 AWS 구성 요소가 이를 참조하도록 구성합니다.

참고: JWT Bearer OAuth2 Access Token Provider의 Verify 작업은 Snowflake-to-Entra 교환을 확인합니다. AWS Credentials Provider Service에는 Verify 작업이 없습니다. AWS 프로세서가 실행될 때 AWS STS 교환을 실행합니다.

각 교환에서 올바른 audience를 사용하세요. 이 체인은 Snowflake 토큰과 Entra 토큰에 서로 다른 audience 값을 사용합니다:

값 (Value) 구성 위치 (Where you configure it) 용도 (Purpose)
api://AzureADTokenExchange Snowflake Workload Identity Token Provider 및 Entra 페더레이션 자격 증명 Snowflake 발행 JWT의 audience.
api://<CLIENT_ID>/.default JWT Bearer OAuth2 Access Token Provider의 scope Entra에서 요청하는 범위.
api://<CLIENT_ID> AWS IAM OIDC 공급자 audience 및 트러스트 정책 aud 조건 AWS가 검증하는 Entra 액세스 토큰의 audience.

이 값들은 서로 바꿀 수 없습니다. 예를 들어 AWS ID 공급자 audience를 api://AzureADTokenExchange로 구성하면 AWS STS가 InvalidIdentityToken을 반환합니다.

GCP

Workload identity pool 및 공급자 생성

참고: workload identity pool과 그 OIDC 공급자는 한 번 생성하면 Snowflake 계정의 시크릿에서 재사용할 수 있습니다.

Google Cloud에서 workload identity pool을 만들고 해당 pool에 OpenID Connect(OIDC) 공급자를 추가하세요. 공급자를 다음 값으로 구성합니다:

  • Issuer (URL): workload_identity_federation_issuer 값.
  • Allowed audiences: 원하는 audience 값. 이 값은 Snowflake Workload Identity Token Provider 컨트롤러 서비스의 Audience 및 GCP Credentials Controller Service의 Audience와 동일해야 합니다. 흔히 공급자 리소스 이름 자체를 선택합니다.
  • Attribute mapping: google.subject를 assertion.sub에 매핑합니다. 이는 Snowflake 토큰의 subject 클레임을 IAM 바인딩에 사용되는 principal ID에 매핑합니다.

예를 들어 gcloud CLI를 사용하면:

gcloud iam workload-identity-pools create openflow-pool     --location="global"     --display-name="Openflow WIF pool"

gcloud iam workload-identity-pools providers create-oidc snowflake-provider     --location="global"     --workload-identity-pool="openflow-pool"     --issuer-uri="<WORKLOAD_IDENTITY_FEDERATION_ISSUER>"     --attribute-mapping="google.subject=assertion.sub"     --allowed-audiences="//iam.googleapis.com/projects/<PROJECT_NUMBER>/locations/global/workloadIdentityPools/openflow-pool/providers/snowflake-provider"

공급자 리소스 이름(위 audience로 사용됨)을 기록하세요. Openflow 구성에 필요합니다:

//iam.googleapis.com/projects/<PROJECT_NUMBER>/locations/global/workloadIdentityPools/openflow-pool/providers/snowflake-provider

Workload identity principal에 접근 권한 부여

참고: 서비스 계정 가장(impersonation)은 현재 지원되지 않습니다. 역할을 workload identity principal에 직접 부여하세요.

Snowflake 시크릿에 해당하는 principal에 필요한 IAM 역할을 직접 부여하세요. principal은 workload_identity_federation_subject 값에서 파생됩니다:

principal://iam.googleapis.com/projects/<PROJECT_NUMBER>/locations/global/workloadIdentityPools/openflow-pool/subject/<SUBJECT>

예를 들어 Cloud Storage 버킷에 읽기 전용 접근을 부여하려면:

gcloud storage buckets add-iam-policy-binding gs://<BUCKET_NAME>     --role="roles/storage.objectViewer"     --member="principal://iam.googleapis.com/projects/<PROJECT_NUMBER>/locations/global/workloadIdentityPools/openflow-pool/subject/<SUBJECT>"

역할과 리소스를 Openflow 런타임이 접근해야 하는 것에 맞게 조정하세요.

외부 액세스 통합 구성

리소스 자체에 대한 네트워크 규칙 외에도 토큰을 교환하는 데 사용되는 Google Security Token Service(STS) 엔드포인트(sts.googleapis.com)에 대한 접근을 허용하는 네트워크 규칙을 추가하세요. 다음 예시는 Cloud Storage에 대한 접근도 허용합니다:

USE ROLE SECURITYADMIN;

USE DATABASE openflow_db;
USE SCHEMA openflow_schema;

CREATE NETWORK RULE openflow_gcs_network_rule
    MODE = EGRESS
    TYPE = HOST_PORT
    VALUE_LIST = ('sts.googleapis.com:443', 'storage.googleapis.com:443');

CREATE EXTERNAL ACCESS INTEGRATION openflow_gcs_eai
    ALLOWED_NETWORK_RULES = (openflow_gcs_network_rule)
    ENABLED = TRUE;

GRANT USAGE ON INTEGRATION openflow_gcs_eai TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;

참고: 서비스 계정 가장을 사용하지 않으므로 iamcredentials.googleapis.com은 필요하지 않습니다.

외부 액세스 통합을 만든 후에는 런타임과 연결하세요. Set up Openflow - Snowflake Deployment: Configure allowed domains for Openflow connectors를 참조하세요.

GCP Credentials Controller Service 구성

AWS와 Azure와 달리 GCP는 Workload Identity Federation 전략을 통해 Snowflake 토큰을 직접 소비하는 단일 자격 증명 컨트롤러 서비스를 사용합니다. GCPCredentialsControllerService 컨트롤러 서비스를 추가하세요:

  • Authentication Strategy: Workload Identity Federation.
  • Audience: 공급자 리소스 이름. 예: //iam.googleapis.com/projects/<PROJECT_NUMBER>/locations/global/workloadIdentityPools/openflow-pool/providers/snowflake-provider. GCP OIDC 공급자에 구성된 allowed audiences 및 Snowflake Workload Identity Token Provider의 Audience와 일치해야 합니다.
  • Subject Token Provider: Snowflake Workload Identity Token Provider 컨트롤러 서비스를 참조.
  • Subject Token Type: 기본값(urn:ietf:params:oauth:token-type:jwt) 유지.
  • Scope: 더 좁은 범위가 필요하지 않으면 기본값(https://www.googleapis.com/auth/cloud-platform) 유지.
  • STS Token Endpoint: 기본값(https://sts.googleapis.com/v1/token) 유지.

컨트롤러 서비스를 활성화하세요. Verify를 선택하여 토큰을 교환할 수 있는지 확인하세요.

GCP 구성 요소 구성

GCP 구성 요소(예: Cloud Storage 또는 BigQuery 프로세서)가 생성한 GCP Credentials Controller Service를 참조하도록 구성하세요. 다른 클라우드 공급자와 마찬가지로 GCP 자격 증명을 필요로 하는 매개변수 공급자(매개변수 공급자는 흐름 수준 구성 요소가 아님)를 사용한다면, 매개변수 공급자가 참조할 수 있도록 GCP Credentials Controller Service와 그것이 의존하는 Snowflake 컨트롤러 서비스를 흐름 컨트롤러 수준(Controller Settings » Management controller services)에서 만드세요.

다음 단계

  • Set up Openflow - Snowflake Deployment: Configure allowed domains for Openflow connectors
  • Openflow connectors

더 알아보기 (Learn more)