קישור אל Amazon S3
אדמינים ב-BigQuery יכולים ליצור חיבור כדי לאפשר לנתח נתונים לגשת לנתונים שמאוחסנים בדליים של Amazon Simple Storage Service (Amazon S3).
BigQuery Omni ניגש לנתונים ב-Amazon S3 באמצעות חיבורים. לכל חיבור יש משתמש ייחודי בניהול הזהויות והרשאות הגישה (IAM) של Amazon Web Services (AWS). אתם מעניקים הרשאות למשתמשים באמצעות תפקידים ב-AWS IAM. המדיניות בתפקידי AWS IAM קובעת לאילו נתונים BigQuery יכול לגשת עבור כל חיבור.
צריך חיבורים כדי ליצור שאילתות על הנתונים ב-Amazon S3 וגם כדי לייצא תוצאות של שאילתות מ-BigQuery לקטגוריית S3 שלכם ב-Amazon.
לפני שמתחילים
מוודאים שיצרתם את המשאבים הבאים:
- 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 למינימום הנדרש.
- מגדירים את CloudTrails ומפעילים את אירועי הנתונים של Amazon S3.
כדי ליצור מדיניות AWS IAM, משתמשים במסוף AWS או ב-Terraform:
מסוף AWS
נכנסים למסוף AWS IAM. מוודאים שאתם בחשבון שבבעלותו קטגוריית Amazon S3 שאליה אתם רוצים לגשת.
בוחרים באפשרות מדיניות > יצירת מדיניות (נפתח בכרטיסייה חדשה).
לוחצים על 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.לוחצים על יצירת מדיניות.
המדיניות נוצרת עם שם משאב Amazon (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 ולהעניק לתפקיד גישה לכתיבה בלבד. כדי להגדיר בקרת גישה מפורטת יותר, אפשר גם להגביל את הגישה של תפקיד לנתיב ספציפי של הקטגוריה.
המדיניות נוצרת עם שם משאב Amazon (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 שאליה אתם רוצים לגשת.
בוחרים באפשרות תפקידים > יצירת תפקיד.
בקטע Select type of trusted entity (בחירת סוג של ישות מהימנה), בוחרים באפשרות Web Identity (זהות באינטרנט).
בשדה ספק זהויות, בוחרים באפשרות Google.
בשדה קהל, מזינים את הערך
00000כערך placeholder. תחליפו את הערך בהמשך.לוחצים על הבא: הרשאות.
כדי לתת לתפקיד גישה לנתונים שלכם ב-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
מוסיפים את הקוד הבא להגדרות של Terraform כדי ליצור תפקיד IAM ולהקצות את המדיניות לתפקיד שנוצר:
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 console, בכלי שורת הפקודה של BigQuery או בספריית הלקוח:
המסוף
עוברים לדף BigQuery.
בחלונית Explorer, לוחצים על Add data.
תיבת הדו-שיח הוספת נתונים נפתחת.
בחלונית Filter By, בקטע Data Source Type, בוחרים באפשרות Storage/Data Lakes.
אפשרות אחרת היא להזין
awsאוAmazon S3בשדה חיפוש מקורות נתונים.בקטע מקורות נתונים מומלצים, לוחצים על Amazon S3.
לוחצים על כרטיס הפתרון Amazon S3 Omni: BigQuery Federation.
בתיבת הדו-שיח Create table, בשדה Connection ID, בוחרים באפשרות Create a new S3 connection.
בחלונית מקור נתונים חיצוני, מזינים את הפרטים הבאים:
- בקטע סוג החיבור, בוחרים באפשרות BigLake ב-AWS (דרך BigQuery Omni).
- בשדה מזהה החיבור, מזינים מזהה למשאב החיבור. אפשר להשתמש באותיות, במספרים, במקפים ובקווים תחתונים.
- בקטע Region בוחרים את המיקום שבו רוצים ליצור את החיבור.
- אופציונלי: בשדה Friendly name (שם ידידותי), מזינים שם ידידותי לחיבור, כמו
My connection resource. השם הידידותי יכול להיות כל ערך שיעזור לכם לזהות את משאב החיבור אם תצטרכו לשנות אותו בהמשך. - אופציונלי: בשדה Description, מזינים תיאור למשאב החיבור הזה.
- בשדה מזהה תפקיד ב-AWS, מזינים את מזהה תפקיד ה-IAM המלא שיצרתם בפורמט הזה:
arn:aws:iam::AWS_ACCOUNT_ID:role/ROLE_NAME
לוחצים על יצירת קישור.
לוחצים על מעבר לחיבור.
בחלונית פרטי החיבור, מעתיקים את הזהות של 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.
אפשר להעניק לחשבון השירות גישה לתפקיד ב-AWS, או שאם בחשבון AWS שלכם יש ספק זהויות בהתאמה אישית ל-accounts.google.com, אתם צריכים להוסיף את חשבון השירות כקהל לספק: Google Cloud 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 בחיבור שיצרתם.לוחצים על עדכון מדיניות האמון.
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: הערך של הזהות ב-BigQuery Google, שאפשר למצוא במסוף 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.
לוחצים על הוספת קהל ומוסיפים את IDENTITY_ID כקהל.
החיבור מוכן לשימוש.
שיתוף חיבורים עם משתמשים
אתם יכולים להקצות את התפקידים הבאים כדי לאפשר למשתמשים לשלוח שאילתות לנתונים ולנהל חיבורים:
roles/bigquery.connectionUser: מאפשר למשתמשים להשתמש בחיבורים כדי להתחבר למקורות נתונים חיצוניים ולהריץ עליהם שאילתות.
roles/bigquery.connectionAdmin: מאפשר למשתמשים לנהל את החיבורים.
במאמר תפקידים והרשאות מוגדרים מראש יש מידע נוסף על תפקידים והרשאות ב-IAM ב-BigQuery.
בוחרים באחת מהאפשרויות הבאות:
המסוף
עוברים לדף BigQuery.
החיבורים מופיעים בפרויקט בקבוצה שנקראת Connections (חיבורים).
בחלונית הימנית, לוחצים על כלי הניתוחים:

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