Крупномасштабное проектирование функций с защитой конфиденциальных данных с использованием интерактивных сеансов AWS Glue и Amazon SageMaker Studio PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Крупномасштабная разработка функций с защитой конфиденциальных данных с использованием интерактивных сеансов AWS Glue и Amazon SageMaker Studio.

Организации используют услуги машинного обучения (ML) и искусственного интеллекта для повышения качества обслуживания клиентов, снижения эксплуатационных расходов и открытия новых возможностей для улучшения бизнес-результатов. Данные лежат в основе вариантов использования машинного обучения и искусственного интеллекта и являются стратегическим активом организации. Поскольку данные растут экспоненциально, организации стремятся создать интегрированную, экономичную и производительную платформу данных для предварительной обработки данных, выполнения разработки функций, а также создания, обучения и ввода в эксплуатацию моделей машинного обучения в масштабе. Для этого AWS предлагает единую современную платформу данных, основанную на Простой сервис хранения Amazon (Amazon S3) как озеро данных со специальными инструментами и механизмами обработки для поддержки рабочих нагрузок аналитики и машинного обучения. Для унифицированного опыта машинного обучения вы можете использовать Студия Amazon SageMaker, который предлагает нативная интеграция с интерактивными сеансами AWS Glue для выполнения разработки функций в масштабе с защитой конфиденциальных данных. В этом посте мы покажем, как реализовать это решение.

Создатель мудреца Амазонки — это полностью управляемая служба машинного обучения, которая позволяет создавать, обучать и развертывать модели в масштабе для широкого спектра вариантов использования. Для обучения модели можно использовать любой из встроенные алгоритмы в SageMaker, чтобы быстро приступить к обучению и развертыванию моделей машинного обучения.

Ключевым компонентом процесса построения и разработки модели является разработка признаков. Клей AWS является одним из рекомендуемых вариантов для разработки функций в масштабе. AWS Glue позволяет выполнять интеграцию и преобразование данных распределенным образом в бессерверной инфраструктуре Apache Spark, а также упрощает использование популярной библиотеки Spark ML для проектирования функций и разработки моделей. Кроме того, вы можете использовать AWS Glue для дополнительной обработки данных с помощью закладки вакансий, получать данные из более чем 100 источников, используя Разъемыи запускать скачкообразные или непредсказуемые рабочие нагрузки, используя автоматическое масштабирование.

Еще одним важным требованием к приложениям на основе машинного обучения является безопасность данных и контроль доступа. Распространенным требованием является более жесткий контроль над тем, кто может получить доступ к наиболее конфиденциальным данным, в рамках процесса разработки функций и построения модели, следуя принципу доступа с минимальными привилегиями. Для этого можно использовать интеграцию AWS Glue с Формирование озера AWS для улучшения руководства и управления активами озера данных. С помощью Lake Formation вы можете настроить детальное управление доступом к данным и политики безопасности поверх озера данных Amazon S3. Политики определяются централизованно, что позволяет использовать несколько сервисов аналитики и машинного обучения, таких как AWS Glue, Амазонка Афинаи SageMaker для взаимодействия с данными, хранящимися в Amazon S3.

AWS Glue включает в себя обнаружение личной информации (PII) Преобразование, которое позволяет обнаруживать, маскировать или удалять объекты по мере необходимости для повышения соответствия требованиям и управления. С помощью преобразования PII вы можете обнаруживать данные PII в наборах данных и автоматически применять детальный контроль доступа с помощью Lake Formation для ограничения доступа к конфиденциальным данным для разных групп пользователей.

Примеры использования

Мы сосредоточимся на сценарии использования модели склонности, который включает в себя набор маркетинговых данных о клиентах и ​​​​включает в себя два пользователя: инженер данных и специалист по данным. Набор данных содержит информацию о каждом клиенте, включая источник потенциальных клиентов, примечания к контактам, должностную роль, некоторые флаги, просмотры страниц за посещение и многое другое. Набор данных также включает конфиденциальную информацию, такую ​​как личные номера телефонов.

Инженер данных отвечает за построение сквозного конвейера обработки данных, включая подготовку данных, предварительную обработку и контроль доступа. Специалист по данным отвечает за разработку функций, а также за обучение и развертывание модели машинного обучения. Обратите внимание, что специалисту по данным не разрешен доступ к каким-либо конфиденциальным данным PII для разработки функций или обучения модели ML.

В рамках этого варианта использования инженер данных строит конвейер данных для предварительной обработки набора данных, сканирует набор данных на наличие любой информации PII и ограничивает доступ к столбцу PII для пользователя специалиста по данным. В результате, когда специалист по обработке и анализу данных использует набор данных для разработки функций и построения моделей машинного обучения, у него нет доступа к чувствительным столбцам PII (в данном случае номерам телефонов). Процесс проектирования функций включает преобразование столбцов строкового типа в формат, оптимальный для моделей ML. В качестве расширенного варианта использования вы можете расширить этот шаблон доступа для реализации безопасности на уровне строк и ячеек с помощью Lake Formation.

Обзор решения

Решение содержит следующие высокоуровневые шаги:

  1. Настройте ресурсы с помощью AWS CloudFormation.
  2. Предварительно обработайте набор данных, включая обнаружение персональных данных и детальное управление доступом, в интерактивном сеансе AWS Glue.
  3. Выполните разработку функций в интерактивном сеансе AWS Glue.
  4. Обучайте и развертывайте модель машинного обучения с помощью встроенного в SageMaker алгоритма XGBoost.
  5. Оцените модель машинного обучения.

Следующая диаграмма иллюстрирует архитектуру решения.

Предпосылки

Чтобы выполнить это руководство, у вас должны быть следующие предварительные условия:

Настройка ресурсов с помощью AWS CloudFormation

Этот пост включает шаблон CloudFormation для быстрой настройки. Вы можете просмотреть и настроить его в соответствии с вашими потребностями. Если вы предпочитаете настраивать ресурсы на Консоль управления AWS и AWS CLI, а не AWS CloudFormation, см. инструкции в приложении в конце этого поста.

Шаблон CloudFormation генерирует следующие ресурсы:

  • Сегменты S3 с образцом набора данных
  • An AWS Lambda функция для загрузки набора данных
  • Управление идентификацией и доступом AWS (IAM) группа, пользователи, роли и политики
  • Параметры озера данных Lake Formation и разрешения
  • Профили пользователей SageMaker

Чтобы создать свои ресурсы, выполните следующие действия:

  1. Войдите в консоль.
  2. Выберите Стек запуска:
    Кнопка запуска
  3. Выберите Следующая.
  4. Что касается DataEngineerPwd и DataScientistPwd, введите свой собственный пароль для пользователей Data Engineer и Data Scientist.
  5. Что касается имя_базы_данных, войти demo.
  6. Что касается Клейтаблицеимя, войти 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. Войдите в консоль, используя пользователя data-engineer.
  2. На консоли SageMaker выберите Пользователи.
  3. Выберите пользователя data-engineer и выберите Открытая студия.
  4. Создайте новый блокнот и выберите СпаркАналитика 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, конфиденциальные данные или нет (если нет, обновите классифицированную_карту, чтобы удалить неконфиденциальные столбцы):
    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 как data-scientist, чтобы увидеть, что столбцы PII не видны. Вы можете скачать блокнот с это место.
  12. Создайте новый блокнот и выберите СпаркАналитика 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 для выполнения проектирования функций в качестве пользователя-исследователя данных, а затем записываем выходные данные в Amazon S3.

  1. В следующей ячейке мы применяем функции из Библиотека машинного обучения Apache Spark:
    • StringIndexer сопоставляет строковый столбец меток со столбцом индексов меток.
    • OneHotEncoder отображает категориальный признак, представленный в виде индекса метки, в двоичный вектор с не более чем одним единичным значением, указывающим на наличие определенного категориального признака. Это преобразование используется для алгоритмов машинного обучения, которые предполагают непрерывные функции.
    • VectorAssembler — это преобразователь, который объединяет заданный список столбцов в один векторный столбец, который затем используется при обучении моделей машинного обучения для таких алгоритмов, как логистическая регрессия и деревья решений.
    #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 для обучения модели машинного обучения (укажите идентификатор своей учетной записи 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))

Обучение и развертывание модели машинного обучения

В предыдущем разделе мы завершили разработку функций, которая включала преобразование строковых столбцов, таких как region, jobroleи usedpromo в формат, оптимальный для моделей ML. Мы также включили такие столбцы, как pageviewspervisit и totalwebvisits, что поможет нам предсказать склонность клиента купить продукт.

Теперь мы обучаем модель машинного обучения, считывая набор данных для обучения и проверки с использованием встроенного в SageMaker алгоритма XGBoost. Затем мы развертываем модель и запускаем проверку точности. Вы можете скачать блокнот с это место.

В следующей ячейке мы считываем данные из второй корзины S3, которые включают выходные данные наших операций разработки функций. Затем мы используем встроенный алгоритм XGBoost для обучения модели.

  1. Откройте новую тетрадь. Выбирать Наука данных для Фото товара и Python 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')

Оцените модель машинного обучения

Мы используем тестовый набор данных для оценки модели и удаляем конечную точку вывода, когда закончим, чтобы избежать текущих расходов.

  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 в качестве единой точки входа, вы можете получить упрощенный и интегрированный опыт создания сквозного рабочего процесса машинного обучения: от подготовки и защиты данных до построения, обучения, настройки и развертывания моделей машинного обучения. Чтобы узнать больше, посетите Начало работы с интерактивными сеансами AWS Glue и Студия Amazon SageMaker.

Мы очень взволнованы этой новой возможностью и очень хотим увидеть, что вы собираетесь построить с ее помощью!


Приложение. Настройка ресурсов с помощью консоли и интерфейса командной строки AWS

Выполните инструкции в этом разделе, чтобы настроить ресурсы с помощью консоли и интерфейса командной строки AWS вместо шаблона CloudFormation.

Предпосылки

Для выполнения этого руководства у вас должен быть доступ к интерфейсу командной строки AWS (см. Начало работы с интерфейсом командной строки AWS) или используйте доступ к командной строке из Облачная оболочка AWS.

Настройка группы IAM, пользователей, ролей и политик

В этом разделе мы создадим двух пользователей IAM: data-engineer и data-scientist, которые принадлежат группе IAM data-platform-group. Затем мы добавляем одну политику IAM в группу IAM.

  1. На консоли IAM создать политику на вкладке JSON для создания новой управляемой политики IAM с именем DataPlatformGroupPolicy. Политика позволяет пользователям в группе получать доступ к Studio, но только с использованием профиля пользователя 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 называется data-engineer и data-scientist в IAM group data-platform-group.
  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 для инженера данных (data-engineer), который используется в качестве роли исполнения соответствующего пользовательского профиля. На Прикрепить политику разрешений страница AmazonSageMakerFullAccess (управляемая политика AWS) подключена по умолчанию. Вы удалите эту политику позже, чтобы сохранить минимальные привилегии.
    1. Что касается Название роли, используйте соглашение об именовании, введенное в начале этого раздела, чтобы назвать роль SageMakerStudioExecutionRole_data-engineer.
    2. Что касается Теги, добавьте ключ userprofilename и значение data-engineer.
    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. Что касается Теги, добавьте ключ userprofilename и значение data-scientist.
    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 или 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. В первой корзине есть образец набора данных, связанный с веб-маркетингом. Второе ведро используется специалистом по обработке и анализу данных для хранения выходных данных задач разработки функций, и этот выходной набор данных используется для обучения модели машинного обучения.

Сначала создайте корзину S3 для входных данных:

  1. Скачать набор данных.
  2. На консоли Amazon 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. На консоли Lake Formation под Каталог данных на панели навигации выберите Databases.
  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, чтобы разрешить роль IAM. SageMakerStudioExecutionRole_data-engineer для создания базы данных и регистрации местоположения S3 в Lake Formation.

Сначала зарегистрируйте расположение озера данных для управления таблицами в соответствии с расположением в разрешениях Lake Formation:

  1. Выберите Расположение озера данных.
  2. Выберите Зарегистрировать местонахождение.
  3. Что касается Путь к Amazon 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. Что касается Databases, выберите демо.
  10. Что касается Разрешения базы данных, выберите супер.
  11. Выберите Грант.
    Затем предоставьте разрешение таблицы для SageMakerStudioExecutionRole_data-engineer:
  12. Под Разрешение на данные, выберите Грант.
  13. Что касается Принципалы, выберите Пользователи и роли IAMи выберите роль SageMakerStudioExecutionRole_data-engineer.
  14. Что касается Теги политики или ресурсы каталога, выберите Именованные ресурсы каталога данных.
  15. Что касается Databases, выберите demo.
  16. Что касается таблицы, выберите web_marketing.
  17. Что касается Настольные разрешения, выберите супер.
  18. Что касается Предоставляемый разрешения, выберите супер.
  19. Выберите Грант.
    Наконец, предоставьте доступ к базе данных для SageMakerStudioExecutionRole_data-scientist:
  20. Под Разрешение на данные, выберите Грант.
  21. Что касается Принципалы, выберите Пользователи и роли IAMи выберите роль SageMakerStudioExecutionRole_data-scientist.
  22. Что касается Теги политики или ресурсы каталога, выберите Именованные ресурсы каталога данных.
  23. Что касается Databases, выберите demo.
  24. Что касается Разрешения базы данных, выберите Описывать.
  25. Выберите Грант.

Об авторах

Крупномасштабное проектирование функций с защитой конфиденциальных данных с использованием интерактивных сеансов AWS Glue и Amazon SageMaker Studio PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Правин Кумар — архитектор аналитических решений в AWS, обладающий опытом проектирования, создания и внедрения современных платформ данных и аналитики с использованием облачных сервисов. Сферы его интересов — бессерверные технологии, современные облачные хранилища данных, потоковая передача и приложения машинного обучения.

Крупномасштабное проектирование функций с защитой конфиденциальных данных с использованием интерактивных сеансов AWS Glue и Amazon SageMaker Studio PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Норитака Сэкияма является главным архитектором больших данных в команде AWS Glue. Ему нравится сотрудничать с разными командами для достижения таких результатов, как этот пост. В свободное время он любит играть в видеоигры со своей семьей.

Отметка времени:

Больше от Машинное обучение AWS