กำหนดค่า OAuth ภายนอกสำหรับ Snowflake: โฟลว์ข้อมูลเข้าสู่ระบบไคลเอ็นต์

การตรวจสอบสิทธิ์ของข้อมูลเข้าสู่ระบบไคลเอ็นต์ OAuth จะเปิดใช้งานการเชื่อมต่อระหว่างเครื่องกับ Snowflake

โดยไม่มีการโต้ตอบกับผู้ใช้ วิธีนี้เหมาะสำหรับ:

  • บัญชีบริการสำหรับการรีเฟรชข้อมูลอัตโนมัติ

  • งานการแยกข้อมูลที่มีการกำหนดเวลา

  • ไปป์ไลน์ CI/CD

  • แหล่งข้อมูลที่เผยแพร่ซึ่งต้องใช้ข้อมูลเข้าสู่ระบบแบบฝัง

โฟลว์นี้ต่างจาก OAuth มาตรฐาน (ซึ่งใช้โฟลว์รหัสการให้สิทธิ์) โฟลว์ข้อมูลเข้าสู่ระบบไคลเอ็นต์จะไม่

แจ้งให้ผู้ใช้เข้าสู่ระบบ แต่ Tableau จะตรวจสอบสิทธิ์โดยตรงกับผู้ให้บริการข้อมูลประจำตัวของคุณโดยใช้

ID ไคลเอ็นต์และข้อมูลลับ

หมายเหตุ: โฟลว์ข้อมูลเข้าสู่ระบบไคลเอ็นต์ต้องใช้ฟีเจอร์ OAuth ภายนอกของ Snowflake กับผู้ให้บริการข้อมูลประจำตัวที่รองรับ ซึ่งแตกต่างจาก OAuth แบบเนทีฟของ Snowflake

ก่อนที่คุณจะเริ่มต้น

หากต้องการใช้ข้อมูลเข้าสู่ระบบไคลเอ็นต์ OAuth กับ Snowflake คุณต้องมี:

ข้อกำหนดคำอธิบาย
ผู้ให้บริการข้อมูลประจำตัวOkta, Azure AD หรือ Ping Federate ที่กำหนดค่าไว้สำหรับการให้สิทธิ์ข้อมูลเข้าสู่ระบบไคลเอ็นต์
บัญชี Snowflakeรุ่น Enterprise หรือสูงกว่าที่มีสิทธิ์เข้าถึง ACCOUNTADMIN
แอปพลิเคชัน OAuthบริการ API (Okta), การลงทะเบียนแอป (Azure AD) หรือเทียบเท่า
ขอบเขตที่กำหนดเองขอบเขตสำหรับการกำหนดบทบาท Snowflake (เช่น “session:role:SYSADMIN”)

กำหนดค่าผู้ให้บริการข้อมูลประจำตัวของคุณ

ขั้นตอนต่อไปนี้ใช้ Okta เป็นตัวอย่าง สำหรับผู้ให้บริการรายอื่น โปรดดูเอกสารประกอบสำหรับการกำหนดค่าข้อมูลเข้าสู่ระบบไคลเอ็นต์

ขั้นตอนที่ 1: สร้างแอปพลิเคชันบริการ API

  1. เข้าสู่ระบบคอนโซลผู้ดูแล Okta ของคุณ

  2. ไปที่ **แอปพลิเคชัน > แอปพลิเคชัน

  3. เลือก **สร้างการผสานรวมแอป

  4. เลือก **บริการ API** และเลือก **ถัดไป

  5. ป้อนชื่อแอปพลิเคชัน (เช่น snowflake-tableau-service)

  6. เลือกบันทึก

  7. คัดลอก ID ไคลเอ็นต์ และข้อมูลลับของไคลเอ็นต์ คุณจะต้องใช้ค่าเหล่านี้ในภายหลัง

ขั้นตอนที่ 2: ปิดใช้งาน DPoP (หากเปิดใช้งาน)

ต้องปิดใช้งานการแสดงหลักฐานการครอบครอง (DPoP) สำหรับโฟลว์ข้อมูลเข้าสู่ระบบไคลเอ็นต์

  1. ในการตั้งค่าแอปพลิเคชันของคุณ ให้ไปที่ทั่วไป > ข้อมูลเข้าสู่ระบบของไคลเอ็นต์

  2. ล้างช่องทำเครื่องหมายต้องมีส่วนหัวการแสดงหลักฐานการครอบครอง (DPoP) ในคำขอโทเค็น

  3. เลือกบันทึก

ขั้นตอนที่ 3 เพิ่มขอบเขตที่กำหนดเอง

Snowflake ต้องใช้ขอบเขตที่กำหนดเองเพื่อกำหนดบทบาทให้กับเซสชันที่ตรวจสอบสิทธิ์แล้ว

  1. ไปที่ความปลอดภัย > API > เซิร์ฟเวอร์การให้สิทธิ์

  2. เลือกเซิร์ฟเวอร์การให้สิทธิ์เริ่มต้น (หรือเซิร์ฟเวอร์ที่กำหนดเองของคุณ)

  3. เลือกแท็บขอบเขต ตามด้วยเพิ่มขอบเขต

  4. เพิ่มขอบเขตเหล่านี้:

    ชื่อขอบเขตคำอธิบาย
    snowflakeขอบเขตการเข้าถึงทั่วไปสำหรับ Snowflake
    session:role:SYSADMINกำหนดบทบาท SYSADMIN (ปรับสำหรับบทบาทของคุณ)

    หมายเหตุ: สร้างขอบเขตเพิ่มเติมสำหรับบทบาทอื่นๆ ที่บัญชีบริการของคุณต้องใช้

ขั้นตอนที่ 4: กำหนดค่านโยบายการเข้าถึง

  1. เลือกแท็บนโยบายการเข้าถึง

  2. เลือกนโยบายที่มีอยู่หรือสร้างนโยบายใหม่

  3. เพิ่มกฎที่มีการตั้งค่าเหล่านี้

    • ประเภทการให้สิทธิ์: ข้อมูลเข้าสู่ระบบไคลเอ็นต์

    • ขอบเขต: ขอบเขตใดๆ (หรือเลือกขอบเขตเฉพาะ)

  4. เลือกสร้างกฎหรือบันทึก

กำหนดค่า Snowflake

เรียกใช้คำสั่ง SQL ต่อไปนี้ใน Snowflake ในฐานะ ACCOUNTADMIN แทนที่ค่าตัวยึดตำแหน่งด้วยการกำหนดค่าของคุณ

ขั้นตอนที่ 1: สร้างการผสานรวม OAuth ภายนอก

USE ROLE ACCOUNTADMIN;

CREATE OR REPLACE SECURITY INTEGRATION okta_oauth_integration
  TYPE = EXTERNAL_OAUTH
  ENABLED = TRUE
  EXTERNAL_OAUTH_TYPE = OKTA
  EXTERNAL_OAUTH_ISSUER = 'https://<your-okta-domain>.okta.com/oauth2/default'
  EXTERNAL_OAUTH_JWS_KEYS_URL = 'https://<your-okta-domain>.okta.com/oauth2/
default/v1/keys'
  EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLAIM = 'sub'
  EXTERNAL_OAUTH_SNOWFLAKE_USER_MAPPING_ATTRIBUTE = 'login_name'
  EXTERNAL_OAUTH_AUDIENCE_LIST = ('api://default', 'snowflake')
EXTERNAL_OAUTH_ANY_ROLE_MODE = 'ENABLE';
พารามิเตอร์คำอธิบาย
EXTERNAL_OAUTH_TYPEผู้ให้บริการข้อมูลประจำตัวของคุณ: OKTA , AZURE หรือ PING_FEDERATE
EXTERNAL_OAUTH_ISSUERURL ผู้ออกจากเซิร์ฟเวอร์การให้สิทธิ์ของคุณ
EXTERNAL_OAUTH_JWS_KEYS_URLปลายทาง JWKS สำหรับการตรวจสอบโทเค็น
EXTERNAL_OAUTH_TOKEN_USER_MAPPING_CLA IMการอ้างสิทธิ์ JWT ที่ระบุผู้ใช้ ใช้ sub สำหรับ Okta
EXTERNAL_OAUTH_ANY_ROLE_MODEตั้งค่าเป็น ENABLE เพื่ออนุญาตการกำหนดบทบาทผ่านขอบเขต

ขั้นตอนที่ 2: สร้างผู้ใช้บริการ

สร้างผู้ใช้ Snowflake ด้วย LOGIN_NAME ที่ตรงกับ ID ไคลเอ็นต์ OAuth

CREATE USER IF NOT EXISTS service_account_user
LOGIN_NAME = '<your-okta-client-id>'
DISPLAY_NAME = 'OAuth Service Account'
MUST_CHANGE_PASSWORD = FALSE
DISABLED = FALSE;
-- Grant role to the service user
GRANT ROLE SYSADMIN TO USER service_account_user;
-- Set the default role
ALTER USER service_account_user SET DEFAULT_ROLE = 'SYSADMIN';
-- Grant warehouse access
GRANT USAGE ON WAREHOUSE <your-warehouse> TO USER service_account_user;
-- Grant database and schema access
GRANT USAGE ON DATABASE <your-database> TO USER service_account_user;
GRANT USAGE ON SCHEMA <your-database>.<your-schema> TO USER
service_account_user;
GRANT SELECT ON ALL TABLES IN SCHEMA <your-database>.<your-schema> TO USER
service_account_user;

สำคัญ: LOGIN_NAME ต้องตรงกับทุกประการกับการอ้างสิทธิ์ sub ในโทเค็น OAuth สำหรับแอปพลิเคชันบริการ Okta API นี่คือ ID ไคลเอ็นต์

เชื่อมต่อจาก Tableau Desktop

  1. ใน Tableau Desktop เลือกเชื่อมต่อ > Snowflake

  2. ป้อนรายละเอียดการเชื่อมต่อของคุณ:

    ฟิลด์ค่า
    เซิร์ฟเวอร์URL บัญชี Snowflake ของคุณ (เช่น account.snowflakecomputing.com)
    บทบาทบทบาทที่จะใช้ (เช่น SYSADMIN)
    คลังคลัง Snowflake ของคุณ
    การตรวจสอบสิทธิ์ข้อมูลเข้าสู่ระบบไคลเอ็นต์ OAuth
  3. ป้อนการกำหนดค่า OAuth:

    ฟิลด์ค่า
    URL คำขอโทเค็น OAuthhttps://<your-okta-domain>.okta.com/oauth2/default/ v1/token
    ชื่อผู้ใช้ID ไคลเอ็นต์ Oauth ของคุณ
    รหัสผ่านข้อมูลลับไคลเอ็นต์ OAuth ของคุณ
    ขอบเขต OAuthsnowflake session:role:SYSADMIN

    หมายเหตุ: ขอบเขต OAuth ต้องมีขอบเขตที่กำหนดเองที่คุณกำหนดค่าไว้สำหรับการกำหนดบทบาท

  4. เลือกเข้าสู่ระบบ

เผยแพร่ไปยัง Tableau Cloud หรือ Tableau Server

เมื่อเผยแพร่เวิร์กบุ๊กหรือแหล่งข้อมูลที่ใช้ข้อมูลเข้าสู่ระบบไคลเอ็นต์ OAuth:

  1. ในกล่องโต้ตอบเผยแพร่ ให้เลือกแก้ไขถัดจากแหล่งข้อมูล

  2. สำหรับการตรวจสอบสิทธิ์ ให้เลือกรหัสผ่านแบบฝัง

  3. ข้อมูลเข้าสู่ระบบไคลเอ็นต์จะฝังอยู่ในเนื้อหาที่เผยแพร่

สำคัญ: ข้อมูลเข้าสู่ระบบไคลเอ็นต์ถือเป็นรหัสผ่านแบบฝัง ซึ่งต่างจาก OAuth มาตรฐาน ผู้ใช้ที่เข้าถึงเนื้อหาที่เผยแพร่จะใช้ข้อมูลเข้าสู่ระบบของบัญชีบริการ ไม่ใช่ข้อมูลประจำตัว

การหมุนเวียนข้อมูลเข้าสู่ระบบ

เมื่อข้อมูลลับของไคลเอ็นต์ OAuth มีการหมุนเวียน ให้อัปเดตข้อมูลเข้าสู่ระบบแบบฝังบน Tableau Cloud:

  1. เข้าสู่ระบบ Tableau Cloud

  2. ไปยังแหล่งข้อมูลที่เผยแพร่

  3. เลือกการเชื่อมต่อ

  4. อัปเดตการเชื่อมต่อด้วยข้อมูลลับของไคลเอ็นต์ใหม่

สำหรับการหมุนเวียนอัตโนมัติ ให้ใช้ Tableau REST API เพื่ออัปเดตข้อมูลเข้าสู่ระบบการเชื่อมต่อในโปรแกรม

คำถามที่พบบ่อย

ฉันควรใช้ข้อมูลเข้าสู่ระบบไคลเอ็นต์ OAuth แทน OAuth มาตรฐานเมื่อใด

ใช้ข้อมูลเข้าสู่ระบบไคลเอ็นต์เมื่อคุณต้องการการตรวจสอบสิทธิ์ระหว่างเครื่องโดยไม่ต้องควบคุม มาตรฐาน

OAuth กำหนดให้มีการโต้ตอบของผู้ใช้สำหรับการเข้าสู่ระบบครั้งแรกและการตรวจสอบสิทธิ์ซ้ำเป็นระยะ ข้อมูลเข้าสู่ระบบไคลเอ็นต์

ใช้ข้อมูลประจำตัวของบัญชีบริการและไม่ต้องมีการโต้ตอบกับผู้ใช้

ฉันสามารถใช้ข้อมูลเข้าสู่ระบบไคลเอ็นต์กับ OAuth แบบเนทีฟของ Snowflake ได้หรือไม่

ไม่ได้ OAuth แบบเนทีฟของ Snowflake รองรับเฉพาะโฟลว์รหัสการให้สิทธิ์เท่านั้น ข้อมูลเข้าสู่ระบบไคลเอ็นต์ต้องใช้ OAuth ภายนอกกับผู้ให้บริการข้อมูลประจำตัวที่รองรับ (Okta, Azure AD หรือ Ping Federate)

ฉันจะจัดการกับการหมุนเวียนข้อมูลลับสำหรับเนื้อหาที่เผยแพร่ได้อย่างไร

เมื่อข้อมูลลับของไคลเอ็นต์ OAuth มีการหมุนเวียน คุณต้องอัปเดตข้อมูลเข้าสู่ระบบแบบฝังใน Tableau Cloud คุณสามารถดำเนินการนี้ได้ด้วยตนเองผ่าน Tableau Cloud UI หรือในโปรแกรมโดยใช้ Tableau REST API พิจารณาทำให้กระบวนการนี้เป็นอัตโนมัติในเวิร์กโฟลว์การหมุนเวียนข้อมูลลับของคุณ

เหตุใดการเชื่อมต่อของฉันจึงล้มเหลวโดยมีข้อผิดพลาดของบทบาท แม้ว่าจะเปิดใช้งาน EXTERNAL_OAUTH_ANY_ROLE_MODE แล้ว

Snowflake ต้องใช้ข้อมูลบทบาทในโทเค็น OAuth เพิ่มขอบเขตที่กำหนดเอง (เช่น session:role:SYSADMIN) ไปยังเซิร์ฟเวอร์การให้สิทธิ์ของคุณและรวมไว้ในฟิลด์ขอบเขต OAuth เมื่อเชื่อมต่อจาก Tableau

การแก้ปัญหา

ข้อความแสดงข้อผิดพลาดสาเหตุโซลูชัน
“ผู้ใช้ไม่มีอยู่หรือไม่ได้รับอนุญาต”ผู้ใช้ Snowflake LOGIN_NAME ไม่ตรงกับ ID ไคลเอ็นต์ OAuthตั้งค่า LOGIN_NAME ของผู้ใช้ให้ตรงกับการอ้างสิทธิ์ sub (ID ไคลเอ็นต์สำหรับ Okta)
“บทบาทที่ร้องขอไม่อยู่ในโทเค็นการเข้าถึง”ไม่มีขอบเขตบทบาทในโทเค็นเพิ่มขอบเขต session:role:<ROLE> ไปยังเซิร์ฟเวอร์การให้สิทธิ์ของคุณและรวมไว้ในขอบเขต OAuth
“หลักฐาน DPoP ไม่ถูกต้อง”DPoP เปิดใช้งานใน Oktaปิดใช้งาน “ต้องมีการแสดงหลักฐานการครอบครอง (DPoP)” ในแอป Okta ของคุณ
“ขอบเขตไม่ถูกต้อง”ไม่ได้กำหนดค่าขอบเขตที่กำหนดเองเพิ่มขอบเขตที่จำเป็นไปยังเซิร์ฟเวอร์การให้สิทธิ์ของคุณ โดยไม่รวม openid
การตรวจสอบโทเค็นล้มเหลวURL หรือผู้ออก JWKS ไม่ถูกต้องยืนยันว่า EXTERNAL_OAUTH_JWS_KEYS _URL และ EXTERNAL_OAUTH_ISSUER ตรงกับเซิร์ฟเวอร์การให้สิทธิ์ของคุณ

ดูเพิ่มเติม

ขอบคุณสำหรับข้อเสนอแนะของคุณส่งข้อเสนอแนะของคุณเรียบร้อยแล้ว ขอขอบคุณ