AWS Glue インタラクティブセッションと Amazon SageMaker Studio PlatoBlockchain Data Intelligence を使用した機密データ保護による大規模な機能エンジニアリング。垂直検索。あい。

AWS Glue インタラクティブ セッションと Amazon SageMaker Studio を使用した機密データ保護による大規模な機能エンジニアリング

組織は、機械学習 (ML) と AI サービスを使用して、カスタマー エクスペリエンスを向上させ、運用コストを削減し、新しい可能性を解き放ってビジネスの成果を向上させています。 データは ML と AI のユースケースを支え、組織にとって戦略的な資産です。 データが指数関数的に増加しているため、組織は、データの前処理、機能エンジニアリングの実行、大規模な ML モデルの構築、トレーニング、および運用化のために、統合された費用対効果の高いパフォーマンスの高いデータ プラットフォームを構築しようとしています。 それを達成するために、AWS は、 Amazon シンプル ストレージ サービス (Amazon S3) は、分析と ML ワークロードをサポートするための専用ツールと処理エンジンを備えたデータ レイクとして使用されます。 統合された ML エクスペリエンスのために、次を使用できます。 Amazon SageMakerスタジオ、これは提供しています AWS Glue インタラクティブ セッションとのネイティブ統合 機密データを保護しながら大規模な機能エンジニアリングを実行します。 この投稿では、このソリューションを実装する方法を示します。

アマゾンセージメーカー は、幅広いユースケースに対応する大規模なモデルの構築、トレーニング、デプロイを可能にするフルマネージド ML サービスです。 モデルのトレーニングには、次のいずれかを使用できます。 組み込みアルゴリズム SageMaker 内で ML モデルのトレーニングとデプロイをすばやく開始できます。

モデルの構築および開発プロセスの重要なコンポーネントは、特徴量エンジニアリングです。 AWSグルー 大規模な機能エンジニアリングを実現するための推奨オプションの XNUMX つです。 AWS Glue を使用すると、サーバーレスの Apache Spark インフラストラクチャで分散方式でデータの統合と変換を実行でき、機能エンジニアリングとモデル開発に人気のある Spark ML ライブラリを簡単に使用できます。 さらに、AWS Glue を使用して増分データ処理を行うことができます。 仕事のしおりを使用して、100 を超えるソースからデータを取り込みます コネクタを使用して、急激なまたは予測不可能なワークロードを実行します。 自動スケーリング.

ML ベースのアプリケーションのもう XNUMX つの重要な要件は、データ セキュリティとアクセス制御です。 最小特権アクセスの原則に従うことで、機能エンジニアリングおよびモデル構築プロセスの一環として、誰が最も機密性の高いデータにアクセスできるかをより厳密に制御することが一般的に要求されます。 これを実現するには、AWS Glue との統合を利用できます。 AWSレイクフォーメーション データレイク資産のガバナンスと管理を強化します。 Lake Formation を使用すると、Amazon S3 データ レイク上できめ細かいデータ アクセス コントロールとセキュリティ ポリシーを構成できます。 ポリシーは中央の場所で定義され、AWS Glue などの複数の分析および ML サービスを許可します。 アマゾンアテナ、および SageMaker を使用して、Amazon S3 に保存されているデータを操作します。

AWS Glue には 個人を特定できる情報 (PII) の検出 コンプライアンスとガバナンスを強化するために、必要に応じてエンティティを検出、マスク、または削除する機能を提供する変換。 PII 変換を使用すると、データセット内の PII データを検出し、Lake Formation を使用してきめ細かいアクセス制御を自動的に適用して、さまざまなユーザー グループの機密データを制限できます。

使用事例

顧客マーケティング データセットを含み、XNUMX 人のユーザー ペルソナ (データ エンジニアとデータ サイエンティスト) が関与する傾向モデルのユース ケースに焦点を当てます。 データセットには、リードソース、連絡先メモ、職務、いくつかのフラグ、訪問ごとのページビューなど、顧客ごとの情報が含まれています。 データセットには、個人の電話番号などの機密情報も含まれています。

データ エンジニアは、データの準備、前処理、アクセス制御など、エンド ツー エンドのデータ処理パイプラインの構築を担当します。 データ サイエンティストは、特徴エンジニアリング、および ML モデルのトレーニングとデプロイを担当します。 データ サイエンティストは、特徴量エンジニアリングまたは ML モデルのトレーニングのために PII 機密データにアクセスすることは許可されていないことに注意してください。

このユース ケースの一環として、データ エンジニアはデータ パイプラインを構築してデータセットを前処理し、データセットをスキャンして PII 情報を探し、PII 列へのアクセスをデータ サイエンティスト ユーザーに制限します。 その結果、データ サイエンティストがデータセットを使用して特徴量エンジニアリングを実行し、ML モデルを構築する場合、PII 機密列 (この場合は電話番号) にアクセスできません。 特徴量エンジニアリング プロセスには、文字列型の列を ML モデルに最適な形式に変換することが含まれます。 高度なユース ケースとして、このアクセス パターンを拡張して、Lake Formation を使用して行レベルおよびセルレベルのセキュリティを実装できます。

ソリューションの概要

ソリューションには、次の大まかな手順が含まれています。

  1. でリソースを設定する AWS CloudFormation.
  2. AWS Glue インタラクティブ セッションで、PII 検出やきめ細かいアクセス制御など、データセットを前処理します。
  3. AWS Glue インタラクティブ セッションで機能エンジニアリングを実行します。
  4. SageMaker 組み込みの XGBoost アルゴリズムを使用して ML モデルをトレーニングしてデプロイします。
  5. ML モデルを評価します。

次の図は、ソリューションのアーキテクチャを示しています。

前提条件

このチュートリアルを完了するには、次の前提条件が必要です。

AWSCloudFormationを使用してリソースを設定する

この投稿には、迅速なセットアップのための CloudFormation テンプレートが含まれています。 ニーズに合わせてレビューおよびカスタマイズできます。 でリソースを設定したい場合は、 AWSマネジメントコンソール AWS CloudFormation ではなく AWS CLI を使用する場合は、この投稿の最後にある付録の手順を参照してください。

CloudFormation テンプレートは、次のリソースを生成します。

  • サンプル データセットを含む S3 バケット
  • An AWSラムダ データセットをロードする関数
  • AWS IDおよびアクセス管理 (IAM) グループ、ユーザー、ロール、およびポリシー
  • Lake Formation データレイクの設定と権限
  • SageMaker ユーザープロファイル

リソースを作成するには、次の手順を実行します。

  1. コンソールにサインインします。
  2. 選択する 発射スタック:
    起動ボタン
  3. 選択する Next.
  4. データエンジニアパスワード & データサイエンティストPwdで、データ エンジニアおよびデータ サイエンティスト ユーザー用の独自のパスワードを入力します。
  5. グルーデータベース名、 入る demo.
  6. 接着テーブル名、 入る web_marketing.
  7. S3入力用バケット名、 入る blog-studio-pii-dataset-.
  8. S3出力用バケット名、 入る blog-studio-output-.
  9. SageMakerDomainIdで、前提条件の手順で準備した SageMaker ドメイン ID を入力します。
  10. 選択する Next.
  11. 次のページで、 Next.
  12. 最後のページで詳細を確認し、選択します AWS CloudFormationがIAMリソースを作成する可能性があることを認めます.
  13. 選択する 創造する.

スタックの作成には最大 10 分かかる場合があります。 スタックは、XNUMX つのペルソナ (データ エンジニアとデータ サイエンティスト) の IAM ロールと SageMaker ユーザー プロファイルを作成します。 データベースのデモとテーブルも作成します web_marketing サンプル データセットを使用します。

スタックの作成時に、データ エンジニア ペルソナはテーブルへの完全なアクセス権を持っていますが、データ サイエンティスト ペルソナはまだテーブルへのアクセス権を持っていません。

データセットを前処理する

AWS Glue インタラクティブ セッションでデータの前処理を開始しましょう。 データ エンジニア ペルソナは、データを検証して機密データが存在するかどうかを確認し、データ サイエンティスト ペルソナに最小限のアクセス許可を付与したいと考えています。 からノートブックをダウンロードできます。 この場所.

  1. data-engineer ユーザーを使用してコンソールにサインインします。
  2. SageMakerコンソールで、 ユーザー.
  3. データ エンジニア ユーザーを選択し、 オープンスタジオ.
  4. 新しいノートブックを作成して選択する スパークアナリティクス 1.0 for 画像 & 接着剤 PySpark for カーネル.
  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. AWS Glue PII 検出を使用して、表に 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 に data-scientist としてログインして、PII 列が表示されていないことを確認します。 からノートブックをダウンロードできます。 この場所.
  12. 新しいノートブックを作成して選択する スパークアナリティクス 1.0 for 画像 & 接着剤 PySpark for カーネル:
    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 ライブラリを使用して、データ サイエンティスト ユーザーとして機能エンジニアリングを実行し、出力を Amazon S3 に書き戻します。

  1. 次のセルでは、 Apache Spark ML ライブラリ:
    • StringIndexer ラベルの文字列列をラベル インデックスの列にマップします。
    • OneHotEncoder ラベル インデックスとして表されるカテゴリ特徴を、特定のカテゴリ特徴の存在を示す最大 XNUMX つの値を持つバイナリ ベクトルにマップします。 この変換は、連続した特徴を期待する 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 は、パイプライン ライブラリを使用して作成できます。 パイプラインは一連のステージとして指定されます。 これらのステージは順番に実行され、入力 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 アカウント ID を指定します)。
    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、これは顧客の製品購入傾向を予測するのに役立ちます。

SageMaker 組み込みの XGBoost アルゴリズムを使用して、トレーニングと検証のデータセットを読み取ることにより、ML モデルをトレーニングします。 次に、モデルをデプロイして精度チェックを実行します。 からノートブックをダウンロードできます。 この場所.

次のセルでは、3 番目の SXNUMX バケットからデータを読み取ります。これには、機能エンジニアリング操作からの出力が含まれます。 次に、組み込みアルゴリズム XGBoost を使用してモデルをトレーニングします。

  1. 新しいノートブックを開きます。 選ぶ データサイエンス for 画像 & Pythonの3 for カーネル (次のコードで AWS アカウント ID を指定します):
    #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 スタックを介して作成された XNUMX つのバケットを空にします。
  2. ユーザーに関連付けられたアプリを削除します profiles data-scientist & data-engineer スタジオ内。
  3. CloudFormation スタックを削除します。

まとめ

この投稿では、データ エンジニアやデータ サイエンティストなどのペルソナが特徴エンジニアリングを大規模に実行できるようにするソリューションを紹介しました。 AWS Glue インタラクティブセッションを使用すると、基盤となるインフラストラクチャを管理する必要なく、PII の自動検出ときめ細かいアクセス制御を使用して、大規模な機能エンジニアリングを簡単に実現できます。 Studio を単一のエントリ ポイントとして使用することで、データの準備と保護から ML モデルの構築、トレーニング、チューニング、デプロイまで、エンド ツー エンドの ML ワークフローを構築するためのシンプルで統合されたエクスペリエンスを得ることができます。 詳細については、次の URL をご覧ください。 AWS Glue インタラクティブセッションの開始方法 & Amazon SageMakerスタジオ.

私たちはこの新しい機能に非常に興奮しており、あなたがそれを使って何を構築しようとしているのかを楽しみにしています!


付録: コンソールと AWS CLI を介してリソースをセットアップする

このセクションの手順を完了して、CloudFormation テンプレートの代わりにコンソールと AWS CLI を使用してリソースをセットアップします。

前提条件

このチュートリアルを完了するには、AWS CLI にアクセスできる必要があります ( AWS CLI の使用開始) またはからのコマンド ライン アクセスを使用します。 AWS クラウドシェル.

IAM グループ、ユーザー、ロール、およびポリシーを構成する

このセクションでは、IAM グループ data-platform-group に属する data-engineer と data-scientist の XNUMX つの IAM ユーザーを作成します。 次に、単一の IAM ポリシーを IAM グループに追加します。

  1. IAMコンソールで、 JSON タブでポリシーを作成する 名前の付いた新しいIAM管理ポリシーを作成するには DataPlatformGroupPolicy. このポリシーは、グループ内のユーザーが Studio にアクセスすることを許可しますが、IAM ユーザー名と一致するタグを持つ SageMaker ユーザープロファイルのみを使用します。 アクセス許可を提供するには、次の 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. DataPlatformGroupPolicy という名前の AWS 管理ポリシーを検索してグループにアタッチします。
  4. IAM ユーザーを作成する IAM グループ data-platform-group の下で data-engineer および data-scientist と呼ばれます。
  5. 新しい管理ポリシーを作成する という名前の SageMakerExecutionPolicy (次のコードでリージョンとアカウント ID を指定します):
    {
       "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ロールを作成する 対応するユーザープロファイルの実行ロールとして使用されるデータエンジニア (data-engineer) の SageMaker 用。 上で 権限ポリシーを添付する ページでは、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ロールを作成する 対応するユーザープロファイルの実行ロールとして使用される、データサイエンティスト (data-scientist) 用の SageMaker 用。
    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 CLI または CloudShell を使用して、データ エンジニア用の Studio ユーザー プロファイルを作成します (次のコードでアカウント ID と Studio ドメイン ID を指定します)。
    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. アカウント ID と Studio ドメイン ID を置き換えて、データ サイエンティストのユーザー プロファイルを作成する手順を繰り返します。
    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 バケットを作成し、サンプル データセットをアップロードする

このセクションでは、3 つの SXNUMX バケットを作成します。 最初のバケットには、Web マーケティングに関連するサンプル データセットがあります。 XNUMX 番目のバケットは、データ サイエンティストが特徴量エンジニアリング タスクからの出力を保存するために使用し、この出力データセットを使用して ML モデルをトレーニングします。

まず、入力データ用の 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. レイクフォーメーションコンソールの データカタログ ナビゲーション ペインで、 データベース.
  2. 選択する データベースを追加する.
  3. 名前 、デモに入ります。
  4. 選択する データベースを作成する.
  5. データカタログ、選択する テーブル類.
  6. 名前 、 入る web_marketing.
  7. データベース選択 demo.
  8. インクルードパスで、入力データ用の S3 バケットのパスを入力します。
  9. Classification、選択する 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. テーブルのプロパティ、選択する Add.
  16. キー、 入る skip.header.line.count、および用 、1を入力します。
  17. 選択する Save.

Lake Formation のアクセス許可を構成する

このセクションでは、Lake Formation のアクセス許可を設定して、IAM ロールを許可します SageMakerStudioExecutionRole_data-engineer データベースを作成し、S3 の場所を Lake Formation 内に登録します。

最初に、データ レイクの場所を登録して、Lake Formation 権限の場所でテーブルを管理します。

  1. 選択する データレイクの場所.
  2. 選択する 登録場所.
  3. AmazonS3パス、 入る 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. データベースの権限、 select スーパー.
  11. 選択する グラント.
    次に、テーブル権限を付与します SageMakerStudioExecutionRole_data-engineer:
  12. データの許可、選択する グラント.
  13. プリンシパル、選択する IAMユーザーとロールをクリックし、ロールを選択します SageMakerStudioExecutionRole_data-engineer.
  14. ポリシー タグまたはカタログ リソース、選択する 名前付きデータカタログリソース.
  15. データベース、選択する demo.
  16. テーブル類、選択する web_marketing.
  17. 権限、 select スーパー.
  18. 付与可能 権限、 select スーパー.
  19. 選択する グラント.
    最後に、データベース権限を付与します SageMakerStudioExecutionRole_data-scientist:
  20. データの許可、選択する グラント.
  21. プリンシパル、選択する IAMユーザーとロールをクリックし、ロールを選択します SageMakerStudioExecutionRole_data-scientist.
  22. ポリシー タグまたはカタログ リソース、選択する 名前付きデータカタログリソース.
  23. データベース、選択する demo.
  24. データベースの権限、 select 説明する.
  25. 選択する グラント.

著者について

AWS Glue インタラクティブセッションと Amazon SageMaker Studio PlatoBlockchain Data Intelligence を使用した機密データ保護による大規模な機能エンジニアリング。垂直検索。あい。

プラヴィーン・クマール AWS の分析ソリューション アーキテクトであり、クラウドネイティブ サービスを使用した最新のデータおよび分析プラットフォームの設計、構築、および実装に関する専門知識を持っています。 彼の関心分野は、サーバーレス テクノロジー、最新のクラウド データ ウェアハウス、ストリーミング、および ML アプリケーションです。

AWS Glue インタラクティブセッションと Amazon SageMaker Studio PlatoBlockchain Data Intelligence を使用した機密データ保護による大規模な機能エンジニアリング。垂直検索。あい。

関山典隆 AWS Glue チームのプリンシパル ビッグ データ アーキテクトです。 彼はさまざまなチームと協力して、この投稿のような結果を出すことを楽しんでいます。 余暇には、家族と一緒にビデオゲームを楽しんでいます。

タイムスタンプ:

より多くの AWS機械学習