קישור אל Amazon S3
חיבור ל-Amazon Simple Storage Service (Amazon S3) ב-BigQuery מאפשר למנתחי נתונים לשלוח שאילתות לגבי נתונים שמאוחסנים בקטגוריות של Amazon S3 ולייצא תוצאות של שאילתות מ-BigQuery ל-Amazon S3. אתם יכולים ליצור חיבור כדי ש-BigQuery Omni יוכל לגשת באופן מאובטח לנתונים שלכם ב-Amazon S3.
לכל חיבור יש משתמש ייחודי ב-Amazon Web Services (AWS) Identity and Access Management (IAM). אתם נותנים הרשאות למשתמש הזה באמצעות תפקידי AWS IAM, שהמדיניות שלהם קובעת לאילו נתונים BigQuery יכול לגשת בכל חיבור.
לפני שמתחילים
מוודאים שיצרתם את המשאבים הבאים:
- Google Cloud פרויקט שבו מופעל BigQuery Connection API.
- אם אתם משתמשים במודל תמחור מבוסס-קיבולת, ודאו שהפעלתם את BigQuery Reservation API בפרויקט. למידע על תמחור, ראו תמחור של BigQuery Omni.
- חשבון AWS עם הרשאות לשינוי כללי מדיניות של IAM ב-AWS.
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות ליצירת חיבור לגישה לנתונים ב-Amazon S3, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד אדמין של חיבורי BigQuery (roles/bigquery.connectionAdmin) בפרויקט.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
יצירת מדיניות AWS IAM ל-BigQuery
חשוב לפעול לפי השיטות המומלצות לאבטחה ב-Amazon S3. מה אתם יכולים לעשות?
- מגדירים מדיניות AWS שמונעת גישה לקטגוריית Amazon S3 דרך HTTP.
- מגדירים מדיניות AWS שמונעת גישה ציבורית לקטגוריית Amazon S3.
- להשתמש בהצפנה בצד השרת של Amazon S3.
- להגביל את ההרשאות שניתנות לחשבון Google למינימום הנדרש.
- מגדירים את CloudTrail ומפעילים אירועי נתונים של Amazon S3.
כדי ליצור מדיניות AWS IAM, משתמשים במסוף AWS או ב-Terraform:
מסוף AWS
נכנסים למסוף AWS IAM. מוודאים שאתם נמצאים בחשבון שבבעלותו קטגוריית Amazon S3 שאליה אתם רוצים לגשת.
בוחרים באפשרות Policies > Create policy (מדיניות > יצירת מדיניות) (הקישור נפתח בכרטיסייה חדשה).
לוחצים על JSON ומדביקים את הקוד הבא בעורך:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", EXPORT_PERM ], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] }
מחליפים את מה שכתוב בשדות הבאים:
-
BUCKET_NAME: הקטגוריה ב-Amazon S3 שאתם רוצים של-BigQuery תהיה גישה אליה. -
EXPORT_PERM(אופציונלי): הרשאה נוספת אם רוצים לייצא נתונים לקטגוריה של Amazon S3. החלפה ב-"s3:PutObject"- כדי להפריד את בקרת הגישה לייצוא, מומלץ ליצור חיבור נוסף עם תפקיד נפרד ב-AWS IAM ולהעניק לתפקיד גישה לכתיבה בלבד. כדי להגדיר בקרת גישה מפורטת יותר, אפשר גם להגביל את הגישה של תפקיד לנתיב ספציפי של הקטגוריה.
-
בשדה Name, מזינים שם למדיניות, למשל
bq_omni_read_only.לוחצים על יצירת מדיניות.
המדיניות נוצרת עם שם משאב של אמזון (ARN) בפורמט הבא:
arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
AWS_ACCOUNT_ID: מספר המזהה של משתמש AWS IAM של החיבור. -
POLICY_NAME: שם המדיניות שבחרתם.
AWS CLI
כדי ליצור מדיניות AWS IAM, משתמשים בפקודה aws iam create-policy:
aws iam create-policy \ --policy-name POLICY_NAME \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::BUCKET_NAME" ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", EXPORT_PERM ], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] }'
מחליפים את מה שכתוב בשדות הבאים:
-
POLICY_NAME: שם המדיניות שיוצרים. -
BUCKET_NAME: הקטגוריה ב-Amazon S3 שאתם רוצים של-BigQuery תהיה גישה אליה. -
EXPORT_PERM(אופציונלי): הרשאה נוספת אם רוצים לייצא נתונים לקטגוריה של Amazon S3. החלפה ב-"s3:PutObject"- כדי להפריד את בקרת הגישה לייצוא, מומלץ ליצור חיבור נוסף עם תפקיד נפרד ב-AWS IAM ולהעניק לתפקיד גישה לכתיבה בלבד. כדי להגדיר בקרת גישה מפורטת יותר, אפשר גם להגביל את הגישה של תפקיד לנתיב ספציפי של הקטגוריה.
המדיניות נוצרת עם שם משאב של אמזון (ARN) בפורמט הבא:
arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
AWS_ACCOUNT_ID: מספר המזהה של משתמש AWS IAM של החיבור. -
POLICY_NAME: שם המדיניות שבחרתם.
Terraform
כדי לצרף מדיניות למשאב של קטגוריה ב-Amazon S3, מוסיפים את הקוד הבא להגדרות של Terraform:
resource "aws_iam_policy" "bigquery-omni-connection-policy" { name = "bigquery-omni-connection-policy" policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Sid": "BucketLevelAccess", "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": ["arn:aws:s3:::BUCKET_NAME"] }, { "Sid": "ObjectLevelAccess", "Effect": "Allow", "Action": ["s3:GetObject",EXPORT_PERM], "Resource": [ "arn:aws:s3:::BUCKET_NAME", "arn:aws:s3:::BUCKET_NAME/*" ] } ] } EOF }
מחליפים את מה שכתוב בשדות הבאים:
-
BUCKET_NAME: הקטגוריה ב-Amazon S3 שאתם רוצים של-BigQuery תהיה גישה אליה. -
EXPORT_PERM(אופציונלי): הרשאה נוספת אם רוצים לייצא נתונים לקטגוריה של Amazon S3. החלפה ב-"s3:PutObject"- כדי להפריד את בקרת הגישה לייצוא, מומלץ ליצור חיבור נוסף עם תפקיד AWS IAM נפרד, ולהעניק לתפקיד גישה לכתיבה בלבד. כדי להגדיר בקרת גישה מפורטת יותר, אפשר גם להגביל את הגישה של תפקיד לנתיב ספציפי בקטגוריה.
יצירת תפקיד AWS IAM ל-BigQuery
בשלב הבא, יוצרים תפקיד שמאפשר גישה לקטגוריה ב-Amazon S3 מתוך BigQuery. התפקיד הזה משתמש במדיניות שיצרתם בקטע הקודם.
כדי ליצור תפקיד AWS IAM, משתמשים במסוף AWS או ב-Terraform:
מסוף AWS
נכנסים למסוף AWS IAM. מוודאים שאתם נמצאים בחשבון שבבעלותו קטגוריית Amazon S3 שאליה אתם רוצים לגשת.
בוחרים באפשרות Roles > Create role.
בקטע Select type of trusted entity, בוחרים באפשרות Web Identity.
בשדה ספק זהויות, בוחרים באפשרות Google.
בשדה קהל, מזינים
00000כערך זמני לשמירת מקום (פלייסהולדר). בהמשך תחליפו את הערך.לוחצים על הבא: הרשאות.
כדי לתת לתפקיד גישה לנתונים ב-Amazon S3, צריך לצרף לתפקיד מדיניות IAM. מחפשים את המדיניות שיצרתם בקטע הקודם ולוחצים על המתג.
לוחצים על הבא: תגים.
לוחצים על הבא: בדיקה. מזינים שם לתפקיד, למשל
BQ_Read_Only.לוחצים על יצירת תפקיד.
AWS CLI
כדי ליצור תפקיד ב-IAM ולהקצות לו את המדיניות שנוצרה, משתמשים בפקודה הבאה:
aws iam create-role \ --role-name bigquery-omni-connection \ --max-session-duration 43200 \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "00000" } } } ] }'
Terraform
כדי ליצור תפקיד ב-IAM ולהקצות את המדיניות לתפקיד שנוצר, מוסיפים את הקוד הבא להגדרות של Terraform:
resource "aws_iam_role" "bigquery-omni-connection-role" { name = "bigquery-omni-connection" max_session_duration = 43200 assume_role_policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "00000" } } } ] } EOF } resource "aws_iam_role_policy_attachment" "bigquery-omni-connection-role-attach" { role = aws_iam_role.bigquery-omni-connection-role.name policy_arn = aws_iam_policy.bigquery-omni-connection-policy.arn } output "bigquery_omni_role" { value = aws_iam_role.bigquery-omni-connection-role.arn }
לאחר מכן, מצרפים את המדיניות לתפקיד:
aws iam attach-role-policy \ --role-name bigquery-omni-connection \ --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/POLICY_NAME
מחליפים את מה שכתוב בשדות הבאים:
-
AWS_ACCOUNT_ID: מספר המזהה של משתמש AWS IAM של החיבור. -
POLICY_NAME: שם המדיניות שבחרתם.
יצירת חיבורים
כדי להתחבר לקטגוריה ב-Amazon S3, משתמשים במסוףGoogle Cloud , בכלי שורת הפקודה של BigQuery או בספריית הלקוח:
המסוף
נכנסים לדף BigQuery.
בחלונית Explorer, לוחצים על Add data.
תיבת הדו-שיח Add data נפתחת.
בחלונית Filter By, בקטע Data Source Type, בוחרים באפשרות Storage/Data Lakes.
אפשר גם להזין
awsאוAmazon S3בשדה Search for data sources.בקטע מקורות נתונים מומלצים, לוחצים על Amazon S3.
לוחצים על כרטיס הפתרון Amazon S3 Omni: BigQuery Federation.
בחלונית External data source, מזינים את הפרטים הבאים:
- בשדה Connection type, בוחרים באפשרות BigLake on AWS (via BigQuery Omni).
- בשדה Connection ID, מזינים מזהה למשאב החיבור. אפשר להשתמש באותיות, במספרים, במקפים ובקווים תחתונים.
- בשדה Region, בוחרים את המיקום שבו רוצים ליצור את החיבור.
- אופציונלי: בשדה Friendly name, מזינים שם ידידותי למשתמש בשביל החיבור, למשל
My connection resource. השם הידידותי יכול להיות כל ערך שיעזור לכם לזהות את משאב החיבור אם תצטרכו לשנות אותו מאוחר יותר. - אופציונלי: בשדה Description, מזינים תיאור למשאב החיבור.
- בשדה AWS role id, מזינים את המזהה המלא של תפקיד ה-IAM שיצרתם בפורמט הבא:
arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME
לוחצים על יצירת חיבור.
לוחצים על מעבר לחיבור.
בחלונית Connection info, מעתיקים את מזהה Google ל-BigQuery. זהו חשבון משתמש של Google שספציפי לכל חיבור. דוגמה:
BigQuery Google identity: IDENTITY_ID
Terraform
resource "google_bigquery_connection" "connection" { connection_id = "bigquery-omni-aws-connection" friendly_name = "bigquery-omni-aws-connection" description = "Created by Terraform" location = "AWS_LOCATION" aws { access_role { # This must be constructed as a string instead of referencing the # AWS resources directly to avoid a resource dependency cycle # in Terraform. iam_role_id = "arn:aws:iam::AWS_ACCOUNT:role/IAM_ROLE_NAME" } } }
מחליפים את מה שכתוב בשדות הבאים:
-
AWS_LOCATION: מיקום ב-Amazon S3 ב- Google Cloud -
AWS_ACCOUNT: מזהה החשבון ב-AWS. -
IAM_ROLE_NAME: התפקיד שמאפשר גישה לקטגוריה ב-Amazon S3 מ-BigQuery. משתמשים בערך של הארגומנטnameמהמשאבaws_iam_roleבקטע יצירת תפקיד AWS IAM ל-BigQuery.
BQ
bq mk --connection --connection_type='AWS' \ --iam_role_id=arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME \ --location=AWS_LOCATION \ CONNECTION_ID
מחליפים את מה שכתוב בשדות הבאים:
-
AWS_ACCOUNT_ID: מספר המזהה של משתמש AWS IAM של החיבור -
ROLE_NAME: שם מדיניות התפקיד שבחרתם -
AWS_LOCATION: מיקום ב-Amazon S3 ב- Google Cloud -
CONNECTION_ID: המזהה שאתם נותנים למשאב החיבור הזה.
בשורת הפקודה מופיע הפלט הבא:
Identity: IDENTITY_ID
הפלט מכיל את הפרטים הבאים:
-
IDENTITY_ID: חשבון משתמש ב-Google ש Google Cloudאמצעי בקרה ספציפיים לכל חיבור.
שימו לב לערך של IDENTITY_ID.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
הוספת יחסי אמון לתפקיד ב-AWS
ב-BigQuery Omni יש שתי שיטות לגישה מאובטחת לנתונים מ-Amazon S3.
אתם יכולים לתת לחשבון השירות של Google Cloud גישה לתפקיד ב-AWS, או אם לחשבון AWS יש ספק זהויות בהתאמה אישית בשביל accounts.google.com, אתם צריכים להוסיף את חשבון השירות של Google Cloud כקהל לספק:
הוספת מדיניות אמון לתפקיד ב-AWS
יחסי האמון מאפשרים לחיבור לקבל את התפקיד ולגשת לנתונים ב-Amazon S3, בהתאם למדיניות של התפקיד.
כדי להוסיף יחסי אמון, משתמשים במסוף AWS או ב-Terraform:
מסוף AWS
נכנסים למסוף AWS IAM. מוודאים שאתם נמצאים בחשבון שבבעלותו קטגוריית Amazon S3 שאליה אתם רוצים לגשת.
לוחצים על תפקידים.
בוחרים את ה-
ROLE_NAMEשיצרתם.לוחצים על עריכה ואז מבצעים את הפעולות הבאות:
מגדירים את משך הסשן המקסימלי ל-12 שעות. כל שאילתה יכולה לפעול עד שש שעות, כך שמשך הזמן הזה מאפשר ניסיון חוזר אחד נוסף. הארכת משך הסשן מעבר ל-12 שעות לא תאפשר ניסיונות נוספים. מידע נוסף זמין בקטע מגבלת זמן הביצוע של שאילתה או של שאילתה עם כמה הצהרות.

לוחצים על שמירת השינויים.
בוחרים באפשרות Trust Relationships ולוחצים על Edit trust relationship. מחליפים את תוכן המדיניות בתוכן הבא:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "IDENTITY_ID" } } } ] }
מחליפים את
IDENTITY_IDבערך של מזהה Google ל-BigQuery, שמופיע במסוף Google Cloud של החיבור שיצרתם.לוחצים על Update Trust Policy.
AWS CLI
כדי ליצור יחסי אמון עם החיבור ל-BigQuery, משתמשים בפקודה aws iam update-assume-role-policy:
aws iam update-assume-role-policy \ --role-name bigquery-omni-connection \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "IDENTITY_ID" } } } ] }' aws iam update-assume-role-policy \ --role-name bigquery-omni-connection \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "IDENTITY_ID" } } } ] }'
מחליפים את מה שכתוב בשדות הבאים:
-
IDENTITY_ID: הערך של מזהה Google ל-BigQuery, שמופיע במסוף Google Cloud של החיבור שיצרתם.
Terraform
מעדכנים את המשאב aws_iam_role בהגדרות של Terraform כדי להוסיף יחסי אמון:
resource "aws_iam_role" "bigquery-omni-connection-role" { name = "bigquery-omni-connection" max_session_duration = 43200 assume_role_policy = <<-EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "${google_bigquery_connection.connection.aws[0].access_role[0].identity}" } }` } ] } EOF }
החיבור מוכן לשימוש.
הגדרת ספק זהויות מותאם אישית ב-AWS
אם בחשבון AWS יש ספק זהויות בהתאמה אישית ל-accounts.google.com, צריך להוסיף את IDENTITY_ID כקהל לספק. כדי לעשות את זה:
נכנסים למסוף AWS IAM. מוודאים שאתם נמצאים בחשבון שבבעלותו קטגוריית Amazon S3 שאליה אתם רוצים לגשת.
עוברים אל IAM > Identity Providers.
בוחרים את ספק הזהויות של accounts.google.com.
לוחצים על Add Audience ומוסיפים את IDENTITY_ID בתור הקהל.
החיבור מוכן לשימוש.
שיתוף חיבורים עם משתמשים
כדי לאפשר למשתמשים לשלוח שאילתות לגבי נתונים ולנהל חיבורים, אתם יכולים להקצות את התפקידים הבאים:
roles/bigquery.connectionUser: מאפשרת למשתמשים להשתמש בחיבורים כדי להתחבר למקורות נתונים חיצוניים ולהריץ עליהם שאילתות.
roles/bigquery.connectionAdmin: מאפשר למשתמשים לנהל חיבורים.
במאמר תפקידים והרשאות מוגדרים מראש תוכלו לקרוא מידע נוסף על תפקידים והרשאות של IAM ב-BigQuery.
בוחרים באחת מהאפשרויות הבאות:
המסוף
נכנסים לדף BigQuery.
הקישורים מופיעים בפרויקט בקבוצה שנקראת Connections.
בחלונית השמאלית, לוחצים על Explorer:

אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
לוחצים על הפרויקט, לוחצים על Connections ובוחרים חיבור.
כדי לשתף חיבור, בחלונית פרטים לוחצים על שיתוף. לאחר מכן מבצעים את הפעולות הבאות:
בתיבת הדו-שיח Connection permissions, משתפים את החיבור עם חשבונות משתמשים אחרים על ידי הוספה או עריכה של חשבונות משתמשים.
לוחצים על Save.
BQ
אי אפשר לשתף חיבור באמצעות כלי שורת הפקודה של BigQuery. כדי לשתף חיבור, משתמשים במסוף Google Cloud או ב-BigQuery Connections API.
API
משתמשים בשיטה projects.locations.connections.setIAM בקטע של מאמרי העזרה של ה-API בנושא BigQuery Connections API בארכיטקטורת REST, ומספקים מכונה של המשאב policy.
Java
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.