제퍼넷 로고

Active Directory 그룹별 IAM 역할로 사용자를 Amazon SageMaker Studio에 온보딩 | 아마존 웹 서비스

시간

아마존 세이지 메이커 스튜디오 ML(기계 학습)을 위한 웹 기반 통합 개발 환경(IDE)으로 ML 모델을 빌드, 훈련, 디버그, 배포 및 모니터링할 수 있습니다. AWS 계정 및 리전에서 Studio를 프로비저닝하려면 먼저 아마존 세이지 메이커 도메인 - ML 환경을 캡슐화하는 구조입니다. 보다 구체적으로 SageMaker 도메인은 연결된 아마존 탄성 파일 시스템 (Amazon EFS) 볼륨, 승인된 사용자 목록 및 다양한 보안, 애플리케이션, 정책 및 아마존 가상 프라이빗 클라우드 (Amazon VPC) 구성.

SageMaker 도메인을 생성할 때 다음 중 하나를 사용하도록 선택할 수 있습니다. AWS IAM 자격 증명 센터 (AWS Single Sign-On의 후속 제품) 또는 AWS 자격 증명 및 액세스 관리 (IAM) 사용자 인증 방법. 두 인증 방법 모두 고유한 사용 사례가 있습니다. 이 게시물에서는 인증 방법으로 IAM Identity Center 또는 SSO(Single Sign-On) 모드를 사용하는 SageMaker 도메인에 중점을 둡니다.

SSO 모드를 사용하면 IAM Identity Center에서 SSO 사용자 및 그룹을 설정한 다음 Studio 콘솔에서 SSO 그룹 또는 사용자에게 액세스 권한을 부여합니다. 현재 도메인의 모든 SSO 사용자는 도메인의 실행 역할을 상속받습니다. 이것은 모든 조직에서 작동하지 않을 수 있습니다. 예를 들어 관리자는 AD(Active Directory) 그룹 멤버십을 기반으로 Studio SSO 사용자에 대한 IAM 권한을 설정할 수 있습니다. 또한 관리자는 SSO 사용자에게 Studio에 대한 액세스 권한을 수동으로 부여해야 하므로 수백 명의 사용자를 온보딩할 때 프로세스가 확장되지 않을 수 있습니다.

이 게시물에서는 AD 그룹 멤버십을 기반으로 최소 권한 권한으로 SSO 사용자를 Studio에 프로비저닝하는 솔루션에 대한 규범적 지침을 제공합니다. 이 지침을 통해 수백 명의 사용자를 Studio에 신속하게 온보딩하고 보안 및 규정 준수 태세를 달성할 수 있습니다.

솔루션 개요

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

Studio에서 AD 사용자를 프로비저닝하는 워크플로에는 다음 단계가 포함됩니다.

  1. 설정 SSO 모드의 Studio 도메인.
  2. 각 AD 그룹에 대해:
    1. 적절한 세분화된 IAM 정책으로 Studio 실행 역할 설정
    2. AD 그룹-역할 매핑에 항목 기록 아마존 DynamoDB 테이블.

    또는 AD 그룹 이름을 기반으로 IAM 역할 ARN에 대한 명명 표준을 채택하고 외부 데이터베이스에 매핑을 저장할 필요 없이 IAM 역할 ARN을 파생시킬 수 있습니다.

  3. AD 사용자, 그룹 및 멤버십을 AWS Identity Center와 동기화:
    1. SCIM을 지원하는 자격 증명 공급자(IdP)를 사용하는 경우 IAM 자격 증명 센터와 SCIM API 통합을 사용합니다.
    2. 자체 관리형 AD를 사용하는 경우 AD 커넥터를 사용할 수 있습니다.
  4. 회사 AD에서 AD 그룹이 생성되면 다음 단계를 완료하십시오.
    1. IAM Identity Center에서 해당 SSO 그룹을 생성합니다.
    2. SageMaker 콘솔을 사용하여 SSO 그룹을 Studio 도메인에 연결합니다.
  5. 회사 AD에서 AD 사용자가 생성되면 해당 SSO 사용자가 IAM Identity Center에 생성됩니다.
  6. AD 사용자가 AD 그룹에 할당되면 IAM Identity Center API(그룹멤버십 생성)이 호출되고 SSO 그룹 구성원이 생성됩니다.
  7. 이전 이벤트가 로그인되었습니다. AWS 클라우드 트레일 이름이 적힌 AddMemberToGroup.
  8. An 아마존 이벤트 브리지 규칙은 CloudTrail 이벤트를 수신하고 일치합니다. AddMemberToGroup 규칙 패턴.
  9. EventBridge 규칙은 대상을 트리거합니다. AWS 람다 기능.
  10. 이 Lambda 함수는 IAM Identity Center API를 다시 호출하고 SSO 사용자 및 그룹 정보를 가져오고 다음 단계를 수행하여 Studio 사용자 프로필(사용자 프로필 만들기) SSO 사용자의 경우:
    1. DynamoDB 테이블을 조회하여 AD 그룹에 해당하는 IAM 역할을 가져옵니다.
    2. 조회 테이블에서 얻은 SSO 사용자 및 IAM 역할로 사용자 프로필을 생성합니다.
    3. SSO 사용자에게 Studio에 대한 액세스 권한이 부여됩니다.
  11. SSO 사용자는 Studio 도메인 URL을 통해 Studio IDE로 리디렉션됩니다.

작성 당시 SageMaker 도메인 수준에서 SageMaker 콘솔을 사용하여 관리자가 4b단계(SSO 그룹을 Studio 도메인에 연결)를 수동으로 수행해야 합니다.

사용자 프로필을 생성하도록 Lambda 함수 설정

이 솔루션은 Lambda 함수를 사용하여 Studio 사용자 프로필을 생성합니다. Studio 사용자 프로필 생성을 자동화하기 위한 요구 사항을 충족하기 위해 복사하고 수정할 수 있는 다음 샘플 Lambda 함수를 제공합니다. 이 기능은 다음 작업을 수행합니다.

  1. CloudTrail 받기 AddMemberToGroup EventBridge의 이벤트.
  2. 스튜디오 회수 DOMAIN_ID 환경 변수에서(도메인 ID를 하드 코딩하거나 여러 도메인이 있는 경우 DynamoDB 테이블을 사용할 수도 있음).
  3. AD 사용자를 실행 역할과 일치시키기 위해 더미 마크업 테이블에서 읽습니다. 테이블 기반 접근 방식을 사용하는 경우 DynamoDB 테이블에서 가져오도록 변경할 수 있습니다. DynamoDB를 사용하는 경우 Lambda 함수의 실행 역할에도 테이블에서 읽을 수 있는 권한이 필요합니다.
  4. CloudTrail 이벤트 데이터를 기반으로 IAM Identity Center에서 SSO 사용자 및 AD 그룹 멤버십 정보를 검색합니다.
  5. SSO 세부 정보 및 일치하는 실행 역할을 사용하여 SSO 사용자에 대한 Studio 사용자 프로필을 만듭니다.
import os
import json
import boto3
DOMAIN_ID = os.environ.get('DOMAIN_ID', 'd-xxxx') def lambda_handler(event, context): print({"Event": event}) client = boto3.client('identitystore') sm_client = boto3.client('sagemaker') event_detail = event['detail'] group_response = client.describe_group( IdentityStoreId=event_detail['requestParameters']['identityStoreId'], GroupId=event_detail['requestParameters']['groupId'], ) group_name = group_response['DisplayName'] user_response = client.describe_user( IdentityStoreId=event_detail['requestParameters']['identityStoreId'], UserId=event_detail['requestParameters']['member']['memberId'] ) user_name = user_response['UserName'] print(f"Event details: {user_name} has been added to {group_name}") mapping_dict = { "ad-group-1": "<execution-role-arn>", "ad-group-2": "<execution-role-arn>” } user_role = mapping_dict.get(group_name) if user_role: response = sm_client.create_user_profile( DomainId=DOMAIN_ID, SingleSignOnUserIdentifier="UserName", SingleSignOnUserValue=user_name, # if the SSO user_name value is an email, # add logic to handle it since Studio user profiles don’t accept @ character UserProfileName=user_name, UserSettings={ "ExecutionRole": user_role } ) print(response) else: response = "Group is not authorized to use SageMaker. Doing nothing." print(response) return { 'statusCode': 200, 'body': json.dumps(response) }

기본적으로 Lambda 실행 역할에는 사용자 프로필을 생성하거나 SSO 사용자를 나열할 수 있는 액세스 권한이 없습니다. Lambda 함수를 생성한 후 IAM에서 함수의 실행 역할에 액세스하고 조직 요구 사항에 따라 필요에 따라 범위를 좁힌 후 다음 정책을 인라인 정책으로 연결합니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "identitystore:DescribeGroup", "identitystore:DescribeUser" ], "Effect": "Allow", "Resource": "*" }, { "Action": "sagemaker:CreateUserProfile", "Effect": "Allow", "Resource": "*" }, { "Action": "iam:PassRole", "Effect": "Allow", "Resource": [ "<list-of-studio-execution-roles>" ] } ]
}

CloudTrail 이벤트에 대한 EventBridge 규칙 설정

EventBridge는 애플리케이션을 다양한 소스의 데이터와 연결하는 데 사용할 수 있는 서버리스 이벤트 버스 서비스입니다. 이 솔루션에서는 규칙 기반 트리거를 생성합니다. EventBridge는 이벤트를 수신하고 제공된 패턴과 일치하며 패턴 일치가 성공하면 Lambda 함수를 트리거합니다. 솔루션 개요에서 설명한 것처럼 우리는 AddMemberToGroup 이벤트. 설정하려면 다음 단계를 완료하세요.

  1. EventBridge 콘솔에서 다음을 선택합니다. 규칙 탐색 창에서
  2. 왼쪽 메뉴에서 규칙 만들기.
  3. 예를 들어 규칙 이름을 제공하십시오. AddUserToADGroup.
  4. 선택적으로 설명을 입력합니다.
  5. 선택 디폴트 값 이벤트 버스용.
  6. $XNUMX Million 미만 규칙 유형선택한다. 이벤트 패턴이 있는 규칙다음을 선택 다음 보기.
  7. 이벤트 패턴 구축 페이지에서 선택 이벤트 소스 as AWS 이벤트 또는 EventBridge 파트너 이벤트.
  8. $XNUMX Million 미만 이벤트 패턴을 선택하십시오 사용자 정의 패턴(JSON 편집기) 탭을 누르고 다음 패턴을 입력합니다.
    { "source": ["aws.sso-directory"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["sso-directory.amazonaws.com"], "eventName": ["AddMemberToGroup"] }
    }

  9. 왼쪽 메뉴에서 다음 보기.
  10. 대상 선택 페이지에서 대상 유형으로 AWS 서비스를 선택하고 대상으로 Lambda 함수를 선택한 다음 이전에 생성한 함수를 선택합니다. 다음 보기.
  11. 왼쪽 메뉴에서 다음 보기 를 시청하여 이에 대해 더 많은 정보를 얻을 수 있습니다. 태그 구성 페이지를 선택한 다음 규칙 만들기 를 시청하여 이에 대해 더 많은 정보를 얻을 수 있습니다. 검토 및 생성 페이지.

Lambda 함수와 EventBridge 규칙을 설정한 후 이 솔루션을 테스트할 수 있습니다. 이렇게 하려면 IdP를 열고 Studio 실행 역할이 매핑된 AD 그룹 중 하나에 사용자를 추가합니다. 사용자를 추가하면 Lambda 함수 로그를 확인하여 이벤트를 검사하고 자동으로 프로비저닝된 Studio 사용자도 볼 수 있습니다. 또한 다음을 사용할 수 있습니다. 사용자 프로필 설명 사용자가 적절한 권한으로 생성되었는지 확인하기 위한 API 호출입니다.

여러 Studio 계정 지원

이전 아키텍처로 여러 Studio 계정을 지원하려면 다음과 같이 변경하는 것이 좋습니다.

  1. 각 Studio 계정 수준에 매핑된 AD 그룹을 설정합니다.
  2. 각 Studio 계정에서 그룹 수준 IAM 역할을 설정합니다.
  3. 그룹을 IAM 역할 매핑으로 설정하거나 파생시킵니다.
  4. 수행할 Lambda 함수 설정 교차 계정 역할 가정, IAM 역할 매핑 ARN 및 생성된 사용자 프로필을 기반으로 합니다.

사용자 프로비저닝 해제

사용자가 AD 그룹에서 제거되면 Studio 도메인에서도 액세스 권한을 제거해야 합니다. SSO를 사용하면 사용자가 제거되면 AD와 IAM Identity Center의 동기화가 이루어지고 해당 Studio 애플리케이션 액세스가 즉시 취소되면 IAM Identity Center에서 사용자가 자동으로 비활성화됩니다.

그러나 Studio의 사용자 프로필은 계속 유지됩니다. CloudTrail 및 Lambda 함수로 유사한 워크플로를 추가하여 Studio에서 사용자 프로필을 제거할 수 있습니다. EventBridge 트리거는 이제 그룹 구성원 삭제 이벤트. Lambda 함수에서 다음 단계를 완료합니다.

  1. 사용자 및 그룹 ID에서 사용자 프로필 이름을 가져옵니다.
  2. 다음을 사용하여 사용자 프로필에 대해 실행 중인 모든 앱을 나열합니다. ListApps API 호출, 필터링 기준 UserProfileNameEquals 매개변수. 사용자의 모든 앱을 나열하려면 페이지가 매겨진 응답을 확인하세요.
  3. 사용자에 대해 실행 중인 모든 앱을 삭제하고 모든 앱이 삭제될 때까지 기다립니다. 당신은 사용할 수 있습니다 설명 앱 앱 상태를 보기 위한 API입니다.
  4. 모든 앱이 삭제 상태(또는 실패한), 사용자 프로필을 삭제합니다.

이 솔루션을 사용하면 ML 플랫폼 관리자는 하나의 중앙 위치에서 그룹 멤버십을 유지하고 EventBridge 및 Lambda 기능을 통해 Studio 사용자 프로필 관리를 자동화할 수 있습니다.

다음 코드는 샘플 CloudTrail 이벤트를 보여줍니다.

"AddMemberToGroup": { "eventVersion": "1.08", "userIdentity": { "type": "Unknown", "accountId": "<account-id>", "accessKeyId": "30997fec-b566-4b8b-810b-60934abddaa2" }, "eventTime": "2022-09-26T22:24:18Z", "eventSource": "sso-directory.amazonaws.com", "eventName": "AddMemberToGroup", "awsRegion": "us-east-1", "sourceIPAddress": "54.189.184.116", "userAgent": "Okta SCIM Client 1.0.0", "requestParameters": { "identityStoreId": "d-906716eb24", "groupId": "14f83478-a061-708f-8de4-a3a2b99e9d89", "member": { "memberId": "04c8e458-a021-702e-f9d1-7f430ff2c752" } }, "responseElements": null, "requestID": "b24a123b-afb3-4fb6-8650-b0dc1f35ea3a", "eventID": "c2c0873b-5c49-404c-add7-f10d4a6bd40c", "readOnly": false, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "<account-id>", "eventCategory": "Management", "tlsDetails": { "tlsVersion": "TLSv1.2", "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256", "clientProvidedHostHeader": "up.sso.us-east-1.amazonaws.com" }
}

다음 코드는 샘플 Studio 사용자 프로필 API 요청을 보여줍니다.

create-user-profile 
--domain-id d-xxxxxx 
--user-profile-name ssouserid
--single-sign-on-user-identifier 'userName' 
--single-sign-on-user-value 'ssouserid‘ 
--user-settings ExecutionRole=arn:aws:iam::<account id>:role/name

결론

이 게시물에서는 관리자가 AD 그룹 멤버십을 기반으로 수백 명의 사용자를 위해 Studio 온보딩을 확장할 수 있는 방법에 대해 논의했습니다. 우리는 조직이 민첩성, 보안 및 규정 준수 요구 사항을 충족하기 위해 온보딩 프로세스를 자동화하고 확장하기 위해 채택할 수 있는 종단 간 솔루션 아키텍처를 시연했습니다. 사용자 온보딩을 자동화하기 위해 확장 가능한 솔루션을 찾고 있다면 이 솔루션을 시도하고 아래에 피드백을 남겨주세요! Studio 온보딩에 대한 자세한 내용은 다음을 참조하세요. Amazon SageMaker 도메인에 온보딩.


저자 소개

램 비탈 AWS의 ML 전문 솔루션 아키텍트입니다. 20년 이상 분산, 하이브리드 및 클라우드 애플리케이션을 설계하고 구축한 경험이 있습니다. 그는 기업 고객의 클라우드 채택 및 최적화 여정을 통해 비즈니스 결과를 개선할 수 있도록 안전하고 확장 가능한 AI/ML 및 빅 데이터 솔루션을 구축하는 데 열정적입니다. 여가 시간에는 오토바이를 타고 2살 된 양과 함께 산책을 합니다!

두르가 수리 Amazon SageMaker Service SA 팀의 ML 솔루션 아키텍트입니다. 그녀는 모든 사람이 기계 학습에 접근할 수 있도록 만드는 데 열정적입니다. AWS에서 4년 동안 그녀는 기업 고객을 위한 AI/ML 플랫폼 설정을 도왔습니다. 그녀는 일하지 않을 때 오토바이 타기, 미스터리 소설, 5살짜리 허스키와 함께하는 하이킹을 좋아합니다.

spot_img

최신 인텔리전스

spot_img