AWS Glue 대화형 세션 및 Amazon SageMaker Studio PlatoBlockchain Data Intelligence를 사용하여 민감한 데이터를 보호하는 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

AWS Glue 대화형 세션 및 Amazon SageMaker Studio를 사용하여 민감한 데이터를 보호하는 대규모 기능 엔지니어링

조직은 기계 학습(ML) 및 AI 서비스를 사용하여 고객 경험을 향상하고 운영 비용을 절감하며 비즈니스 결과를 개선할 수 있는 새로운 가능성을 열어줍니다. 데이터는 ML 및 AI 사용 사례를 뒷받침하며 조직의 전략적 자산입니다. 데이터가 기하급수적으로 증가함에 따라 조직은 데이터를 사전 처리하고, 기능 엔지니어링을 수행하고, 규모에 맞게 ML 모델을 구축, 교육 및 운영하기 위해 통합되고 비용 효율적이며 성능이 뛰어난 데이터 플랫폼을 설정하려고 합니다. 이를 달성하기 위해 AWS는 아마존 단순 스토리지 서비스 (Amazon S3)는 분석 및 ML 워크로드를 지원하기 위해 특별히 제작된 도구 및 처리 엔진을 갖춘 데이터 레이크입니다. 통합 ML 경험을 위해 다음을 사용할 수 있습니다. 아마존 세이지 메이커 스튜디오, 이는 제공 AWS Glue 대화형 세션과 기본 통합 민감한 데이터 보호를 통해 규모에 맞게 기능 엔지니어링을 수행합니다. 이 게시물에서는 이 솔루션을 구현하는 방법을 시연합니다.

아마존 세이지 메이커 는 광범위한 사용 사례를 위해 규모에 맞게 모델을 구축, 교육 및 배포할 수 있는 완전 관리형 ML 서비스입니다. 모델 교육의 경우 다음 중 하나를 사용할 수 있습니다. 내장 알고리즘 SageMaker 내에서 빠르게 ML 모델 교육 및 배포를 시작합니다.

모델 구축 및 개발 프로세스의 핵심 구성 요소는 기능 엔지니어링입니다. AWS 접착제 규모에 맞게 기능 엔지니어링을 달성하기 위해 권장되는 옵션 중 하나입니다. AWS Glue를 사용하면 서버리스 Apache Spark 인프라에서 분산 방식으로 데이터 통합 ​​및 변환을 실행할 수 있으며 기능 엔지니어링 및 모델 개발을 위해 널리 사용되는 Spark ML 라이브러리를 쉽게 사용할 수 있습니다. 또한 다음을 통해 증분 데이터 처리에 AWS Glue를 사용할 수 있습니다. 작업 북마크, 다음을 사용하여 100개 이상의 소스에서 데이터를 수집합니다. 커넥터를 사용하여 급증하거나 예측할 수 없는 워크로드를 실행합니다. 자동 스케일링.

ML 기반 애플리케이션의 또 다른 중요한 요구 사항은 데이터 보안 및 액세스 제어입니다. 최소 권한 액세스 원칙에 따라 기능 엔지니어링 및 모델 구축 프로세스의 일부로 가장 민감한 데이터에 액세스할 수 있는 사람을 더 엄격하게 제어하는 ​​것이 일반적입니다. 이를 달성하기 위해 다음과 AWS Glue 통합을 활용할 수 있습니다. AWS Lake 형성 데이터 레이크 자산의 거버넌스 및 관리 향상을 위해. Lake Formation을 사용하면 Amazon S3 데이터 레이크 위에 세분화된 데이터 액세스 제어 및 보안 정책을 구성할 수 있습니다. 정책은 중앙 위치에서 정의되어 AWS Glue와 같은 여러 분석 및 ML 서비스를 허용합니다. 아마존 아테나및 SageMaker는 Amazon S3에 저장된 데이터와 상호 작용합니다.

AWS Glue에는 개인 식별 정보(PII) 감지 규정 준수 및 거버넌스를 강화하기 위해 필요에 따라 엔터티를 감지, 마스킹 또는 제거하는 기능을 제공하는 변환입니다. PII 변환을 사용하면 데이터 세트에서 PII 데이터를 감지하고 Lake Formation을 사용하여 세분화된 액세스 제어를 자동으로 적용하여 여러 사용자 그룹에 대한 민감한 데이터를 제한할 수 있습니다.

유스 케이스

우리는 고객 마케팅 데이터 세트를 포함하고 데이터 엔지니어와 데이터 과학자라는 두 가지 사용자 페르소나를 포함하는 성향 모델 사용 사례에 중점을 둡니다. 데이터 세트에는 리드 소스, 연락처 메모, 직무, 일부 플래그, 방문당 페이지 보기 등을 포함한 고객별 정보가 포함되어 있습니다. 데이터 세트에는 개인 전화번호와 같은 민감한 정보도 포함됩니다.

데이터 엔지니어는 데이터 준비, 사전 처리 및 액세스 제어를 포함하여 종단 간 데이터 처리 파이프라인을 구축하는 일을 담당합니다. 데이터 과학자는 기능 엔지니어링, ML 모델 교육 및 배포를 담당합니다. 데이터 과학자는 기능 엔지니어링 또는 ML 모델 교육을 위해 PII 민감한 데이터에 액세스할 수 없습니다.

이 사용 사례의 일부로 데이터 엔지니어는 데이터 파이프라인을 구축하여 데이터 세트를 전처리하고, 데이터 세트에서 PII 정보를 스캔하고, PII 열에 대한 액세스를 데이터 과학자 사용자로 제한합니다. 결과적으로 데이터 과학자가 데이터 세트를 사용하여 기능 엔지니어링을 수행하고 ML 모델을 빌드할 때 PII 민감한 열(이 경우 전화 번호)에 액세스할 수 없습니다. 기능 엔지니어링 프로세스에는 문자열 유형의 열을 ML 모델에 최적인 형식으로 변환하는 작업이 포함됩니다. 고급 사용 사례로 이 액세스 패턴을 확장하여 Lake Formation을 사용하여 행 수준 및 셀 수준 보안을 구현할 수 있습니다.

솔루션 개요

이 솔루션에는 다음과 같은 개략적인 단계가 포함되어 있습니다.

  1. 리소스 설정 AWS 클라우드 포메이션.
  2. AWS Glue 대화형 세션에서 PII 탐지 및 세분화된 액세스 제어를 포함하여 데이터 세트를 전처리합니다.
  3. AWS Glue 대화형 세션에서 기능 엔지니어링을 수행합니다.
  4. SageMaker 내장 XGBoost 알고리즘을 사용하여 ML 모델을 교육하고 배포합니다.
  5. ML 모델을 평가합니다.

다음 다이어그램은 솔루션 아키텍처를 보여줍니다.

사전 조건

이 자습서를 완료하려면 다음 전제 조건이 있어야 합니다.

AWS CloudFormation으로 리소스 설정

이 게시물에는 빠른 설정을 위한 CloudFormation 템플릿이 포함되어 있습니다. 필요에 맞게 검토하고 사용자 정의할 수 있습니다. 리소스 설정을 선호하는 경우 AWS 관리 콘솔 AWS CloudFormation이 아닌 AWS CLI에 대한 자세한 내용은 이 게시물 끝에 있는 부록의 지침을 참조하십시오.

CloudFormation 템플릿은 다음 리소스를 생성합니다.

  • 샘플 데이터 세트가 있는 S3 버킷
  • An AWS 람다 데이터 세트를 로드하는 함수
  • AWS 자격 증명 및 액세스 관리 (IAM) 그룹, 사용자, 역할 및 정책
  • Lake Formation 데이터 레이크 설정 및 권한
  • SageMaker 사용자 프로필

자원을 작성하려면 다음 단계를 완료하십시오.

  1. 콘솔에 로그인합니다.
  2. 왼쪽 메뉴에서 발사 스택:
    시작 버튼
  3. 왼쪽 메뉴에서 다음 보기.
  4. 럭셔리 데이터엔지니어Pwd데이터과학자Pwd, 데이터 엔지니어 및 데이터 과학자 사용자에 대한 자신의 암호를 입력하십시오.
  5. 럭셔리 Glue데이터베이스 이름, 입력 demo.
  6. 럭셔리 Glue테이블 이름, 입력 web_marketing.
  7. 럭셔리 S3BucketNameForInput, 입력 blog-studio-pii-dataset-.
  8. 럭셔리 S3BucketNameForOutput, 입력 blog-studio-output-.
  9. 럭셔리 SageMaker도메인 ID, 필수 단계에서 준비한 SageMaker 도메인 ID를 입력합니다.
  10. 왼쪽 메뉴에서 다음 보기.
  11. 다음 페이지에서 다음 보기.
  12. 마지막 페이지에서 세부 정보를 검토하고 AWS CloudFormation이 IAM 리소스를 생성 할 수 있음을 인정합니다.
  13. 왼쪽 메뉴에서 만들기.

스택 생성에는 최대 10분이 소요될 수 있습니다. 스택은 데이터 엔지니어와 데이터 과학자라는 두 개인에 대한 IAM 역할과 SageMaker 사용자 프로필을 생성합니다. 또한 데이터베이스 데모 및 테이블을 생성합니다. web_marketing 샘플 데이터 세트와 함께.

스택 생성 시 데이터 엔지니어 페르소나는 테이블에 대한 완전한 액세스 권한이 있지만 데이터 과학자 페르소나는 아직 테이블에 대한 액세스 권한이 없습니다.

데이터 세트 전처리

AWS Glue 대화형 세션에서 데이터 사전 처리를 시작하겠습니다. 데이터 엔지니어 페르소나는 민감한 데이터가 있는지 확인하기 위해 데이터를 확인하고 데이터 과학자 페르소나에게 최소한의 액세스 권한을 부여하려고 합니다. 에서 노트북을 다운로드할 수 있습니다. 이 위치.

  1. 데이터 엔지니어 사용자를 사용하여 콘솔에 로그인합니다.
  2. SageMaker 콘솔에서 사용자.
  3. 데이터 엔지니어 사용자를 선택하고 오픈 스튜디오.
  4. 새 노트북을 만들고 선택 스파크애널리틱스 1.0 for 영상글루 파이스파크 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로 분류된 열에 민감한 데이터가 포함되어 있는지 여부를 확인하십시오(그렇지 않은 경우에는 registered_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. 새 노트북을 만들고 선택 스파크애널리틱스 1.0 for 영상글루 파이스파크 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. 다음 셀에서 우리는 아파치 스파크 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 계정 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, jobroleusedpromo ML 모델에 최적인 형식으로 변환합니다. 다음과 같은 열도 포함했습니다. pageviewspervisittotalwebvisits, 고객의 제품 구매 성향을 예측하는 데 도움이 됩니다.

이제 SageMaker 내장 XGBoost 알고리즘을 사용하여 훈련 및 검증 데이터 세트를 읽어 ML 모델을 훈련합니다. 그런 다음 모델을 배포하고 정확도 검사를 실행합니다. 에서 노트북을 다운로드할 수 있습니다. 이 위치.

다음 셀에서는 기능 엔지니어링 작업의 출력이 포함된 두 번째 S3 버킷의 데이터를 읽습니다. 그런 다음 내장 알고리즘 XGBoost를 사용하여 모델을 훈련합니다.

  1. 새 노트북을 엽니다. 선택하다 데이터 과학 for 영상파이썬 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 스택을 통해 생성된 두 개의 버킷을 비웁니다.
  2. 사용자와 연결된 앱 삭제 profiles data-scientistdata-engineer 스튜디오 내에서.
  3. CloudFormation 스택을 삭제합니다.

결론

이 게시물에서는 데이터 엔지니어 및 데이터 과학자와 같은 페르소나가 기능 엔지니어링을 대규모로 수행할 수 있는 솔루션을 시연했습니다. AWS Glue 대화형 세션을 사용하면 기본 인프라를 관리할 필요 없이 자동 PII 감지 및 세분화된 액세스 제어를 통해 규모에 맞게 기능 엔지니어링을 쉽게 달성할 수 있습니다. Studio를 단일 진입점으로 사용하면 데이터 준비 및 보호에서 ML 모델 구축, 교육, 조정 및 배포에 이르기까지 엔드 투 엔드 ML 워크플로를 구축하기 위한 간소화되고 통합된 환경을 얻을 수 있습니다. 자세한 내용을 보려면 다음을 방문하십시오. AWS Glue 대화형 세션 시작하기아마존 세이지 메이커 스튜디오.

우리는 이 새로운 기능에 대해 매우 기쁘게 생각하며 여러분이 이 기능을 사용하여 무엇을 구축할 것인지 보고 싶습니다!


부록: 콘솔 및 AWS CLI를 통해 리소스 설정

CloudFormation 템플릿 대신 콘솔과 AWS CLI를 사용하여 리소스를 설정하려면 이 섹션의 지침을 완료하십시오.

사전 조건

이 자습서를 완료하려면 AWS CLI에 대한 액세스 권한이 있어야 합니다(참조: AWS CLI 시작하기) 또는 다음에서 명령줄 액세스를 사용합니다. AWS 클라우드쉘.

IAM 그룹, 사용자, 역할 및 정책 구성

이 섹션에서는 IAM 그룹 data-platform-group에 속하는 두 명의 IAM 사용자(data-engineer 및 data-scientist)를 생성합니다. 그런 다음 단일 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에서 데이터 엔지니어 및 데이터 과학자라고 합니다.
  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. $XNUMX Million 미만 권한, 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. $XNUMX Million 미만 권한, 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 버킷 생성 및 샘플 데이터 세트 업로드

이 섹션에서는 두 개의 S3 버킷을 생성합니다. 첫 번째 버킷에는 웹 마케팅과 관련된 샘플 데이터 세트가 있습니다. 두 번째 버킷은 데이터 과학자가 기능 엔지니어링 작업의 출력을 저장하는 데 사용하고 이 출력 데이터 세트는 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. Lake Formation 콘솔에서 데이터 카탈로그 탐색 창에서 데이터베이스.
  2. 왼쪽 메뉴에서 데이터베이스 추가.
  3. 럭셔리 성함, 데모를 입력하십시오.
  4. 왼쪽 메뉴에서 데이터베이스 생성.
  5. $XNUMX Million 미만 데이터 카탈로그선택한다. 테이블.
  6. 럭셔리 성함, 입력 web_marketing.
  7. 럭셔리 데이터베이스, 고르다 demo.
  8. 럭셔리 경로 포함, 입력 데이터에 대한 S3 버킷의 경로를 입력하십시오.
  9. 럭셔리 분류선택한다. CSV.
  10. $XNUMX Million 미만 개요선택한다. 업로드 스키마.
  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. $XNUMX Million 미만 테이블 세부정보선택한다. 표 수정.
  15. $XNUMX Million 미만 테이블 속성선택한다. 추가.
  16. 럭셔리 , 입력 skip.header.line.count등에 대한 가치관, 1을 입력합니다.
  17. 왼쪽 메뉴에서 찜하기.

Lake Formation 권한 구성

이 섹션에서는 IAM 역할을 허용하도록 Lake Formation 권한을 설정합니다. SageMakerStudioExecutionRole_data-engineer 데이터베이스를 생성하고 Lake Formation 내에 S3 위치를 등록합니다.

먼저 데이터 레이크 위치를 등록하여 Lake Formation 권한에서 위치 아래의 테이블을 관리합니다.

  1. 왼쪽 메뉴에서 데이터 레이크 위치.
  2. 왼쪽 메뉴에서 위치 등록.
  3. 럭셔리 Amazon S3 경로, 입력 s3://blog-studio-pii-dataset-/ (데이터 세트가 포함된 버킷).
  4. 왼쪽 메뉴에서 위치 등록.
    이제 IAM 역할에 Lake Formation 데이터베이스 및 테이블 권한을 부여합니다. SageMakerStudioExecutionRole_data-engineerSageMakerStudioExecutionRole_data-scientist.먼저 데이터베이스 권한 부여 SageMakerStudioExecutionRole_data-engineer:
  5. $XNUMX Million 미만 권한선택한다. 데이터 레이크 권한.
  6. $XNUMX Million 미만 데이터 권한선택한다. 부여.
  7. 럭셔리 교장선택한다. IAM 사용자 및 역할을 클릭하고 역할을 선택합니다. SageMakerStudioExecutionRole_data-engineer.
  8. 럭셔리 정책 태그 또는 카탈로그 리소스선택한다. 명명된 데이터 카탈로그 리소스.
  9. 럭셔리 데이터베이스, 데모를 선택하십시오.
  10. 럭셔리 데이터베이스 권한, 고르다 감독자.
  11. 왼쪽 메뉴에서 부여.
    다음으로 테이블 권한을 부여합니다. SageMakerStudioExecutionRole_data-engineer:
  12. $XNUMX Million 미만 데이터 권한선택한다. 부여.
  13. 럭셔리 교장선택한다. IAM 사용자 및 역할을 클릭하고 역할을 선택합니다. SageMakerStudioExecutionRole_data-engineer.
  14. 럭셔리 정책 태그 또는 카탈로그 리소스선택한다. 명명된 데이터 카탈로그 리소스.
  15. 럭셔리 데이터베이스선택한다. demo.
  16. 럭셔리 테이블선택한다. web_marketing.
  17. 럭셔리 작업대 권한, 고르다 감독자.
  18. 럭셔리 부여 가능 권한, 고르다 감독자.
  19. 왼쪽 메뉴에서 부여.
    마지막으로 다음에 대한 데이터베이스 권한을 부여합니다. SageMakerStudioExecutionRole_data-scientist:
  20. $XNUMX Million 미만 데이터 권한선택한다. 부여.
  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 기계 학습