הנדסת תכונות בקנה מידה גדול עם הגנה על נתונים רגישים באמצעות הפעלות אינטראקטיביות של AWS Glue ו-Amazon SageMaker Studio PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

הנדסת תכונות בקנה מידה גדול עם הגנה על נתונים רגישים באמצעות הפעלות אינטראקטיביות של AWS Glue ו-Amazon SageMaker Studio

ארגונים משתמשים בשירותי למידת מכונה (ML) ובשירותי AI כדי לשפר את חווית הלקוח, להפחית את העלות התפעולית ולפתוח אפשרויות חדשות לשיפור התוצאות העסקיות. הנתונים עומדים בבסיס מקרי שימוש ב-ML ובינה מלאכותית ומהווים נכס אסטרטגי לארגון. מכיוון שהנתונים גדלים בקצב אקספוננציאלי, ארגונים מחפשים להקים פלטפורמת נתונים משולבת, חסכונית ובעלת ביצועים על מנת לעבד נתונים מראש, לבצע הנדסת תכונות ולבנות, לאמן ולהפעיל מודלים של ML בקנה מידה. כדי להשיג זאת, AWS מציעה פלטפורמת נתונים מודרנית מאוחדת המופעלת על ידי שירות אחסון פשוט של אמזון (Amazon S3) בתור אגם הנתונים עם כלים ומנועי עיבוד ייעודיים לתמיכה בניתוח ועומסי עבודה של ML. לחוויית ML מאוחדת, אתה יכול להשתמש סטודיו SageMaker של אמזון, אשר מציעה אינטגרציה מקורית עם הפעלות אינטראקטיביות של AWS Glue לבצע הנדסת תכונות בקנה מידה עם הגנה על נתונים רגישים. בפוסט זה, אנו מדגימים כיצד ליישם פתרון זה.

אמזון SageMaker הוא שירות ML מנוהל במלואו המאפשר לך לבנות, לאמן ולפרוס מודלים בקנה מידה עבור מגוון רחב של מקרי שימוש. לאימון מודלים, אתה יכול להשתמש בכל אחד מה אלגוריתמים מובנים בתוך SageMaker כדי להתחיל בהדרכה ובפריסה של מודלים של ML במהירות.

מרכיב מרכזי בתהליך בניית ופיתוח המודלים הוא הנדסת תכונות. דבק AWS היא אחת האפשרויות המומלצות להשגת הנדסת תכונות בקנה מידה. AWS Glue מאפשר לך להריץ אינטגרציה וטרנספורמציה של נתונים בצורה מבוזרת על תשתית Apache Spark ללא שרת, ומקלה על השימוש בספריית Spark ML הפופולרית להנדסת תכונות ופיתוח מודלים. בנוסף, אתה יכול להשתמש ב-AWS Glue לעיבוד נתונים מצטבר באמצעות סימניות עבודה, להטמיע נתונים מיותר מ-100 מקורות באמצעות מחברים, והפעל עומסי עבודה קוצניים או בלתי צפויים באמצעות קנה מידה אוטומטי.

דרישה חשובה נוספת ליישומים מבוססי ML היא אבטחת מידע ובקרת גישה. דרישה נפוצה היא לקבל שליטה הדוקה יותר על מי שיכול לגשת לנתונים הרגישים ביותר כחלק מתהליך הנדסת התכונות ובניית המודלים על ידי ביצוע עיקרון הגישה הפחותה. כדי להשיג זאת, אתה יכול להשתמש בשילוב AWS Glue עם תצורת אגם AWS להגברת הממשל והניהול של נכסי אגם הנתונים. עם Lake Formation, אתה יכול להגדיר בקרת גישה לנתונים ומדיניות אבטחה עדינה על גבי אגם הנתונים של Amazon S3 שלך. המדיניות מוגדרת במיקום מרכזי, המאפשרת מספר שירותי ניתוח ו-ML, כגון AWS Glue, אמזונה אתנה, ו- SageMaker, כדי ליצור אינטראקציה עם נתונים המאוחסנים באמזון S3.

דבק AWS כולל א זיהוי מידע אישי (PII). טרנספורמציה המספקת את היכולת לזהות, להסוות או להסיר ישויות לפי הצורך, להגברת הציות והממשל. עם טרנספורמציה של PII, אתה יכול לזהות נתוני PII במערך נתונים ולהחיל אוטומטית בקרת גישה עדינה באמצעות Lake Formation כדי להגביל נתונים רגישים עבור קבוצות משתמשים שונות.

השתמש במקרה

אנו מתמקדים במקרה של שימוש במודל נטייה הכולל מערך נתונים של שיווק לקוחות וכולל שתי אישיות משתמשים: מהנדס נתונים ומדען נתונים. מערך הנתונים מכיל מידע לכל לקוח, כולל מקור לידים, הערות ליצירת קשר, תפקיד תפקיד, כמה דגלים, צפיות בדפים לכל ביקור ועוד. מערך הנתונים כולל גם מידע רגיש כמו מספרי טלפון אישיים.

מהנדס הנתונים אחראי על בניית צינור עיבוד הנתונים מקצה לקצה, כולל הכנת נתונים, עיבוד מקדים ובקרת גישה. מדען הנתונים אחראי על הנדסת תכונות, והדרכה ופריסה של מודל ה-ML. שימו לב כי מדען הנתונים אינו רשאי לגשת לנתונים רגישים ל-PII לצורך הנדסת תכונות או אימון מודל ה-ML.

כחלק ממקרה שימוש זה, מהנדס הנתונים בונה צינור נתונים כדי לעבד מראש את מערך הנתונים, סורק את מערך הנתונים עבור כל מידע PII, ומגביל את הגישה של העמודה PII למשתמש של מדען הנתונים. כתוצאה מכך, כאשר מדען נתונים משתמש במערך הנתונים כדי לבצע הנדסת תכונות ולבנות מודלים של ML, אין לו גישה לעמודה הרגישה ל-PII (מספרי טלפון, במקרה זה). תהליך הנדסת התכונות כולל המרת עמודות של מחרוזת סוג לפורמט אופטימלי עבור דגמי ML. כמקרה שימוש מתקדם, אתה יכול להרחיב את דפוס הגישה הזה כדי ליישם אבטחה ברמת השורה וברמת התא באמצעות Lake Formation.

סקירת פתרונות

הפתרון מכיל את השלבים הבאים ברמה גבוהה:

  1. הגדר משאבים עם AWS CloudFormation.
  2. עבד מראש את מערך הנתונים, כולל זיהוי PII ובקרת גישה עדינה, בהפעלה אינטראקטיבית של AWS Glue.
  3. בצע הנדסת תכונות במפגש אינטראקטיבי של AWS Glue.
  4. אימון ופריסה של מודל ML באמצעות אלגוריתם XGBoost המובנה של SageMaker.
  5. הערך את מודל ה-ML.

התרשים הבא ממחיש את ארכיטקטורת הפתרונות.

תנאים מוקדמים

כדי להשלים מדריך זה, עליך לעמוד בדרישות הקדם הבאות:

הגדר משאבים עם AWS CloudFormation

פוסט זה כולל תבנית CloudFormation להגדרה מהירה. אתה יכול לסקור ולהתאים אותו כך שיתאים לצרכים שלך. אם אתה מעדיף להגדיר משאבים ב- קונסולת הניהול של AWS ואת AWS CLI ולא AWS CloudFormation, ראה את ההוראות בנספח בסוף פוסט זה.

תבנית CloudFormation מייצרת את המשאבים הבאים:

  • S3 דליים עם מערך נתונים לדוגמה
  • An AWS למבדה פונקציה לטעינת מערך הנתונים
  • AWS זהות וניהול גישה (IAM) קבוצה, משתמשים, תפקידים ומדיניות
  • הגדרות והרשאות אגם נתוני אגם Formation
  • פרופילי משתמש של SageMaker

כדי ליצור את המשאבים שלך, בצע את השלבים הבאים:

  1. היכנס לקונסולה.
  2. בחרו השקת ערימה:
    כפתור הפעלה
  3. בחרו הַבָּא.
  4. בעד DataEngineerPwd ו DataScientistPwd, הזן סיסמה משלך עבור משתמשי מהנדס הנתונים ומדען הנתונים.
  5. בעד GlueDatabaseName, להיכנס demo.
  6. בעד GlueTableName, להיכנס web_marketing.
  7. בעד S3BucketNameForInput, להיכנס blog-studio-pii-dataset-.
  8. בעד S3BucketNameForOutput, להיכנס blog-studio-output-.
  9. בעד SageMakerDomainId, הזן את מזהה הדומיין שלך ב-SageMaker שהכנת בשלבים המוקדמים.
  10. בחרו הַבָּא.
  11. בדף הבא בחר הַבָּא.
  12. עיין בפרטים בדף הסופי ובחר אני מאשר ש- AWS CloudFormation עשוי ליצור משאבי IAM.
  13. בחרו צור.

יצירת מחסנית יכולה להימשך עד 10 דקות. המחסנית יוצרת תפקידי IAM ופרופילי משתמש של SageMaker עבור שתי פרסונות: מהנדס נתונים ומדען נתונים. זה גם יוצר הדגמה וטבלה של מסד נתונים web_marketing עם מערך נתונים לדוגמה.

בזמן יצירת המחסנית, לפרסונה של מהנדס הנתונים יש גישה מלאה לטבלה, אך לפרסונת מדען הנתונים אין עדיין גישה לטבלה.

עבד מראש את מערך הנתונים

בואו נתחיל לעבד נתונים מראש בהפעלה אינטראקטיבית של AWS Glue. פרסונת מהנדס הנתונים רוצה לאמת את הנתונים כדי לראות אם יש נתונים רגישים או לא, ולהעניק הרשאת גישה מינימלית לפרסונה של מדען הנתונים. אתה יכול להוריד מחברת מ מיקום זה.

  1. היכנס למסוף באמצעות המשתמש מהנדס נתונים.
  2. במסוף SageMaker בחר משתמש.
  3. בחר את המשתמש מהנדס נתונים ובחר סטודיו פתוח.
  4. צור מחברת חדשה ובחר SparkAnalytics 1.0 ל תמונה ו דבק PySpark ל גַרעִין.
  5. התחל הפעלה אינטראקטיבית עם הקסם הבא להתקנת הגרסה החדשה יותר של Boto3 (זה נדרש לשימוש ב- create_data_cells_filter שיטה):
    %additional_python_modules boto3==1.24.82

  6. אתחול הפגישה:
    import boto3
    import sys
    from awsglue.transforms import *
    from awsglue.utils import getResolvedOptions
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    from awsglue.job import Job
    
    sc = SparkContext.getOrCreate()
    glueContext = GlueContext(sc)
    spark = glueContext.spark_session
    job = Job(glueContext)

  7. צור AWS Glue DynamicFrame מהטבלה החדשה שנוצרה, ו לפתור סוגי בחירה מבוסס על סכימת קטלוג, מכיוון שאנו רוצים להשתמש בסכימה המוגדרת בקטלוג במקום בסכימה המבוססת על נתונים אוטומטית:
    dyf_marketing = glueContext.create_dynamic_frame.from_catalog(
    database="demo",
    table_name="web_marketing"
    )
    
    dyf_marketing_resolved = dyf_marketing.resolveChoice(
    choice="match_catalog",
    database="demo",
    table_name="web_marketing"
    )
    
    dyf_marketing_resolved.printSchema()

  8. אמת בטבלה אם יש נתוני PII באמצעות זיהוי AWS Glue PII:
    from awsglueml.transforms import EntityDetector
    
    entities_filter = [
    "EMAIL",
    "CREDIT_CARD",
    "IP_ADDRESS",
    "MAC_ADDRESS",
    "PHONE_NUMBER"
    ]
    entity_detector = EntityDetector()
    classified_map = entity_detector.classify_columns(dyf_marketing_resolved, entities_filter, 1.0, 0.1)
    print(classified_map)

  9. ודא אם העמודות המסווגות כ-PII מכילות נתונים רגישים או לא (אם לא, עדכן את classified_map כדי להסיר את העמודות הלא רגישות):
    from pyspark.sql.functions import col
    dyf_marketing_resolved.toDF().select(*[col(c) for c in classified_map.keys()]).show()

  10. הגדר הרשאות של Lake Formation באמצעות מסנן תאי נתונים עבור עמודות שזוהו אוטומטית, והגביל את העמודות לאישיות מדען הנתונים:
    lakeformation = boto3.client('lakeformation')
    sts = boto3.client('sts')
    
    account_id = sts.get_caller_identity().get('Account')
    
    # Create a data cell filter for excluding phone_number column
    lakeformation.create_data_cells_filter(
    TableData={
    'TableCatalogId': account_id,
    'DatabaseName': 'demo',
    'TableName': 'web_marketing',
    'Name': 'pii',
    'RowFilter': {
    'AllRowsWildcard': {}
    
    },
    'ColumnWildcard': {
    'ExcludedColumnNames': list(classified_map.keys())
    }
    }
    )
    
    # Grant permission on the data cell filter
    lakeformation.grant_permissions(
    Principal={
    'DataLakePrincipalIdentifier': f'arn:aws:iam::{account_id}:role/SageMakerStudioExecutionRole_data-scientist'
    },
    Resource={
    'DataCellsFilter': {
    'TableCatalogId': account_id,
    'DatabaseName': 'demo',
    'TableName': 'web_marketing',
    'Name': 'pii'
    }
    },
    Permissions=[
    'SELECT'
    ]
    )

  11. היכנס ל-Studio כמדען נתונים כדי לראות שעמודות ה-PII אינן גלויות. אתה יכול להוריד מחברת מ מיקום זה.
  12. צור מחברת חדשה ובחר SparkAnalytics 1.0 ל תמונה ו דבק PySpark ל גַרעִין:
    import boto3
    import sys
    from awsglue.transforms import *
    from awsglue.utils import getResolvedOptions
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    from awsglue.job import Job
    
    sc = SparkContext.getOrCreate()
    glueContext = GlueContext(sc)
    spark = glueContext.spark_session
    job = Job(glueContext)
    
    dyf_marketing = glueContext.create_dynamic_frame.from_catalog(
    database="demo",
    table_name="web_marketing"
    )
    
    dyf_marketing.printSchema()

בצע הנדסת תכונות

אנו משתמשים בספריית Apache Spark ML כדי לבצע הנדסת תכונות כמשתמש מדען הנתונים ולאחר מכן כותבים בחזרה את הפלט לאמזון S3.

  1. בתא הבא, אנו מיישמים תכונות מה- ספריית Apache Spark ML:
    • StringIndexer ממפה עמודת מחרוזת של תוויות לעמודה של אינדקסים של תוויות.
    • OneHotEncoder ממפה תכונה קטגורית, המיוצגת כאינדקס תווית, לוקטור בינארי עם לכל היותר ערך אחד בודד המציין את נוכחותה של תכונה קטגורית ספציפית. טרנספורמציה זו משמשת עבור אלגוריתמי ML המצפים לתכונות רציפות.
    • VectorAssembler הוא שנאי המשלב רשימה נתונה של עמודות לעמוד וקטור אחד, אשר משמש לאחר מכן באימון מודלים של ML עבור אלגוריתמים כגון רגרסיה לוגיסטית ועצי החלטה.
    #feature engineering by using string indexer and one hot encoding from spark ML library
    from pyspark.ml.feature import StringIndexer, VectorIndexer, OneHotEncoder, VectorAssembler
    from pyspark.ml import Pipeline
    
    cols = ['lastcampaignactivity','region','viewedadvertisement','usedpromo','jobrole']
    
    int_cols = ['pageviewspervisit','totaltimeonwebsite','totalwebvisits',]
    
    indexers = [
    StringIndexer(inputCol=c, outputCol="{0}_indexed".format(c))
    for c in cols
    ]
    
    encoders = [
    OneHotEncoder(
    inputCol=indexer.getOutputCol(),
    outputCol="{0}_encoded".format(indexer.getOutputCol()))
    for indexer in indexers
    ]
    
    assembler = VectorAssembler(
    inputCols=[encoder.getOutputCol() for encoder in encoders]+int_cols,
    outputCol="features"
    )

  2. ניתן ליצור את ה-DataFrame הסופי שעבר שינוי באמצעות ספריית Pipeline. צינור מוגדר כרצף של שלבים. שלבים אלה מופעלים לפי הסדר ו-DataFrame הקלט עובר טרנספורמציה בזמן שהוא עובר בכל שלב.
    df_marketing = dyf_marketing.toDF()
    pipeline = Pipeline(stages=indexers + encoders + [assembler])
    df_tfm=pipeline.fit(df_marketing).transform(df_marketing)
    

  3. לאחר מכן, אנו מפצלים את מערך הנתונים לאימון, מאמתים ובודקים את DataFrame ונשמור אותו בדלי S3 כדי לאמן את מודל ה-ML (ספק את מזהה חשבון ה-AWS שלך בקוד הבא):
    from pyspark.ml.functions import vector_to_array
    
    #set s3 output location for feature engineering output
    bucket='blog-studio-output-'
    
    #convert sparse to dense vector
    df_tfm=df_tfm.select('converted',vector_to_array("features").alias("features_array"))
    
    #split features array into individual columns
    df_tfm=df_tfm.select([df_tfm.converted] + [df_tfm.features_array[i] for i in range(17)])
    
    #split the overall dataset into 70-20-10 training , validation and test
    (train_df, validation_df, test_df) = df_tfm.randomSplit([0.7,0.2,0.1])
    
    #write back train, validation and test datasets to S3
    train_df.write
    .option("header","false")
    .csv('s3://{}/web-marketing/processed/training/'.format(bucket))
    
    validation_df.write
    .option("header","false")
    .csv('s3://{}/web-marketing/processed/validation/'.format(bucket))
    
    test_df.write
    .option("header","false")
    .csv('s3://{}/web-marketing/processed/test/'.format(bucket))

אימון ופריסה של מודל ML

בסעיף הקודם, השלמנו הנדסת תכונות, שכללה המרת עמודות מחרוזות כגון region, jobrole, ו usedpromo לפורמט אופטימלי עבור דגמי ML. כללנו גם עמודות כגון pageviewspervisit ו totalwebvisits, שיעזור לנו לחזות את נטיית הלקוח לקנות מוצר.

כעת אנו מאמנים מודל ML על ידי קריאת מערך הרכבות והאימות באמצעות אלגוריתם XGBoost המובנה של SageMaker. לאחר מכן אנו פורסים את המודל ומבצעים בדיקת דיוק. אתה יכול להוריד מחברת מ מיקום זה.

בתא הבא, אנו קוראים נתונים מדלי S3 השני, הכולל את הפלט מפעולות הנדסת התכונות שלנו. לאחר מכן אנו משתמשים באלגוריתם המובנה XGBoost כדי לאמן את המודל.

  1. פתח מחברת חדשה. בחר מדע נתונים ל תמונה ו פייתון 3 ל גַרעִין (ספק את מזהה חשבון AWS שלך בקוד הבא):
    #set s3 bucket location for training data
    import sagemaker
    import boto3
    from sagemaker import get_execution_role
    
    container = sagemaker.image_uris.retrieve(region=boto3.Session().region_name,
    framework='xgboost', version='latest')
    bucket='blog-studio-output-'
    prefix='web-marketing/processed'
    
    #read train and validation input datasets
    s3_input_train = sagemaker.inputs.TrainingInput(s3_data='s3://{}/{}/training/'
    .format(bucket, prefix), content_type='csv')
    s3_input_validation = sagemaker.inputs.TrainingInput(s3_data='s3://{}/{}/validation/'
    .format(bucket, prefix), content_type='csv')
    
    #train xgb model
    sess = sagemaker.Session()
    from sagemaker import get_execution_role
    
    xgb = sagemaker.estimator.Estimator(
    container,
    role=get_execution_role(),
    instance_count=1,
    instance_type='ml.m4.xlarge',
    output_path='s3://{}/{}/output'
    .format(bucket, prefix),
    sagemaker_session=sess
    )
    
    xgb.set_hyperparameters(
    max_depth=5,
    eta=0.2,
    gamma=4,
    min_child_weight=6,
    subsample=0.8,
    silent=0,
    objective='binary:logistic',
    num_round=100
    )
    
    xgb.fit({'train': s3_input_train, 'validation': s3_input_validation})

  2. בסיום ההכשרה, נוכל לפרוס את המודל באמצעות שירותי אירוח של SageMaker:
    #deploy ml model
    xgb_predictor = xgb.deploy(initial_instance_count=1,
    instance_type='ml.m4.xlarge')

הערך את מודל ה-ML

אנו משתמשים במערך הנתונים של הבדיקה כדי להעריך את המודל ולמחוק את נקודת הסיום כאשר סיימנו כדי להימנע מחיובים מתמשכים.

  1. הערך את המודל עם הקוד הבא:
    #create csv serialiser to run accuracy on test dataset
    xgb_predictor.serializer = sagemaker.serializers.CSVSerializer()
    
    #read test dataset
    import io
    import pandas as pd
    
    s3 = boto3.resource('s3')
    bucket_obj = s3.Bucket(bucket)
    
    test_line = []
    test_objs = bucket_obj.objects.filter(Prefix="web-marketing/processed/test")
    for obj in test_objs:
    try:
    key = obj.key
    body = obj.get()['Body'].read()
    temp = pd.read_csv(io.BytesIO(body),header=None, encoding='utf8',sep=',')
    test_line.append(temp)
    except:
    continue
    
    test_df = pd.concat(test_line)
    
    #predict results using deployed model
    import numpy as np
    def predict(data, predictor, rows=500 ):
    split_array = np.array_split(data, int(data.shape[0] / float(rows) + 1))
    predictions = ''
    for array in split_array:
    predictions = ','.join([predictions, predictor.predict(array).decode('utf-8')])
    return np.fromstring(predictions[1:], sep=',')
    
    #drop the target variable in test_df and make prediction
    predictions = predict(test_df.drop(test_df.columns[0], axis=1).to_numpy(), xgb_predictor)
    
    #calculate accuracy using sklearn library
    from sklearn.metrics import accuracy_score, confusion_matrix
    y_pred=np.round(predictions)
    y_true=test_df.iloc[:,0].values.tolist()
    print('Accuracy score: ',accuracy_score(y_true, y_pred))
    print('Confusion matrix: n',confusion_matrix(y_true, y_pred))

    תוצאת הדיוק עבור ריצת המדגם הייתה 84.6%. זה יכול להיות שונה במקצת עבור הריצה שלך בגלל הפיצול האקראי של מערך הנתונים.

  2. אנו יכולים למחוק את נקודת הסיום עם הקוד הבא:
    xgb_predictor.delete_endpoint(delete_endpoint_config=True)

לנקות את

עכשיו לשלב האחרון, ניקוי המשאבים.

  1. רוקן את שני הדליים שנוצרו דרך ערימת CloudFormation.
  2. מחק את האפליקציות המשויכות למשתמש profiles data-scientist ו data-engineer בתוך הסטודיו.
  3. מחק את מחסנית CloudFormation.

סיכום

בפוסט זה, הדגמנו פתרון המאפשר לפרסונות כמו מהנדסי נתונים ומדעני נתונים לבצע הנדסת תכונות בקנה מידה. עם הפעלות אינטראקטיביות של AWS Glue, אתה יכול בקלות להשיג הנדסת תכונות בקנה מידה עם זיהוי PII אוטומטי ובקרת גישה עדינה ללא צורך בניהול כל תשתית בסיסית. על ידי שימוש ב-Studio כנקודת הכניסה היחידה, אתה יכול לקבל חוויה פשוטה ומשולבת לבניית זרימת עבודה של ML מקצה לקצה: מהכנה ואבטחת נתונים ועד לבנייה, הדרכה, כוונון ופריסה של מודלים של ML. למידע נוסף, בקר תחילת העבודה עם הפעלות אינטראקטיביות של AWS Glue ו סטודיו SageMaker של אמזון.

אנחנו מאוד נרגשים מהיכולת החדשה הזו ומעוניינים לראות מה אתה הולך לבנות איתה!


נספח: הגדר משאבים דרך המסוף וה-AWS CLI

השלם את ההוראות בסעיף זה כדי להגדיר משאבים באמצעות המסוף ו-AWS CLI במקום תבנית CloudFormation.

תנאים מוקדמים

כדי להשלים מדריך זה, חייבת להיות לך גישה ל-AWS CLI (ראה תחילת העבודה עם AWS CLI) או השתמש בגישה לשורת הפקודה מ AWS CloudShell.

קבע את התצורה של קבוצת IAM, משתמשים, תפקידים ומדיניות

בחלק זה, אנו יוצרים שני משתמשי IAM: מהנדס נתונים ומדען נתונים, השייכים לקבוצת הנתונים-פלטפורמות-נתונים של IAM. לאחר מכן אנו מוסיפים מדיניות IAM יחידה לקבוצת IAM.

  1. במסוף IAM, ליצור מדיניות בלשונית JSON ליצור מדיניות חדשה מנוהלת IAM בשם DataPlatformGroupPolicy. המדיניות מאפשרת למשתמשים בקבוצה לגשת לסטודיו, אך רק באמצעות פרופיל משתמש של SageMaker עם תג התואם את שם המשתמש שלהם ב-IAM. השתמש במסמך המדיניות הבא של JSON כדי לספק הרשאות:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Action":[
                "sagemaker:DescribeDomain",
                "sagemaker:ListDomains",
                "sagemaker:ListUserProfiles",
                "sagemaker:ListApps"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerStudioReadOnly"
          },
          {
             "Action":"sagemaker:AddTags",
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAddTags"
          },
          {
             "Condition":{
                "StringEquals":{
                   "sagemaker:ResourceTag/studiouserid":"${aws:username}"
                }
             },
             "Action":[
                "sagemaker:CreatePresignedDomainUrl",
                "sagemaker:DescribeUserProfile"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAllowedUserProfile"
          },
          {
             "Condition":{
                "StringNotEquals":{
                   "sagemaker:ResourceTag/studiouserid":"${aws:username}"
                }
             },
             "Action":[
                "sagemaker:CreatePresignedDomainUrl",
                "sagemaker:DescribeUserProfile"
             ],
             "Resource":"*",
             "Effect":"Deny",
             "Sid":"AmazonSageMakerDeniedUserProfiles"
          }
       ]
    }

  2. צור קבוצת IAM נקרא data-platform-group.
  3. חפש וצרף את המדיניות המנוהלת של AWS בשם DataPlatformGroupPolicy לקבוצה.
  4. צור משתמשי IAM נקרא מהנדס נתונים ומדען נתונים תחת קבוצת הנתונים-פלטפורמות-נתונים של IAM.
  5. צור מדיניות מנוהלת חדשה בשם SageMakerExecutionPolicy (ספק אזור ומזהה חשבון בקוד הבא):
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Action":[
                "sagemaker:DescribeDomain",
                "sagemaker:ListDomains",
                "sagemaker:ListUserProfiles",
                "sagemaker:ListApps"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerStudioReadOnly"
          },
          {
             "Action":"sagemaker:AddTags",
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAddTags"
          },
          {
             "Action":[
                "sagemaker:CreateTrainingJob",
                "sagemaker:DescribeTrainingJob",
                "logs:DescribeLogStreams",
                "sagemaker:CreateModel",
                "sagemaker:CreateEndpointConfig",
                "sagemaker:CreateEndpoint",
                "sagemaker:DescribeEndpoint",
                "sagemaker:InvokeEndpoint",
                "sagemaker:DeleteEndpointConfig",
                "sagemaker:DeleteEndpoint"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerTrainingAndDeploy"
          },
          {
             "Action":"sagemaker:*App",
             "Resource":"arn:aws:sagemaker:::app/*/${aws:PrincipalTag/userprofilename}/*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAllowedApp"
          },
          {
             "Action":"sagemaker:*App",
             "Effect":"Deny",
             "NotResource":"arn:aws:sagemaker:::app/*/${aws:PrincipalTag/userprofilename}/*",
             "Sid":"AmazonSageMakerDeniedApps"
          },
          {
             "Action":[
                "glue:GetTable",
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:GetPartition",
                "glue:GetPartitions"
             ],
             "Resource":[
                "arn:aws:glue:::table/demo/*",
                "arn:aws:glue:::database/demo",
                "arn:aws:glue:::catalog"
             ],
             "Effect":"Allow",
             "Sid":"GlueCatalogPermissions"
          },
          {
             "Action":[
                "lakeformation:GetDataAccess",
                "lakeformation:StartQueryPlanning",
                "lakeformation:GetQueryState",
                "lakeformation:GetWorkUnits",
                "lakeformation:GetWorkUnitResults"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"LakeFormationPermissions"
          },
          {
             "Effect":"Allow",
             "Action":[
                "s3:CreateBucket",
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket",
                "s3:DeleteObject"
             ],
             "Resource":[
                "arn:aws:s3:::blog-studio-output-",
                "arn:aws:s3:::blog-studio-output-/*"
             ]
          },
          {
             "Action":[
                "iam:PassRole",
                "iam:GetRole",
                "sts:GetCallerIdentity"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerStudioIAMPassRole"
          },
          {
             "Action":"sts:AssumeRole",
             "Resource":"*",
             "Effect":"Deny",
             "Sid":"DenyAssummingOtherIAMRoles"
          }
       ]
    }

  6. צור מדיניות מנוהלת חדשה בשם SageMakerAdminPolicy:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Action":[
                "lakeformation:GrantPermissions",
                "lakeformation:RevokePermissions",
                "lakeformation:ListPermissions",
                "lakeformation:BatchGrantPermissions",
                "lakeformation:BatchRevokePermissions",
                "lakeformation:CreateDataCellsFilter",
                "lakeformation:DeleteDataCellsFilter",
                "lakeformation:ListDataCellsFilter",
                "glue:GetUserDefinedFunctions",
                "glue:BatchGetCustomEntityTypes"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"GlueLakeFormationPermissions"
          }
       ]
    }

  7. צור תפקיד IAM עבור SageMaker עבור מהנדס הנתונים (מהנדס נתונים), המשמש כתפקיד הביצוע של פרופיל המשתמש המתאים. על צרף מדיניות הרשאות דף, AmazonSageMakerFullAccess (מדיניות מנוהלת AWS) מצורף כברירת מחדל. אתה מסיר מדיניות זו מאוחר יותר כדי לשמור על הרשאות מינימליות.
    1. בעד שם התפקיד, השתמש במוסכמות השמות שהוצגה בתחילת סעיף זה כדי לתת שם לתפקיד SageMakerStudioExecutionRole_data-engineer.
    2. בעד תגים, הוסף את שם המפתח פרופיל משתמש ואת מהנדס הנתונים של הערך.
    3. בחרו צור תפקיד.
    4. כדי להוסיף את המדיניות הנותרת, על תפקידים בדף, בחר את שם התפקיד שיצרת זה עתה.
    5. תַחַת הרשאות, הסר את המדיניות AmazonSageMakerFullAccess.
    6. על צרף מדיניות הרשאות בדף, בחר את המדיניות המנוהלת של AWS AwsGlueSessionUserRestrictedServiceRole, ואת המדיניות המנוהלת על ידי הלקוח SageMakerExecutionPolicy ו- SageMakerAdminPolicy שיצרת.
    7. בחרו צרף מדיניות.
    8. שינוי יחסי האמון של התפקיד שלך:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect":"Allow",
             "Principal":{
                "Service":[
                   "glue.amazonaws.com",
                   "sagemaker.amazonaws.com"
                ]
             },
             "Action":"sts:AssumeRole"
          }
       ]
    }

  8. צור תפקיד IAM עבור SageMaker עבור מדען הנתונים (Data-Scientist), המשמש כתפקיד הביצוע של פרופיל המשתמש המתאים.
    1. בעד שם התפקיד, שם לתפקיד SageMakerStudioExecutionRole_data-scientist.
    2. בעד תגים, הוסף את שם המפתח פרופיל משתמש ואת מדען הנתונים הערך.
    3. בחרו צור תפקיד.
    4. כדי להוסיף את המדיניות הנותרת, על תפקידים בדף, בחר את שם התפקיד שיצרת זה עתה.
    5. תַחַת הרשאות, הסר את המדיניות AmazonSageMakerFullAccess.
    6. על צרף מדיניות הרשאות בדף, בחר את המדיניות המנוהלת של AWS AwsGlueSessionUserRestrictedServiceRole, ואת המדיניות המנוהלת על ידי הלקוח SageMakerExecutionPolicy שיצרת.
    7. בחרו צרף מדיניות.
    8. שינוי יחסי האמון של התפקיד שלך:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect":"Allow",
             "Principal":{
                "Service":[
                   "glue.amazonaws.com",
                   "sagemaker.amazonaws.com"
                ]
             },
             "Action":"sts:AssumeRole"
          }
       ]
    }

הגדר את פרופילי המשתמש של SageMaker

כדי ליצור את פרופילי המשתמש שלך ב-SageMaker עם studiouserid תג, בצע את השלבים הבאים:

  1. השתמש ב-AWS CLI או ב-CloudShell כדי ליצור את פרופיל המשתמש של Studio עבור מהנדס הנתונים (ספק את מזהה החשבון ומזהה הדומיין של Studio בקוד הבא):
    aws sagemaker create-user-profile --domain-id  --user-profile-name data-engineer --tags Key=studiouserid,Value=data-engineer --user-settings ExecutionRole=arn:aws:iam:::role/SageMakerStudioExecutionRole_data-engineer

  2. חזור על השלב ליצירת פרופיל משתמש עבור מדען הנתונים, החלפת מזהה החשבון ומזהה הדומיין של Studio:
    aws sagemaker create-user-profile --domain-id  --user-profile-name data-scientist --tags Key=studiouserid,Value=data-scientist --user-settings ExecutionRole=arn:aws:iam:::role/SageMakerStudioExecutionRole_data-scientist

צור דלי S3 והעלה את מערך הנתונים לדוגמה

בסעיף זה, אתה יוצר שני דליים S3. בדלי הראשון יש מערך נתונים לדוגמה הקשור לשיווק באינטרנט. הדלי השני משמש את מדען הנתונים לאחסון פלט ממשימות הנדסת תכונות, ומערך פלט זה משמש לאימון מודל ה-ML.

ראשית, צור את דלי S3 עבור נתוני הקלט:

  1. הורדה מערך הנתונים.
  2. במסוף S3 של אמזון בחר דליים בחלונית הניווט.
  3. בחרו צור דלי.
  4. בעד אזור, בחר את האזור עם הדומיין של SageMaker הכולל את פרופילי המשתמש שיצרת.
  5. בעד שם הדלי, להיכנס blog-studio-pii-dataset-.
  6. בחרו צור דלי.
  7. בחר את הדלי שיצרת ובחר העלה.
  8. ב בחר קבצים סעיף, בחר הוסף קבצים והעלה את מערך הנתונים שהורדת.
    כעת אתה יוצר את הדלי עבור נתוני הפלט:
  9. על דליים עמוד, בחר צור דלי.
  10. בעד אזור, בחר את האזור עם הדומיין של SageMaker הכולל את פרופילי המשתמש שיצרת.
  11. בעד שם הדלי, להיכנס blog-studio-output-.
  12. בחרו צור דלי.

צור מסד נתונים וטבלה של AWS Glue

בסעיף זה, אתה יוצר מסד נתונים וטבלה של AWS Glue עבור מערך הנתונים.

  1. על קונסולת האגם, מתחת קטלוג נתונים בחלונית הניווט, בחר מאגרי מידע.
  2. בחרו הוסף מסד נתונים.
  3. בעד שם, הכנס להדגמה.
  4. בחרו צור בסיס נתונים.
  5. תַחַת קטלוג נתונים, בחר לוחות.
  6. בעד שם, להיכנס web_marketing.
  7. בעד מסד נתונים, בחר demo.
  8. בעד כלול מסלול, הזן את הנתיב של דלי S3 שלך עבור נתוני קלט.
  9. בעד מִיוּן, בחר CSV.
  10. תַחַת סכימה, בחר העלה סכימה.
  11. הזן את מערך ה-JSON הבא בתיבת הטקסט:
    [
       {
          "Name":"lastcampaignactivity",
          "Type":"string"
       },
       {
          "Name":"pageviewspervisit",
          "Type":"double"
       },
       {
          "Name":"totaltimeonwebsite",
          "Type":"bigint"
       },
       {
          "Name":"totalwebvisits",
          "Type":"bigint"
       },
       {
          "Name":"attendedmarketingevent",
          "Type":"string"
       },
       {
          "Name":"organicsearch",
          "Type":"string"
       },
       {
          "Name":"viewedadvertisement",
          "Type":"string"
       },
       {
          "Name":"leadsource",
          "Type":"string"
       },
       {
          "Name":"jobrole",
          "Type":"string"
       },
       {
          "Name":"contactnotes",
          "Type":"string"
       },
       {
          "Name":"leadprofile",
          "Type":"string"
       },
       {
          "Name":"usedpromo",
          "Type":"string"
       },
       {
          "Name":"donotreachout",
          "Type":"boolean"
       },
       {
          "Name":"city",
          "Type":"string"
       },
       {
          "Name":"converted",
          "Type":"bigint"
       },
       {
          "Name":"region",
          "Type":"string"
       },
       {
          "Name":"phone_number",
          "Type":"string"
       }
    ]

  12. בחרו העלה.
  13. בחרו חפש.
  14. תַחַת פרטי טבלה, בחר ערוך טבלה.
  15. תַחַת מאפייני טבלה, בחר להוסיף.
  16. בעד מפתח, להיכנס skip.header.line.count, ועבור ערך, הזן 1.
  17. בחרו שמור.

הגדר הרשאות Lake Formation

בסעיף זה, אתה מגדיר הרשאות Lake Formation כדי לאפשר תפקיד IAM SageMakerStudioExecutionRole_data-engineer כדי ליצור מסד נתונים ולרשום את מיקום S3 בתוך Lake Formation.

ראשית, רשום את מיקום אגם הנתונים כדי לנהל טבלאות מתחת למיקום בהרשאות Lake Formation:

  1. בחרו מיקומי אגם נתונים.
  2. בחרו רשום מיקום.
  3. בעד נתיב S3 של אמזון, להיכנס s3://blog-studio-pii-dataset-/ (הדלי שמכיל את מערך הנתונים).
  4. בחרו רשום מיקום.
    כעת אתה מעניק הרשאות מסד נתונים וטבלה של Lake Formation לתפקידי IAM SageMakerStudioExecutionRole_data-engineer ו SageMakerStudioExecutionRole_data-scientist.ראשית, הענק הרשאת מסד נתונים עבור SageMakerStudioExecutionRole_data-engineer:
  5. תַחַת הרשאות, בחר הרשאות אגם נתונים.
  6. תַחַת הרשאת נתונים, בחר להעניק.
  7. בעד מנהלים, בחר משתמשים ותפקידי IAM, ובחר את התפקיד SageMakerStudioExecutionRole_data-engineer.
  8. בעד תגי מדיניות או משאבי קטלוג, בחר משאבי קטלוג נתונים בעלי שם.
  9. בעד מאגרי מידע, בחר הדגמה.
  10. בעד הרשאות מסד נתונים, בחר סוּפֶּר.
  11. בחרו להעניק.
    לאחר מכן, הענק הרשאת טבלה עבור SageMakerStudioExecutionRole_data-engineer:
  12. תַחַת הרשאת נתונים, בחר להעניק.
  13. בעד מנהלים, בחר משתמשים ותפקידי IAM, ובחר את התפקיד SageMakerStudioExecutionRole_data-engineer.
  14. בעד תגי מדיניות או משאבי קטלוג, בחר משאבי קטלוג נתונים בעלי שם.
  15. בעד מאגרי מידע, בחר demo.
  16. בעד לוחות, בחר web_marketing.
  17. בעד טבלתי הרשאות, בחר סוּפֶּר.
  18. בעד ניתן להענקה הרשאות, בחר סוּפֶּר.
  19. בחרו להעניק.
    לבסוף, הענק הרשאת מסד נתונים עבור SageMakerStudioExecutionRole_data-scientist:
  20. תַחַת הרשאת נתונים, בחר להעניק.
  21. בעד מנהלים, בחר משתמשים ותפקידי IAM, ובחר את התפקיד SageMakerStudioExecutionRole_data-scientist.
  22. בעד תגי מדיניות או משאבי קטלוג, בחר משאבי קטלוג נתונים בעלי שם.
  23. בעד מאגרי מידע, בחר demo.
  24. בעד הרשאות מסד נתונים, בחר לתאר.
  25. בחרו להעניק.

על הכותבים

הנדסת תכונות בקנה מידה גדול עם הגנה על נתונים רגישים באמצעות הפעלות אינטראקטיביות של AWS Glue ו-Amazon SageMaker Studio PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

פראביין קומאר הוא ארכיטקט פתרונות אנליטיקה ב-AWS עם מומחיות בתכנון, בנייה והטמעה של פלטפורמות נתונים וניתוח מודרניות באמצעות שירותים מקוריים בענן. תחומי העניין שלו הם טכנולוגיה ללא שרת, מחסני נתונים מודרניים בענן, סטרימינג ויישומי ML.

הנדסת תכונות בקנה מידה גדול עם הגנה על נתונים רגישים באמצעות הפעלות אינטראקטיביות של AWS Glue ו-Amazon SageMaker Studio PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

נוריטקה סקיאמה הוא אדריכל ביג דאטה ראשי בצוות AWS Glue. הוא נהנה לשתף פעולה עם צוותים שונים כדי לספק תוצאות כמו הפוסט הזה. בזמנו הפנוי הוא נהנה לשחק משחקי וידאו עם משפחתו.

בול זמן:

עוד מ למידת מכונות AWS