Logo Zephyrnet

Tương tác với các bảng Apache Iceberg bằng Amazon Athena và cấp quyền chi tiết cho nhiều tài khoản bằng AWS Lake Formation

Ngày:

chúng tôi gần đây công bố hỗ trợ cho Sự hình thành hồ AWS chính sách kiểm soát truy cập chi tiết trong amazon Athena truy vấn dữ liệu được lưu trữ ở bất kỳ định dạng tệp được hỗ trợ nào bằng cách sử dụng các định dạng bảng như Apache Iceberg, Apache Hudi và Apache Hive. AWS Lake Formation cho phép bạn xác định và thực thi các chính sách truy cập cấp cơ sở dữ liệu, bảng và cột để truy vấn các bảng Iceberg được lưu trữ trong Amazon S3. Lake Formation cung cấp lớp ủy quyền và quản trị trên dữ liệu được lưu trữ trong Amazon S3. Khả năng này yêu cầu bạn nâng cấp lên Athena engine phiên bản 3.

Các tổ chức lớn thường có các ngành kinh doanh (LoB) hoạt động với quyền tự chủ trong việc quản lý dữ liệu kinh doanh của họ. Nó làm cho việc chia sẻ dữ liệu trên các LoB trở nên không tầm thường. Các tổ chức này đã áp dụng mô hình liên kết, trong đó mỗi LoB có quyền tự quyết định đối với dữ liệu của họ. Họ sử dụng mô hình nhà xuất bản/người tiêu dùng với lớp quản trị tập trung được sử dụng để thực thi các biện pháp kiểm soát truy cập. Nếu bạn muốn tìm hiểu thêm về kiến ​​trúc lưới dữ liệu, hãy truy cập Thiết kế kiến ​​trúc lưới dữ liệu bằng AWS Lake Formation và AWS Glue. Với công cụ Athena phiên bản 3, khách hàng có thể sử dụng các điều khiển chi tiết tương tự cho các khung dữ liệu mở như Apache Iceberg, Apache Hudi và Apache Hive.

Trong bài đăng này, chúng tôi đi sâu vào trường hợp sử dụng trong đó bạn có mô hình nhà sản xuất/người tiêu dùng có bật tính năng chia sẻ dữ liệu để cấp quyền truy cập hạn chế vào bảng Apache Iceberg mà người tiêu dùng có thể truy vấn. Chúng ta sẽ thảo luận về lọc cột để hạn chế các hàng nhất định, lọc để hạn chế quyền truy cập ở cấp độ cột, quá trình phát triển giản đồ và du hành thời gian.

Tổng quan về giải pháp

Để minh họa chức năng của các quyền chi tiết cho các bảng Apache Iceberg với Athena và Lake Formation, chúng tôi đã thiết lập các thành phần sau:

  • Trong tài khoản nhà sản xuất:
    • An Keo AWS Danh mục dữ liệu để đăng ký lược đồ của bảng ở định dạng Apache Iceberg
    • Lake Formation để cung cấp quyền truy cập chi tiết vào tài khoản người tiêu dùng
    • Athena để xác minh dữ liệu từ tài khoản nhà sản xuất
  • Trong tài khoản người tiêu dùng:
    • Trình quản lý truy cập tài nguyên AWS (AWS RAM) để tạo sự bắt tay giữa Data Catalog của nhà sản xuất và người tiêu dùng
    • Lake Formation để cung cấp quyền truy cập chi tiết vào tài khoản người tiêu dùng
    • Athena để xác minh dữ liệu từ tài khoản nhà sản xuất

Sơ đồ sau đây minh họa kiến ​​trúc.

Kiến trúc quyền chi tiết trên nhiều tài khoản

Điều kiện tiên quyết

Trước khi bạn bắt đầu, hãy chắc chắn rằng bạn có những điều sau đây:

Thiết lập nhà sản xuất dữ liệu

Trong phần này, chúng tôi trình bày các bước để thiết lập trình tạo dữ liệu.

Tạo vùng lưu trữ S3 để lưu trữ dữ liệu bảng

Chúng ta tạo một thùng S3 mới để lưu dữ liệu cho bảng:

  1. Trên bảng điều khiển Amazon S3, tạo một nhóm S3 với tên duy nhất (đối với bài viết này, chúng tôi sử dụng iceberg-athena-lakeformation-blog).
  2. Tạo thư mục nhà sản xuất bên trong thùng để sử dụng cho bảng.

Bộ chứa Amazon S3 và tạo thư mục

Đăng ký đường dẫn S3 lưu trữ bảng bằng Lake Formation

Chúng tôi đăng ký đường dẫn đầy đủ của S3 trong Lake Formation:

  1. Điều hướng đến bảng điều khiển Lake Formation.
  2. Nếu đăng nhập lần đầu, bạn sẽ được nhắc tạo người dùng quản trị.
  3. Trong ngăn dẫn hướng, dưới Đăng ký và nhập, chọn Vị trí hồ dữ liệu.
  4. Chọn Đăng ký vị trívà cung cấp đường dẫn bộ chứa S3 mà bạn đã tạo trước đó.
  5. Chọn AWSServiceRoleForLakeFormationDataAccess cho Vai trò IAM.

Để biết thêm thông tin về các vai trò, hãy tham khảo Yêu cầu đối với vai trò được sử dụng để đăng ký vị trí.

Nếu bạn đã bật mã hóa bộ chứa S3 của mình, thì bạn phải cấp quyền cho Lake Formation để thực hiện các hoạt động mã hóa và giải mã. tham khảo Đăng ký vị trí Amazon S3 được mã hóa để được hướng dẫn.

  1. Chọn Đăng ký vị trí.

Đăng ký vị trí hình thành hồ

Tạo bảng Iceberg bằng Athena

Bây giờ, hãy tạo bảng bằng Athena được hỗ trợ bởi định dạng Apache Iceberg:

  1. Trên bảng điều khiển Athena, chọn Trình chỉnh sửa truy vấn trong khung điều hướng.
  2. Nếu bạn đang sử dụng Athena lần đầu tiên, bên dưới Cài đặt, chọn Quản lý và nhập vị trí bộ chứa S3 mà bạn đã tạo trước đó (iceberg-athena-lakeformation-blog/producer).
  3. Chọn Lưu.
  4. Trong trình chỉnh sửa truy vấn, hãy nhập truy vấn sau (thay thế vị trí bằng bộ chứa S3 mà bạn đã đăng ký với Lake Formation). Lưu ý rằng chúng tôi sử dụng cơ sở dữ liệu mặc định, nhưng bạn có thể sử dụng bất kỳ cơ sở dữ liệu nào khác.
CREATE TABLE consumer_iceberg (
customerid bigint,
customername string,
email string,
city string,
country string,
territory string,
contactfirstname string,
contactlastname string)
LOCATION 's3://YOUR-BUCKET/producer/' -- *** Change bucket name to your bucket***
TBLPROPERTIES ('table_type'='ICEBERG')

  1. Chọn chạy.

Trình chỉnh sửa truy vấn Athena để tạo bảng Iceberg

Chia sẻ bảng với tài khoản người tiêu dùng

Để minh họa chức năng, chúng tôi triển khai các tình huống sau:

  • Cung cấp quyền truy cập vào các cột đã chọn
  • Cung cấp quyền truy cập vào các hàng đã chọn dựa trên bộ lọc

Hoàn thành các bước sau:

  1. Trên bảng điều khiển Lake Formation, trong ngăn điều hướng bên dưới Danh mục dữ liệu, chọn Bộ lọc dữ liệu.
  2. Chọn Tạo bộ lọc mới.
  3. Trong Tên bộ lọc dữ liệu, đi vào blog_data_filter.
  4. Trong Cơ sở dữ liệu mục tiêu, đi vào lf-demo-db.
  5. Trong Bảng mục tiêu, đi vào consumer_iceberg.
  6. Trong Quyền truy cập cấp độ cột, lựa chọn Bao gồm các cột.
  7. Chọn các cột để chia sẻ với người tiêu dùng: country, address, contactfirstname, city, customerid, customername.
  8. Trong Biểu thức bộ lọc hàng, nhập bộ lọc country='France'.
  9. Chọn Tạo bộ lọc.

tạo bộ lọc dữ liệu

Bây giờ, hãy cấp quyền truy cập vào tài khoản người tiêu dùng trên consumer_iceberg bảng.

  1. Trong ngăn dẫn hướng, chọn Bàn.
  2. Chọn bảng Consumer_iceberg và chọn Cấp trên Hoạt động đơn.
    Cấp quyền truy cập vào tài khoản người tiêu dùng trên bảng Consumer_iceberg
  3. Chọn Tài khoản bên ngoài.
  4. Nhập ID tài khoản bên ngoài.
    Cấp quyền dữ liệu
  5. Chọn Tài nguyên danh mục dữ liệu được đặt tên.
  6. Chọn cơ sở dữ liệu và bảng của bạn.
  7. Trong Bộ lọc dữ liệu, chọn bộ lọc dữ liệu bạn đã tạo.
    Thêm bộ lọc dữ liệu
  8. Trong Quyền lọc dữ liệuQuyền được cấp, lựa chọn Chọn.
  9. Chọn Cấp.

Quyền tạo tài trợ

Thiết lập người tiêu dùng dữ liệu

Để thiết lập trình tiêu thụ dữ liệu, chúng tôi chấp nhận chia sẻ tài nguyên và tạo bảng bằng AWS RAM và Lake Formation. Hoàn thành các bước sau:

  1. Đăng nhập vào tài khoản khách hàng và điều hướng đến bảng điều khiển AWS RAM.
  2. Theo Chia sẻ với tôi trong ngăn điều hướng, chọn Chia sẻ tài nguyên.
  3. Chọn chia sẻ tài nguyên của bạn.
    Chia sẻ tài nguyên trong tài khoản người tiêu dùng
  4. Chọn Chấp nhận chia sẻ tài nguyên.
  5. Lưu ý tên của tài nguyên chia sẻ để sử dụng trong các bước tiếp theo.
    Chấp nhận chia sẻ tài nguyên
  6. Điều hướng đến bảng điều khiển Lake Formation.
  7. Nếu đăng nhập lần đầu, bạn sẽ được nhắc tạo người dùng quản trị.
  8. Chọn Cơ sở dữ liệu trong ngăn dẫn hướng, sau đó chọn cơ sở dữ liệu của bạn.
  9. trên Hoạt động menu, chọn Tạo liên kết tài nguyên.
    Tạo liên kết tài nguyên
  10. Trong Tên liên kết tài nguyên, hãy nhập tên liên kết tài nguyên của bạn (ví dụ: consumer_iceberg).
  11. Chọn cơ sở dữ liệu và bảng chia sẻ của bạn.
  12. Chọn Tạo.
    Tạo bảng với liên kết tài nguyên

Xác thực giải pháp

Bây giờ chúng ta có thể chạy các hoạt động khác nhau trên các bảng để xác thực các điều khiển truy cập chi tiết.

Thao tác chèn

Hãy chèn dữ liệu vào consumer_iceberg bảng trong tài khoản nhà sản xuất và xác thực tính năng lọc dữ liệu hoạt động như mong đợi trong tài khoản người tiêu dùng.

  1. Đăng nhập vào tài khoản nhà sản xuất.
  2. Trên bảng điều khiển Athena, chọn Trình chỉnh sửa truy vấn trong khung điều hướng.
  3. Sử dụng SQL sau để viết và chèn dữ liệu vào bảng Iceberg. Sử dụng Trình chỉnh sửa truy vấn để chạy một truy vấn tại một thời điểm. Bạn có thể đánh dấu/chọn một truy vấn tại một thời điểm và nhấp vào “Chạy”/“Chạy lại:
INSERT INTO consumer_iceberg VALUES (1, 'Land of Toys Inc.', 'gladys.rim@rim.org', 'NYC','USA', 'NA', 'James', 'xxxx 118th NE'); INSERT INTO consumer_iceberg VALUES (2, 'Reims Collectables', 'yuki_whobrey@aol.com', 'Reims','France', 'EMEA', 'Josephine', 'Darakjy'); INSERT INTO consumer_iceberg VALUES (3, 'Lyon Souveniers', 'fletcher.flosi@yahoo.com', 'Paris', 'France', 'EMEA','Art', 'Venere');

Chèn dữ liệu vào bảng Consumer_iceberg trong tài khoản nhà sản xuất

  1. Sử dụng SQL sau để đọc và chọn dữ liệu trong bảng Iceberg:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Chạy truy vấn chọn để xác thực các hàng đã được chèn

  1. Đăng nhập vào tài khoản người tiêu dùng.
  2. Trong trình chỉnh sửa truy vấn Athena, hãy chạy truy vấn CHỌN sau trên bảng được chia sẻ:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Chạy cùng một truy vấn trong tài khoản người tiêu dùng

Dựa trên các bộ lọc, người tiêu dùng có khả năng hiển thị một tập hợp con các cột và hàng có quốc gia là Pháp.

Thao tác cập nhật/xóa

Bây giờ, hãy cập nhật một trong các hàng và xóa một hàng khỏi tập dữ liệu được chia sẻ với người tiêu dùng.

  1. Đăng nhập vào tài khoản nhà sản xuất.
  2. Cập nhật city='Paris' WHERE city='Reims' và xóa hàng customerid = 3;
    UPDATE consumer_iceberg SET city= 'Paris' WHERE city= 'Reims' ;

    Chạy truy vấn cập nhật trong tài khoản nhà sản xuất

DELETE FROM consumer_iceberg WHERE customerid =3;

Chạy truy vấn xóa trong tài khoản nhà sản xuất

  1. Xác minh tập dữ liệu được cập nhật và xóa:
SELECT * FROM consumer_iceberg;

Xác minh cập nhật và xóa được phản ánh trong tài khoản nhà sản xuất

  1. Đăng nhập vào tài khoản người tiêu dùng.
  2. Trong trình chỉnh sửa truy vấn Athena, hãy chạy truy vấn CHỌN sau trên bảng được chia sẻ:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Xác minh cập nhật và xóa trong tài khoản người tiêu dùng

Chúng ta có thể quan sát thấy rằng chỉ có một hàng và thành phố được cập nhật thành Paris.

Tiến hóa lược đồ: Thêm một cột mới

Hãy cập nhật một trong các hàng và xóa một hàng khỏi tập dữ liệu được chia sẻ với người tiêu dùng.

  1. Đăng nhập vào tài khoản nhà sản xuất.
  2. Thêm một cột mới gọi là geo_loc trong bảng Iceberg. Sử dụng Trình chỉnh sửa truy vấn để chạy một truy vấn tại một thời điểm. Bạn có thể đánh dấu/chọn một truy vấn tại một thời điểm và nhấp vào “Chạy”/“Chạy lại:
ALTER TABLE consumer_iceberg ADD COLUMNS (geo_loc string); INSERT INTO consumer_iceberg VALUES (5, 'Test_user', 'test_user@aol.com', 'Reims','France', 'EMEA', 'Test_user', 'Test_user', 'test_geo'); SELECT * FROM consumer_iceberg;

Thêm một cột mới trong aaccount của nhà sản xuất

Để cung cấp khả năng hiển thị cho mới được thêm vào geo_loc cột, chúng tôi cần cập nhật bộ lọc dữ liệu Lake Formation.

  1. Trên bảng điều khiển Lake Formation, hãy chọn Bộ lọc dữ liệu trong khung điều hướng.
  2. Chọn bộ lọc dữ liệu của bạn và chọn Chỉnh sửa.
    Cập nhật bộ lọc dữ liệu
  3. Theo Quyền truy cập cấp độ cột, thêm cột mới (geo_loc).
  4. Chọn Lưu.
    Thêm cột mới vào bộ lọc dữ liệu
  5. Đăng nhập vào tài khoản người tiêu dùng.
  6. Trong trình chỉnh sửa truy vấn Athena, hãy chạy như sau SELECT truy vấn trên bảng chia sẻ:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Xác thực cột mới xuất hiện trong tài khoản người tiêu dùng

Cột mới geo_loc được hiển thị và một hàng bổ sung.

Tiến hóa lược đồ: Xóa cột

Hãy cập nhật một trong các hàng và xóa một hàng khỏi tập dữ liệu được chia sẻ với người tiêu dùng.

  1. Đăng nhập vào tài khoản nhà sản xuất.
  2. Thay đổi bảng để xóa cột địa chỉ khỏi bảng Iceberg. Sử dụng Trình chỉnh sửa truy vấn để chạy một truy vấn tại một thời điểm. Bạn có thể đánh dấu/chọn một truy vấn tại một thời điểm và nhấp vào “Chạy”/“Chạy lại:
ALTER TABLE consumer_iceberg DROP COLUMN address; SELECT * FROM consumer_iceberg;

Xóa một cột trong tài khoản nhà sản xuất

Chúng ta có thể thấy rằng địa chỉ cột không có trong bảng.

  1. Đăng nhập vào tài khoản người tiêu dùng.
  2. Trong trình chỉnh sửa truy vấn Athena, hãy chạy truy vấn CHỌN sau trên bảng được chia sẻ:
SELECT * FROM "lf-demo-db"."consumer_iceberg" limit 10;

Xác thực việc xóa cột trong tài khoản người tiêu dùng

Địa chỉ cột không có trong bảng.

Du hành thời gian

Bây giờ chúng tôi đã thay đổi bảng Iceberg nhiều lần. Bảng Iceberg theo dõi các ảnh chụp nhanh. Hoàn thành các bước sau để khám phá chức năng du hành thời gian:

  1. Đăng nhập vào tài khoản nhà sản xuất.
  2. Truy vấn bảng hệ thống:
SELECT * FROM "lf-demo-db"."consumer_iceberg$snapshots" limit 10;

Chúng tôi có thể quan sát rằng chúng tôi đã tạo nhiều ảnh chụp nhanh.

  1. Ghi lại một trong những committed_at các giá trị để sử dụng trong các bước tiếp theo (ví dụ này, 2023-01-29 21:35:02.176 UTC).
    Truy vấn du hành thời gian trong tài khoản người tiêu dùng
  2. Sử dụng du hành thời gian để tìm ảnh chụp nhanh bảng. Sử dụng Trình chỉnh sửa truy vấn để chạy một truy vấn tại một thời điểm. Bạn có thể đánh dấu/chọn một truy vấn tại một thời điểm và nhấp vào “Chạy”/“Chạy lại:
SELECT * FROM consumer_iceberg FOR TIMESTAMP
AS OF TIMESTAMP '2023-01-29 21:35:02.176 UTC';

Tìm ảnh chụp nhanh bảng bằng du hành thời gian

Làm sạch

Hoàn thành các bước sau để tránh phát sinh phí trong tương lai:

  1. Trên bảng điều khiển Amazon S3, hãy xóa bộ chứa lưu trữ bảng (đối với bài đăng này, iceberg-athena-lakeformation-blog).
  2. Trong tài khoản nhà sản xuất trên bảng điều khiển Athena, hãy chạy các lệnh sau để xóa các bảng bạn đã tạo:
DROP TABLE "lf-demo-db"."consumer_iceberg";
DROP DATABASE lf-demo-db;

  1. Trong tài khoản nhà sản xuất trên bảng điều khiển Lake Formation, hãy thu hồi quyền đối với tài khoản người tiêu dùng.
    Dọn dẹp - Thu hồi quyền đối với tài khoản người tiêu dùng
  2. Xóa bộ chứa S3 được sử dụng cho vị trí kết quả truy vấn Athena khỏi tài khoản người tiêu dùng.

Kết luận

Với sự hỗ trợ cho nhiều tài khoản, chính sách kiểm soát truy cập chi tiết dành cho các định dạng như Iceberg, bạn có thể linh hoạt làm việc với bất kỳ định dạng nào được Athena hỗ trợ. Khả năng thực hiện các thao tác CRUD đối với dữ liệu trong hồ dữ liệu S3 của bạn kết hợp với các biện pháp kiểm soát truy cập chi tiết của Lake Formation cho tất cả các bảng và định dạng được Athena hỗ trợ mang đến cơ hội đổi mới và đơn giản hóa chiến lược dữ liệu của bạn. Chúng tôi rất muốn nghe phản hồi của bạn!


Giới thiệu về tác giả

Kishore Dhamodaran là Kiến trúc sư Giải pháp Cấp cao tại AWS. Kishore giúp khách hàng chiến lược với chiến lược doanh nghiệp đám mây và hành trình di chuyển của họ, tận dụng nhiều năm kinh nghiệm trong ngành và đám mây của anh ấy.

Jack Ye là kỹ sư phần mềm của nhóm Lưu trữ và Hồ dữ liệu Athena tại AWS. Anh ấy là Thành viên của Apache Iceberg và là thành viên PMC.

Chris Olson là Kỹ sư phát triển phần mềm tại AWS.

Tiểu Huyền Lý là Kỹ sư phát triển phần mềm tại AWS.

Rahul Sonawane là Kiến trúc sư giải pháp phân tích chính tại AWS với AI/ML và Phân tích là lĩnh vực chuyên môn của anh ấy.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img