Amazon QuickSight là dịch vụ trí tuệ doanh nghiệp (BI) dựa trên đám mây, không cần máy chủ và có thể nhúng, giúp đơn giản hóa việc cung cấp thông tin chi tiết cho tổ chức của bạn. Là một dịch vụ được quản lý hoàn toàn, Amazon QuickSight cho phép bạn tạo và xuất bản các bảng điều khiển tương tác, sau đó có thể được truy cập từ các thiết bị khác nhau và được nhúng vào các ứng dụng, cổng thông tin và trang web của bạn.
Khi người tạo tạo tập dữ liệu, xây dựng bảng điều khiển và chia sẻ với người dùng cuối, người dùng sẽ thấy cùng một dữ liệu với người tạo, trừ khi tính năng bảo mật theo hàng (RLS) được bật trong tập dữ liệu Amazon QuickSight. Amazon QuickSight cũng cung cấp các tùy chọn để truyền định danh của người đọc đến nguồn dữ liệu bằng cách sử dụng cơ chế truyền định danh đáng tin cậy và áp dụng RLS tại nguồn. Để tìm hiểu thêm, hãy xem “Centrally manage permissions for tables and views accessed from Amazon QuickSight with trusted identity propagation” và “Simplify access management with Amazon Redshift and AWS Lake Formation for users in an External Identity Provider”.
Tuy nhiên, có một số yêu cầu khi sử dụng cơ chế truyền định danh đáng tin cậy với Amazon QuickSight:
- Phương thức xác thực cho Amazon QuickSight phải sử dụng AWS IAM Identity Center.
- Tập dữ liệu được tạo bằng cơ chế truyền định danh đáng tin cậy sẽ là tập dữ liệu truy vấn trực tiếp trong Amazon QuickSight. QuickSight SPICE không thể được sử dụng với cơ chế truyền định danh đáng tin cậy. Điều này là do khi sử dụng SPICE, dữ liệu sẽ được nhập vào (sao chép), do đó các quyền tại nguồn sẽ không thể được sử dụng khi người đọc truy cập bảng điều khiển.
Bài viết này trình bày một giải pháp để tự động sao chép các quyền truy cập cho người đọc từ nguồn (AWS Lake Formation) sang Amazon QuickSight. Giải pháp này có thể được sử dụng ngay cả khi phương thức xác thực trong Amazon QuickSight không sử dụng IAM Identity Center và có thể hoạt động với cả tập dữ liệu truy vấn trực tiếp và SPICE trong Amazon QuickSight. Điều này cho phép bạn tận dụng khả năng tự động mở rộng đi kèm với SPICE. Mặc dù chúng tôi tập trung vào việc sử dụng bảng Lake Formation tồn tại trong cùng một tài khoản, bạn cũng có thể mở rộng giải pháp này cho các bảng thuộc tài khoản khác. Khi trích xuất các quy tắc lọc dữ liệu cho bảng trong tài khoản khác, vai trò thực thi phải có quyền truy cập cần thiết đến các bảng trong tài khoản đó.
Tổng quan về trường hợp sử dụng
Trong bài viết này, chúng ta hãy xét một tổ chức tài chính lớn đã triển khai Lake Formation như là trung tâm của hệ thống data lake và hệ thống quản lý quyền truy cập dữ liệu. Tổ chức này hướng tới việc đơn giản hóa việc kiểm soát truy cập và duy trì một nguồn thông tin duy nhất cho quyền truy cập dữ liệu trên toàn bộ hệ sinh thái dữ liệu của mình.
Bằng cách sử dụng Lake Formation để quản lý quyền truy cập, tổ chức tài chính có thể duy trì một hệ thống kiểm soát truy cập dữ liệu mạnh mẽ, có khả năng mở rộng và tuân thủ quy định — đóng vai trò nền tảng cho các hoạt động vận hành và phân tích dữ liệu dựa trên dữ liệu.
Cách tiếp cận này đặc biệt quan trọng để đảm bảo tuân thủ các quy định tài chính và duy trì tính bảo mật dữ liệu. Nhóm phân tích muốn xây dựng một bảng điều khiển Amazon QuickSight cho các nhóm dữ liệu và kinh doanh.
Tổng quan về giải pháp
Giải pháp này sử dụng các API của AWS Lake Formation và Amazon QuickSight để trích xuất, chuyển đổi và lưu trữ các bộ lọc dữ liệu (data filters) từ AWS Lake Formation theo định dạng có thể sử dụng trong QuickSight.
Giải pháp bao gồm bốn bước chính:
- Trích xuất và chuyển đổi bảo mật theo hàng (row-level security – các bộ lọc dữ liệu) và các quyền truy cập thành bộ lọc dữ liệu cho các bảng cần thiết từ AWS Lake Formation.
- Tạo một tập dữ liệu quy tắc (rules dataset) trong Amazon QuickSight.
Giải pháp sử dụng các dịch vụ chính sau:
- AWS Lambda để trích xuất và chuyển đổi dữ liệu
- Amazon Simple Storage Service (Amazon S3) để lưu trữ các quy tắc và quyền truy cập đã được chuyển đổi
- AWS Lake Formation, Amazon Athena và Amazon QuickSight để lấy dữ liệu và tạo tập dữ liệu quy tắc
Sơ đồ sau minh họa kiến trúc của giải pháp.
Điều kiện tiên quyết
Để triển khai giải pháp này, bạn cần kích hoạt các dịch vụ sau trong cùng một tài khoản:
- AWS Lake Formation và
- Amazon QuickSight
- Quyền truy cập AWS IAM (Identity and Access Management):
Hãy đảm bảo rằng bạn có đủ quyền IAM cần thiết để thực hiện các thao tác trên tất cả các dịch vụ được đề cập trong phần tổng quan về giải pháp ở trên.
- Bảng trong AWS Lake Formation có chứa các bộ lọc dữ liệu (data filters) cùng với các quyền phù hợp
- Các đối tượng chính trong Amazon QuickSight (người dùng hoặc nhóm)
Phần bên dưới sẽ hướng dẫn bạn cách tạo nhóm trong Amazon QuickSight và bảng dữ liệu cùng các bộ lọc trong AWS Lake Formation.
Tạo nhóm trong QuickSight
Tạo hai nhóm trong Amazon QuickSight: QuickSight_Readers và QuickSight_Authors.
Để biết hướng dẫn, hãy xem mục Create a group with the QuickSight console (Tạo nhóm bằng giao diện điều khiển QuickSight).
Sau đó, bạn có thể tạo ARN (Amazon Resource Names) của các nhóm như sau. Các ARN này sẽ được sử dụng khi cấp quyền trong AWS Lake Formation cho các bộ lọc dữ liệu:
- arn:aws:quicksight:<<identity-region>>:<<AWSAcocuntId>>:group/<<namespace>>/QuickSight_Readers
- arn:aws:quicksight:<<identity-region>>:<<AWSAcocuntId>>:group/<<namespace>>/QuickSight_Authors
Bạn cũng có thể lấy ARN của các nhóm bằng cách chạy lệnh CLI sau trong Amazon QuickSight: Ảnh chụp màn hình sau đây cho thấy kết quả đầu ra.
Tạo một bảng trong AWS Lake Formation
Phần sau đây chỉ mang tính minh họa và không bắt buộc đối với việc sử dụng giải pháp này trong môi trường sản xuất.
Hãy thực hiện các bước sau để tạo một bảng trong AWS Lake Formation bằng dữ liệu mẫu. Trong bài viết này, bảng có tên là saas_sales.
- Tải xuống tệp Saas Sales.csv.
- Tải lên tệp này vào một vị trí trong Amazon S3.
- Tạo một bảng trong AWS Lake Formation.
Tạo bảo mật theo hàng (bộ lọc dữ liệu) trong AWS Lake Formation
Trong AWS Lake Formation, các bộ lọc dữ liệu (data filters) được sử dụng để lọc dữ liệu trong một bảng cho một cá nhân hoặc nhóm cụ thể.
Hãy thực hiện các bước sau để tạo một bộ lọc dữ liệu:
- Tạo một bộ lọc dữ liệu có tên QuickSightReaderFilter trong bảng saas_sales. Đối với phần Row-level access (Truy cập theo hàng), nhập biểu thức sau: segment = ‘Enterprise’ .
- Cấp quyền truy cập vào bộ lọc dữ liệu này cho nhóm Amazon QuickSight. Sử dụng ARN của nhóm người đọc từ bước đầu tiên cho Người dùng và nhóm SAML.
- Cấp cho nhóm QuickSight_Authors quyền truy cập đầy đủ vào bảng. Sử dụng nhóm người đọc ARN từ bước đầu tiên cho người dùng và nhóm SAML.
- (Tùy chọn) Bạn có thể tạo thêm một bảng khác có tên là second_table và tạo một bộ lọc dữ liệu khác có tên là SecondFilter, sau đó cấp quyền cho nhóm QuickSight_Readers.
Giờ đây, khi bạn đã thiết lập xong bảng, quyền truy cập và các bộ lọc dữ liệu, bạn có thể trích xuất thông tin truy cập theo hàng (row-level access) cho các nhóm QuickSight_Readers và QuickSight_Authors cùng với bảng saas_sales trong AWS Lake Formation, và tạo tập dữ liệu quy tắc (rules dataset) trong Amazon QuickSight cho bảng saas_sales.
Trích xuất và chuyển đổi bộ lọc dữ liệu và quyền từ AWS Lake Formation bằng hàm Lambda
Trong AWS Lake Formation, các bộ lọc dữ liệu (data filters) được tạo riêng cho từng bảng. Có thể có nhiều bảng trong Lake Formation, tuy nhiên, đối với một nhóm hoặc một dự án cụ thể, chỉ có một tập hợp các bảng nhất định mà nhà phát triển BI quan tâm. Do đó, hãy chọn một danh sách các bảng cần theo dõi và cập nhật các bộ lọc dữ liệu.
Trong quá trình xử lý theo lô (batch process), đối với mỗi bảng trong AWS Lake Formation, hãy trích xuất các định nghĩa bộ lọc dữ liệu và ghi chúng vào Amazon S3 bằng cách sử dụng API của AWS Lake Formation và Amazon S3.
Chúng tôi sử dụng các API sau của AWS Lake Formation để trích xuất thông tin chi tiết về bộ lọc dữ liệu và quyền truy cập:
- ListDataCellFilters – API này được sử dụng để liệt kê tất cả các bộ lọc dữ liệu trong từng bảng cần thiết cho dự án
- ListPermissions – API này được sử dụng để lấy quyền truy cập đối với từng bộ lọc dữ liệu đã được trích xuất bằng API ListDataCellFilters
Chức năng Lambda bao gồm ba phần chính của giải pháp:
- Trích xuất các bộ lọc dữ liệu và quyền truy cập đối với bộ lọc dữ liệu cho các bảng quan tâm từ AWS Lake Formation
- Chuyển đổi các bộ lọc dữ liệu và quyền truy cập thành định dạng có thể sử dụng trong Amazon QuickSight
- Lưu trữ dữ liệu đã được chuyển đổi
Thực hiện các bước sau để tạo hàm AWS Lambda:
- Trên bảng điều khiển Lambda, hãy tạo một hàm có tên là Lake_Formation_QuickSight_RLS.Sử dụng Python 3.12 làm môi trường thực thi, và tạo một vai trò IAM mới để thực thi hàm.
- Cấu hình thời gian chờ của hàm Lambda thành 2 phút. Thời gian này có thể thay đổi tùy thuộc vào số lượng bảng cần phân tích và số lượng bộ lọc dữ liệu cần chuyển đổi.
- Gắn các quyền sau vào vai trò thực thi của Lambda:
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “VisualEditor0”,
“Effect”: “Allow”,
“Action”: [
“lakeformation:ListDataCellsFilter”,
“lakeformation:ListPermissions”
],
“Resource”: “*”
},
{
“Sid”: “VisualEditor1”,
“Effect”: “Allow”,
“Action”: “s3:PutObject”,
“Resource”: “arn:aws:s3:::<bucket_used_for_storage>/*”
}
]
}
- Đặt các biến môi trường sau cho hàm Lambda:
| Tên | Giá trị |
| S3Bucket | Giá trị của thùng S3 nơi các tệp đầu ra sẽ được lưu trữ |
| tablesToTrack | Danh sách các bảng để theo dõi dưới dạng JSON được chuyển đổi thành chuỗi |
| Tmp | /tmp |
Hàm Lambda lấy danh sách các bảng và thông tin về S3 bucket từ biến môi trường.
Danh sách các bảng được truyền vào dưới dạng mảng JSON đã chuyển thành chuỗi.
Định dạng JSON được minh họa trong đoạn mã dưới đây.
Các giá trị của catalogId, DatabaseName và Name có thể lấy từ bảng điều khiển AWS Lake Formation.
[
{
“CatalogId”: “String”,
“DatabaseName”: “String”,
“Name”: “String”
}
]
- Thêm một thư mục có tên là tmp.
- Tải xuống tệp nén Lake_Formation_QuickSight_RLS.zip.
Lưu ý: Đây là mã ví dụ, không dành cho môi trường sản xuất.
Bạn nên làm việc với bộ phận bảo mật và pháp lý của tổ chức để đảm bảo đáp ứng các yêu cầu về bảo mật, quy định và tuân thủ trước khi triển khai.
- Đối với mã của hàm Lambda:
Tải lên tệp .zip đã tải về vào hàm Lambda, tại tab Code.
- Cấp quyền truy cập cần thiết cho vai trò thực thi trong AWS Lake Formation.
Mặc dù quyền IAM đã được cấp cho vai trò thực thi Lambda, bạn vẫn cần cấp quyền rõ ràng trong AWS Lake Formation để hàm Lambda có thể lấy thông tin về các bộ lọc dữ liệu. Do đó, bạn phải cấp quyền truy cập rõ ràng vào vai trò thực thi để giới hạn vai trò Lambda thành quản trị viên chỉ đọc, với phạm vi chỉ đọc. Để biết thêm chi tiết, hãy xem mục Xem bộ lọc dữ liệu.
Trong các phần sau, chúng tôi sẽ giải thích chi tiết hơn về chức năng của mã hàm Lambda.
Trích xuất bộ lọc dữ liệu và quyền cho bộ lọc dữ liệu và bảng trong AWS Lake Formation
Luồng chính của đoạn mã nhận danh sách các bảng làm đầu vào và tiến hành trích xuất quyền truy cập bảng, quyền truy cập bộ lọc dữ liệu, và các quy tắc bộ lọc dữ liệu.
Cách tiếp cận ở đây là lấy cả quyền truy cập cấp quyền truy cập đối với các bộ lọc dữ liệu được áp dụng trên bảng.
Bằng cách này, bạn có thể trích xuất được quyền truy cập toàn bộ và quyền truy cập một phần trên bảng dữ liệu.
…
….
tablesToTrack= json.loads(os.environ[“tablesToTrack”])
lf_client = boto3.client(‘lakeformation’)
# For each table in the list get the data filter rules attached to the table.
for table in tablesToTrack:
df_response= lf_client.list_data_cells_filter(
Table= table
)
d_filters += df_response[“DataCellsFilters”]
# Also, for each table in the list get the list of permissions at table level.
# This determines who has access to all rows in the table.
tresponse=lf_client.list_permissions(
Resource= {
“Table”: table
}
)
d_permissions += tresponse[“PrincipalResourcePermissions”]
transformDataFilterRules(d_filters)
# For each data filters fetched above, get the permissions.
# This determines the row level security for the tables.
for filter in d_filters:
p_response=lf_client.list_permissions(
Resource= {
“DataCellsFilter”: {
“DatabaseName”: filter [“DatabaseName”],
“Name”: filter[“Name”],
“TableCatalogId”: filter[“TableCatalogId”],
“TableName”: filter[“TableName”]
}
}
)
d_permissions += p_response[“PrincipalResourcePermissions”]
transformFilterandTablePermissions(d_permissions)
Chuyển đổi các định nghĩa bộ lọc dữ liệu sang định dạng có thể sử dụng trong Amazon QuickSight
Các quyền truy cập và bộ lọc dữ liệu sau khi được trích xuất sẽ được chuyển đổi để tạo thành tập dữ liệu quy tắc trong Amazon QuickSight.
Có nhiều cách khác nhau để định nghĩa các bộ lọc dữ liệu.
Hình minh họa bên dưới thể hiện một số ví dụ về các cách chuyển đổi này.
Hàm transformDataFilterRules trong đoạn mã dưới đây có khả năng chuyển đổi một số điều kiện OR và AND sang định dạng được Amazon QuickSight chấp nhận.
Các thông tin sau sẽ có trong định dạng đã được chuyển đổi:
- Mã danh mục của Lake Formation
- Tên cơ sở dữ liệu của Lake Formation
- Tên bảng của Lake Formation
- Tên bộ lọc dữ liệu của Lake Formation
- Danh sách các cột từ tất cả các bảng được cung cấp trong đầu vào, mà bộ lọc dữ liệu đã được định nghĩa cho
Xem đoạn mã dưới đây:
def transformDataFilterRules(rules):
global complete_transformed_filter_rules
transformed_filter_rules = []
filter_to_extract=[]
complete_transformed_filter_rules = []
col_headers=[]
col_headers.append(“catalog”)
col_headers.append(“database”)
col_headers.append(“table”)
col_headers.append(“filter”)
for rule in rules:
print(rule)
catalog=rule[“TableCatalogId”]
database = rule[“DatabaseName”]
table = rule[“TableName”]
filter = rule[“Name”]
row=[]
row.append(catalog)
row.append(database)
row.append(table)
row.append(filter)
logger.info(f”row==={row}”)
f_conditions = re.split(‘ OR | or | and | AND ‘ , rule[“RowFilter”][“FilterExpression”])
for f_condition in f_conditions:
logger.info(f”f_condition={f_condition}”)
f_condition = f_condition.replace(“(“,””)
f_condition = f_condition.replace(“)”,””)
filter_rule_column= f_condition.split(“=”)
if len(filter_rule_column)>1:
filter_rule_column[0] = filter_rule_column[0].strip()
if not filter_rule_column[0].strip() in col_headers:
col_headers.append(filter_rule_column[0].strip())
i= col_headers.index(filter_rule_column[0].strip())
j= i- (len(row)-1)
if j>0:
for x in range(1, j):
row.append(“”)
logger.info(f”i={i} j={j} {filter_rule_column[1]}”)
row.insert(i, filter_rule_column[1].replace(“‘”,””))
print(row)
transformed_filter_rules.append(‘,’.join(row))
row=[]
row.append(catalog)
row.append(database)
row.append(table)
row.append(filter)
max_columns = len(col_headers)
complete_transformed_filter_rules=[]
for rule in transformed_filter_rules:
r = rule.split(“,”)
to_fill = max_columns – len(r)
if to_fill>0:
for x in range(1, to_fill+1):
r.append(“”)
complete_transformed_filter_rules.append(‘,’.join(r))
complete_transformed_filter_rules.insert(0,’,’.join(col_headers))
Hình sau là ví dụ về tệp đã chuyển đổi. Tệp chứa các cột cho cả hai bảng. Khi tạo tập dữ liệu quy tắc cho một bảng cụ thể, các bản ghi được lọc cho bảng đó được kéo vào Amazon QuickSight.
Hàm transformFilterandTablePermissions trong đoạn mã dưới đây sẽ kết hợp và chuyển đổi quyền truy cập bảng và quyền truy cập bộ lọc dữ liệu thành một cấu trúc phẳng với các cột sau:
- ARN của nhóm Amazon QuickSight
- Mã danh mục của Lake Formation
- Tên cơ sở dữ liệu của Lake Formation
- Tên bảng của Lake Formation
- Tên bộ lọc dữ liệu của Lake Formation
Xem đoạn mã dưới đây:
def transformFilterandTablePermissions(permissions):
global transformed_table_permissions,transformed_filter_permissions
# Read and set table level access
transformed_table_permissions = []
transformed_filter_permissions = []
transformed_filter_permissions.insert(0,”group,catalog,database,table,filter”)
transformed_table_permissions.insert(0,”group,catalog,database,table”)
for permission in permissions:
group=””
database=””
table =””
catalog=””
p= permission[“Permissions”]
if “DESCRIBE” in p or “SELECT” in p:
group = permission[“Principal”][“DataLakePrincipalIdentifier”]
if “Database” in permission[“Resource”]:
catalog=permission[“Resource”][“Database”][“CatalogId”]
database=permission[“Resource”][“Database”][“Name”]
table = “*”
transformed_table_permissions.append(group + “,” + catalog+ “,” + database + “,” + table)
transformed_filter_permissions.append(group+”,” +catalog + “,”+ database + “,”+ table)
elif “TableWithColumns” in permission[“Resource”] or “Table” in permission[“Resource”]:
if “TableWithColumns” in permission[“Resource”]:
catalog=permission[“Resource”][“TableWithColumns”][“CatalogId”]
database = permission[“Resource”][“TableWithColumns”][“DatabaseName”]
table = permission[“Resource”][“TableWithColumns”][“Name”]
elif “Table” in permission[“Resource”]:
catalog=permission[“Resource”][“Table”][“CatalogId”]
database = permission[“Resource”][“Table”][“DatabaseName”]
table = permission[“Resource”][“Table”][“Name”]
transformed_table_permissions.append( group + “,” + catalog + “,” + database + “,” + table)
transformed_filter_permissions.append(group+”,” +catalog + “,”+ database + “,”+ table)
elif “DataCellsFilter” in permission[“Resource”]:
catalog=permission[“Resource”][“DataCellsFilter”][“TableCatalogId”]
database = permission[“Resource”][“DataCellsFilter”][“DatabaseName”]
table = permission[“Resource”][“DataCellsFilter”][“TableName”]
filter = permission[“Resource”][“DataCellsFilter”][“Name”]
transformed_filter_permissions.append(group+”,” +catalog + “,”+ database + “,”+ table+ “,”+ filter)
Hình minh họa sau đây là một ví dụ về quyền truy cập bảng và bộ lọc dữ liệu sau khi được trích xuất. Trong AWS Lake Formation, bộ lọc dữ liệu có thể được áp dụng cho bất kỳ đối tượng chính nào. Tuy nhiên, ở đây chúng ta tập trung vào các đối tượng chính của Amazon QuickSight:
- ARN của nhóm QuickSight_Authors có quyền truy cập đầy đủ vào hai bảng. Điều này được xác định thông qua việc chuyển đổi quyền truy cập cấp bảng, ngoài quyền truy cập từ bộ lọc dữ liệu.
- ARN của nhóm QuickSight_Readers có quyền truy cập hạn chế, dựa trên các điều kiện lọc.
Lưu trữ các quy tắc và quyền đã được chuyển đổi vào hai tệp riêng biệt trong Amazon S3
Các quy tắc và quyền truy cập sau khi được chuyển đổi sẽ được lưu trữ trong một hệ thống lưu trữ dữ liệu. Trong giải pháp này, các quy tắc đã chuyển đổi sẽ được ghi vào một vị trí trong Amazon S3 dưới định dạng CSV. Tên các tệp được hàm Lambda tạo ra là:
- transformed_filter_permissions.csv
- transformed_filter_rules.csv
Xem đoạn mã dưới đây:
with open(“/tmp/transformed_table_permissions.csv”, “w”) as txt_file:
for line in transformed_table_permissions:
txt_file.write(line + “\n”) # works with any number of elements in a line
txt_file.close()
s3 = boto3.resource(‘s3’)
s3.meta.client.upload_file(Filename = “/tmp/transformed_table_permissions.csv”, Bucket= os.environ[‘S3Bucket’], Key = “table-permissions/transformed_table_permissions.csv”)
with open(“/tmp/transformed_filter_permissions.csv”, “w”) as txt_file:
for line in transformed_filter_permissions:
txt_file.write(line + “\n”) # works with any number of elements in a line
txt_file.close()
s3.meta.client.upload_file(Filename = “/tmp/transformed_filter_permissions.csv”, Bucket= os.environ[‘S3Bucket’], Key = “filter-permissions/transformed_filter_permissions.csv”)
with open(“/tmp/transformed_filter_rules.csv”, “w”) as txt_file:
for line in complete_transformed_filter_rules:
txt_file.write(line + “\n”) # works with any number of elements in a line
txt_file.close()
s3.meta.client.upload_file(Filename = “/tmp/transformed_filter_rules.csv”, Bucket= os.environ[‘S3Bucket’], Key = “filter-rules/transformed_filter_rules.csv”)
Tạo một tập dữ liệu quy tắc trong Amazon QuickSight
Trong phần này, chúng tôi sẽ hướng dẫn các bước để tạo tập dữ liệu quy tắc trong Amazon QuickSight.
Tạo một bảng trong hồ sơ cho các tập tin
Bước đầu tiên là tạo một bảng trong AWS Lake Formation cho hai tệp:
- transformed_filter_permissions.csv
- transformed_filter_rules.csv
Mặc dù bạn có thể sử dụng trực tiếp kết nối Amazon S3 trong Amazon QuickSight, việc tạo bảng và xây dựng tập dữ liệu quy tắc thông qua kết nối Athena sẽ cung cấp sự linh hoạt hơn trong việc viết câu lệnh SQL tùy chỉnh và sử dụng truy vấn trực tiếp.
Để biết các bước đưa một vị trí Amazon S3 vào AWS Lake Formation, hãy xem phần tạo bảng.
Trong bài viết này, các bảng từ hai tệp trên sẽ được tạo trong một cơ sở dữ liệu riêng có tên là quicksight_lf_transformation.
Cấp quyền cho các bảng nhóm QuickSight_Authors
Cấp quyền trong AWS Lake Formation cho hai bảng cho nhóm QuickSight_Authors. Điều này rất cần thiết để tác giả Amazon QuickSight tạo tập dữ liệu quy tắc trong Amazon QuickSight. Ảnh chụp màn hình sau đây hiển thị chi tiết quyền.
Tạo một tập dữ liệu quy tắc trong Amazon QuickSight
Amazon QuickSight hỗ trợ cả RLS ở cấp người dùng và cấp nhóm. Trong bài viết này, chúng ta sử dụng nhóm để bật tính năng Row-Level Security. Để tạo tập dữ liệu quy tắc, trước tiên bạn cần join bảng quyền truy cập với bảng quy tắc dựa trên các cột: catalog, database, table, filter. Sau đó, bạn có thể lọc các quyền truy cập để chỉ giữ lại các nguyên tắc của Amazon QuickSight, và chỉ chọn các cột cần thiết cho tập dữ liệu. Mục tiêu trong giải pháp này là tạo tập dữ liệu quy tắc cho bảng saas_sales.
Thực hiện các bước sau:
- Trên Amazon QuickSight console, tạo một Athena dataset mới.
- Cấu hình như sau:
- Catalog: chọn AWSDataCatalog
- Database: chọn quicksight_lf_transformation
- Table: chọn filter_permissions
- Catalog: chọn AWSDataCatalog
- Chọn Edit/Preview data
- Chọn Add data
- Chọn Add source
- Chọn Athena
- Cấu hình tiếp:
- Catalog: chọn AWSDataCatalog
- Database: chọn quicksight_lf_transformation
- Table: chọn filter_rules
- Catalog: chọn AWSDataCatalog
- Thực hiện join bảng quyền truy cập với bảng quy tắc bộ lọc dữ liệu dựa trên các cột: catalog, database, table, filter
- Đổi tên cột group thành GroupArn. Việc này cần được thực hiện trước khi áp dụng bộ lọc.
- Lọc dữ liệu với điều kiện cột table bằng saas_sales.
- Lọc thêm với điều kiện cột group chỉ chứa các giá trị bắt đầu bằng arn:aws:quicksight (các đối tượng Amazon QuickSight)
- Loại trừ các trường không thuộc bảng saas_sales.
- Đổi chế độ truy vấn thành SPICE.
- Xuất bản tập dữ liệu.
Nếu tổ chức của bạn có ánh xạ các đối tượng chính khác tới nhóm hoặc người dùng Amazon QuickSight, bạn có thể áp dụng ánh xạ đó trước khi tham gia các bảng.
Bạn cũng có thể viết SQL tùy chỉnh sau để đạt được kết quả tương tự:
SELECT a.”group” as GroupArn, segment FROM “QuickSight_lf_transformation”.”filter_permissions” as a
left join
“QuickSight_lf_transformation”.”filter_rules” as b
on
a.catalog = b.catalog and
a.database = b.database and
a.”table” = b.”table” and
a.filter = b.filter
where a.”table” = ‘saas_sales’
and a.”group” like ‘arn:aws:quicksight%’
- Đặt tên cho tập dữ liệu là LakeFormationRLSDataSet và xuất bản tập dữ liệu.
Kiểm tra bảo mật cấp hàng
Bây giờ bạn đã sẵn sàng để kiểm tra bảo mật cấp hàng bằng cách xuất bản bảng thông tin với tư cách là người dùng trong nhóm QuickSight_Authors, sau đó xem bảng thông tin với tư cách là người dùng trong nhóm QuickSight_Readers.
Xuất bản bảng thông tin dưới dạng người dùng nhóm QuickSight_Authors
Là một tác giả thuộc nhóm QuickSight_Authors, người dùng sẽ có thể xem bảng saas_sales trong kết nối Athena và xem toàn bộ dữ liệu trong bảng đó. Như được minh họa trong phần này, cả ba phân khúc đều hiển thị đối với tác giả khi tạo một phân tích và khi xem bảng điều khiển đã được công bố.
- Tạo một tập dữ liệu bằng cách lấy dữ liệu từ bảng saas_sales thông qua kết nối Athena.
- Đính kèm LakeFormationRLSDataSet làm tập dữ liệu RLS cho tập dữ liệu saas_sales. Để biết hướng dẫn, hãy xem Sử dụng bảo mật cấp hàng với các quy tắc dựa trên người dùng để hạn chế quyền truy cập vào tập dữ liệu.
- Tạo một phân tích bằng cách sử dụng tập dữ liệu saas_sales với tư cách là tác giả thuộc nhóm QuickSight_Authors.
- Xuất bản bảng thông tin.
- Chia sẻ bảng điều khiển với nhóm QuickSight_Readers.
Xem bảng điều khiển như một người dùng nhóm QuickSight_Readers
Thực hiện các bước sau để xem bảng điều khiển dưới tư cách người dùng thuộc nhóm QuickSight_Readers:
- Đăng nhập vào Amazon QuickSight với tư cách người dùng thuộc nhóm QuickSight_Readers.
Người dùng sẽ chỉ có thể thấy phân khúc Doanh nghiệp.
- Bây giờ, hãy thay đổi RLS trong AWS Lake Formation, và đặt phân khúc thành SMB cho QuickSightReaderFilter.
- Chạy hàm Lambda để xuất và chuyển đổi các quy tắc bộ lọc dữ liệu mới.
- Làm mới tập dữ liệu SPICE có tên LakeFormationRLSDataSet trong Amazon QuickSight.
- Khi quá trình làm mới hoàn tất, hãy làm mới bảng điều khiển trong phần đăng nhập của người đọc.
Bây giờ, người dùng reader sẽ thấy dữ liệu của phân khúc SMB.
Dọn dẹp
Tài nguyên Amazon QuickSight
- Xóa bảng điều khiển Amazon QuickSight và phân tích đã tạo
- Xóa các tập dữ liệu: saas_sales và LakeFormationRulesDataSet
- Xóa nguồn dữ liệu Athena
- Xóa các nhóm QuickSight bằng cách sử dụng API DeleteGroup
Tài nguyên AWS Lake Formation
- Xóa chuyển đổi cơ sở dữ liệu quicksight_lf được tạo trong AWS Lake Formation
- Thu hồi quyền đã cấp cho vai trò thực thi Lambda
- Xóa bảng saas_sales và các bộ lọc dữ liệu đã tạo
- Nếu bạn đã sử dụng Glue crawler để tạo bảng trong Lake Formation, hãy xóa Glue crawler đó.
Tài nguyên tính toán
- Xóa hàm AWS Lambda đã tạo
- Xóa vai trò thực thi Lambda gắn với hàm Lambda
Tài nguyên lưu trữ
- Xóa toàn bộ nội dung trong Amazon S3 bucket được tạo cho giải pháp này
- Xóa Amazon S3 bucket
Kết luận
Bài viết này đã giải thích cách tự động sao chép cơ chế bảo mật theo hàng trong AWS Lake Formation sang Amazon QuickSight. Giải pháp này giúp đảm bảo rằng tập dữ liệu SPICE trong QuickSight có thể sử dụng được các quy tắc truy cập theo hàng đã định nghĩa trong Lake Formation.
Giải pháp này cũng có thể được mở rộng cho các nguồn dữ liệu khác. Logic để trích xuất quyền truy cập từ nguồn và chuyển đổi sang định dạng của Amazon QuickSight sẽ phụ thuộc vào từng nguồn dữ liệu cụ thể. Khi phần trích xuất và chuyển đổi đã được thiết lập, giải pháp có thể mở rộng quy mô để phục vụ nhiều nhóm trong tổ chức. Mặc dù bài viết đưa ra một phương pháp cơ bản, quá trình tự động hóa cần được lên lịch chạy định kỳ hoặc kích hoạt dựa trên sự kiện (chẳng hạn khi có thay đổi bộ lọc dữ liệu hoặc cấp/thu hồi quyền trong AWS Lake Formation) để đảm bảo các quyền luôn đồng bộ giữa Lake Formation và Amazon QuickSight.
Hãy thử áp dụng giải pháp này cho nhu cầu thực tế của bạn, và chia sẻ phản hồi trong phần bình luận.
Về các tác giả
Vetri Natarajan là một Chuyên gia Kiến trúc Giải pháp cho Amazon QuickSight.Vetri có 15 năm kinh nghiệm trong việc triển khai các giải pháp trí tuệ doanh nghiệp (BI) cấp doanh nghiệp và các sản phẩm dữ liệu mới.Vetri chuyên về tích hợp các giải pháp BI với các ứng dụng doanh nghiệp và thúc đẩy quyết định dựa trên dữ liệu.
Ismael Murillo là một Kiến trúc sư Giải pháp (Solutions Architect) cho Amazon QuickSight. Trước khi gia nhập AWS, Ismael đã làm việc tại Amazon Logistics (AMZL), nơi ông trực tiếp hỗ trợ quản lý trạm giao hàng, các nhà cung cấp dịch vụ giao hàng và khách hàng ngoài hiện trường.Ismael tập trung vào giao hàng chặng cuối (last mile delivery) và hiệu quả giao hàng. Ông đã thiết kế và triển khai nhiều giải pháp sáng tạo nhằm giảm chi phí và tăng tỷ lệ giao hàng thành công.Ismael cũng là cựu chiến binh Quân đội Hoa Kỳ, nơi ông đã phục vụ trong 11 năm.