กำหนดสิทธิ์ราย column บน BigQuery ด้วย BigQuery column-level security

[Cross-posted on blog.niwpopkorn.com]

BigQuery เป็นบริการคลังข้อมูลที่รองรับการเก็บและประมวลผลข้อมูลขนาดใหญ่ได้ ในเวลารวดเร็วและราคาคุ้มค่า การที่ข้อมูลจะถูกนำมาใช้ให้เกิดประโยชน์ก็จะต้องมีการเปิดสิทธิ์ให้ผู้ใช้จากแต่ละส่วนให้สามารถเข้าถึงข้อมูลที่ต้องการได้ การกำหนดสิทธิ์เบื้องต้นนั้น สามารถทำได้ในระดับ project, dataset, table หรือ view แต่ถ้าหากข้อมูลที่เราเก็บลง table มีแค่บาง column ที่เป็นข้อมูลความลับ และไม่อยากแยกเก็บข้อมูลลง table ใหม่ จะสามารถทำอย่างไรได้บ้าง

BigQuery สามารถกำหนดสิทธิ์ที่ระดับ column ได้ โดยการทำงานร่วมกับ Data Catalog มีรายละเอียดดังนี้

สร้าง policy tag ด้วย Data Catalog

1.เริ่มจากการเข้าไปตั้ง Taxonomies ใน Data Catalog และกด +CREATE

2. กำหนดชื่อ taxonomy เลือก project และกดหนด Policy tags (สามารถกำหนด policy เป็นลำดับชั้นซ้อนกันได้) และ Locations (ต้องเป็น location เดียวกับ dataset ของ BigQuery ที่เราต้องการคุมสิทธิ์) และกด SAVE

3. ที่หน้า taxonomy กดเลือก policy tag ที่เพิ่งสร้าง และกด +ADD MEMBER เพื่อกำหนดสิทธิ์ผู้ใช้ที่สามมารถเข้าถึงข้อมูลใน tag ได้

4. ระบุบัญชีของ user ที่เราจะให้สิทธิ์ (แนะนำให้ทำเป็น group ไว้ เพื่อความสะดวก) และกำหนดสิทธิ์ Data Catalog > Fine-Grained Reader และกด SAVE

5. กดเปิดใช้งาน taxonomy โดยเลือกที่ Enforce access control (หากไม่เปิด การกำหนด tag ก็จะไม่มีผล) จบขั้นตอนฝั่ง Data Catalog

ใส่ policy tag ลง schema

1. มาต่อกันที่ table ใน BigQuery ที่เราเตรียม column ไว้เรียบร้อยแล้ว โดย column สีแดงเป็นข้อมูลความลับ เปิดสิทธิ์ให้เฉพาะผู้ได้รับอนุญาติเท่านั้น ส่วน column สีเขียว เป็นข้อมูลที่ปิดบังไว้แล้ว สามารถให้ผู้ใช้เข้าถึงได้

2. ไปที่หัวข้อ Schema ของ table และกด Edit schema

3. กดเลือก column ที่ต้องการจำกัดสิทธิ์ และกด Add policy tag

4. กดเลือก policy tag ที่เตรียมไว้ใน Data Catalog และกด SELECT

5. สังเกตุว่าที่ column ที่เลือกไว้ จะขึ้นชื่อ policy tag กด Save

6. เปิดสิทธิ์ให้ผู้ใช้งานทั้ง 2 กลุ่ม เข้าถึง table ได้ด้วยสิทธิ์ตามปกติ (ในที่นี้ให้สิทธิ์ BigQuery Data Viewer) โดยผู้ใช้ที่เป็น @tangerine.co.th ที่ได้สิทธิ์ Data Catalog > Fine-Grained Reader บน policy tag จะเข้าถึง column ที่กำหนด policy ไว้ได้ ส่วนผู้ใช้ @gmail เข้าถึงข้อมูลได้ทุก column ยกเว้น column ที่กำหนด policy tag ไว้

ทดสอบผลลัพธ์จากผู้ใช้ที่มีสิทธิ์และไม่มีสิทธิ์ 

1. เริ่มจากการเข้าถึงข้อมูลด้วยบัญชีที่ได้สิทธิ์ทั้งหมด จะเห็นข้อมูลใน table ครบตามปกติ

2. หากลองเข้าด้วยบัญชีที่ไม่ได้สิทธิ์ จะสามารถ preview ข้อมูลได้เฉพาะ column ทั่วไป (ระบบไม่แสดงข้อมูลใน column ที่ติด policy tag ใน table preview) และขึ้นข้อความแจ้งว่าไม่ได้รับสิทธิ์ให้เข้าถึงข้อมูล 2 column

3. หากลองพยายาม query ข้อมูลด้วย SELECT * ก็จะพบข้อความแจ้งว่าผู้ใช้ไม่ได้รับสิทธิ์บน column ไหนบ้าง

4. ผู้ใช้งานที่ติดสิทธิ์อยู่ ยังสามารถใช้ SELECT * EXCEPT () และระบุ column ที่ไม่ได้สิทธิ์ออกไปได้

การทำหนด column-level security บน BigQuery นั้น ช่วยให้ไม่ต้องแบ้งข้อมูลออกเป็นหลายๆ ชุด ตามสิทธิ์ของผู้ใช้งาน ทำให้ข้อมูลใน data warehouse มีชุดเดียวกันจึงบริหารจัดการจากจุดเดียว การกำหนดสิทธิ์ของผู้ใช้สามารถจัดการเป็น group ผ่าน Data Catalog ที่ทำให้ผู้ดูแลเห็นภาพรวมของการบริหารข้อมูลในทุกๆ service นอกเหนือจาก BigQuery
หากองค์กรของคุณมีการเก็บและใช้ข้อมูลบน BigQuery อยู่แล้ว และมีผู้ใช้งานหลายกลุ่มที่เข้าถึงข้อมูลด้วยสิทธิ์ที่แตกต่างกัน สามารถพิจารณาแนวทาง column-level security ไปใช้งานดูได้คับ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s