Zephyrnet-logo

Onboard gebruikers naar Amazon SageMaker Studio met Active Directory-groepspecifieke IAM-rollen | Amazon-webservices

Datum:

Amazon SageMaker Studio is een webgebaseerde geïntegreerde ontwikkelomgeving (IDE) voor machine learning (ML) waarmee u uw ML-modellen kunt bouwen, trainen, debuggen, implementeren en bewaken. Om Studio in te richten in uw AWS-account en regio, moet u eerst een Amazon Sage Maker domein: een constructie die uw ML-omgeving omvat. Meer concreet bestaat een SageMaker-domein uit een geassocieerd Amazon elastisch bestandssysteem (Amazon EFS) volume, een lijst met geautoriseerde gebruikers en een verscheidenheid aan beveiligings-, applicatie-, beleids- en Amazon virtuele privécloud (Amazon VPC) configuraties.

Bij het maken van uw SageMaker-domein kunt u ervoor kiezen om een ​​van beide te gebruiken AWS IAM Identiteitscentrum (opvolger van AWS Single Sign-On) of AWS Identiteits- en toegangsbeheer (IAM) voor methoden voor gebruikersauthenticatie. Beide authenticatiemethoden hebben hun eigen gebruiksscenario's; in dit bericht richten we ons op SageMaker-domeinen met IAM Identity Center, of single sign-on (SSO)-modus, als authenticatiemethode.

Met de SSO-modus stelt u een SSO-gebruiker en -groep in IAM Identity Center in en verleent vervolgens toegang aan de SSO-groep of gebruiker vanuit de Studio-console. Momenteel nemen alle SSO-gebruikers in een domein de uitvoeringsrol van het domein over. Dit werkt mogelijk niet voor alle organisaties. Beheerders kunnen bijvoorbeeld IAM-machtigingen instellen voor een Studio SSO-gebruiker op basis van hun Active Directory (AD)-groepslidmaatschap. Bovendien, omdat beheerders verplicht zijn om SSO-gebruikers handmatig toegang tot Studio te verlenen, is het mogelijk dat het proces niet schaalbaar is wanneer honderden gebruikers worden toegelaten.

In dit bericht bieden we prescriptieve richtlijnen voor de oplossing om SSO-gebruikers in Studio te voorzien met de minste machtigingen op basis van AD-groepslidmaatschap. Deze begeleiding stelt u in staat om snel op te schalen voor het onboarden van honderden gebruikers naar Studio en uw beveiligings- en nalevingsstatus te bereiken.

Overzicht oplossingen

Het volgende diagram illustreert de oplossingsarchitectuur.

De workflow voor het inrichten van AD-gebruikers in Studio omvat de volgende stappen:

  1. Het opzetten van een Studio-domein in SSO-modus.
  2. Voor elke AD-groep:
    1. Stel uw Studio-uitvoeringsrol in met passend, fijnmazig IAM-beleid
    2. Neem een ​​vermelding op in de AD-groepsroltoewijzing Amazon DynamoDB tafel.

    U kunt ook een naamgevingsstandaard voor IAM-rol-ARN's toepassen op basis van de AD-groepsnaam en de IAM-rol-ARN afleiden zonder dat u de toewijzing in een externe database hoeft op te slaan.

  3. Synchroniseer uw AD-gebruikers en groepen en lidmaatschappen met AWS Identity Center:
    1. Als u een identiteitsprovider (IdP) gebruikt die SCIM ondersteunt, gebruikt u de SCIM API-integratie met IAM Identity Center.
    2. Als u zelfbeheerde AD gebruikt, kunt u AD Connector gebruiken.
  4. Wanneer de AD-groep is gemaakt in uw bedrijfs-AD, voert u de volgende stappen uit:
    1. Maak een overeenkomstige SSO-groep aan in IAM Identity Center.
    2. Koppel de SSO-groep aan het Studio-domein met behulp van de SageMaker-console.
  5. Wanneer een AD-gebruiker wordt gemaakt in uw bedrijfs-AD, wordt een overeenkomstige SSO-gebruiker gemaakt in IAM Identity Center.
  6. Wanneer de AD-gebruiker is toegewezen aan een AD-groep, wordt een IAM Identity Center API (Groepslidmaatschap maken) wordt aangeroepen en SSO-groepslidmaatschap wordt gemaakt.
  7. De voorgaande gebeurtenis is aangemeld AWS CloudTrail met de naam AddMemberToGroup.
  8. An Amazon EventBridge regel luistert naar CloudTrail-gebeurtenissen en komt overeen met de AddMemberToGroup regel patroon.
  9. De EventBridge-regel activeert het doel AWS Lambda functie.
  10. Deze Lambda-functie roept IAM Identity Center API's terug, haalt de SSO-gebruikers- en groepsinformatie op en voert de volgende stappen uit om het Studio-gebruikersprofiel te maken (CreëerGebruikersprofiel) voor de SSO-gebruiker:
    1. Zoek de DynamoDB-tabel op om de IAM-rol op te halen die overeenkomt met de AD-groep.
    2. Maak een gebruikersprofiel aan met de SSO-gebruiker en de IAM-rol verkregen uit de opzoektabel.
    3. De SSO-gebruiker krijgt toegang tot Studio.
  11. De SSO-gebruiker wordt via de Studio-domein-URL omgeleid naar de Studio-IDE.

Merk op dat op het moment van schrijven stap 4b (de SSO-groep koppelen aan het Studio-domein) handmatig moet worden uitgevoerd door een beheerder die de SageMaker-console gebruikt op het SageMaker-domeinniveau.

Stel een Lambda-functie in om de gebruikersprofielen aan te maken

De oplossing gebruikt een Lambda-functie om de Studio-gebruikersprofielen aan te maken. We bieden de volgende Lambda-voorbeeldfunctie die u kunt kopiëren en wijzigen om te voldoen aan uw behoeften voor het automatiseren van het maken van het Studio-gebruikersprofiel. Deze functie voert de volgende acties uit:

  1. Ontvang de CloudTrail AddMemberToGroup evenement van EventBridge.
  2. Haal de studio op DOMAIN_ID van de omgevingsvariabele (u kunt ook de domein-ID hard coderen of ook een DynamoDB-tabel gebruiken als u meerdere domeinen heeft).
  3. Lees uit een dummy-opmaaktabel om AD-gebruikers aan uitvoeringsrollen te koppelen. U kunt dit wijzigen om op te halen uit de DynamoDB-tabel als u een tabelgestuurde aanpak gebruikt. Als u DynamoDB gebruikt, heeft de uitvoeringsrol van uw Lambda-functie ook machtigingen nodig om uit de tabel te lezen.
  4. Haal de SSO-gebruiker en AD-groepslidmaatschapsinformatie op uit IAM Identity Center, op basis van de CloudTrail-gebeurtenisgegevens.
  5. Maak een Studio-gebruikersprofiel aan voor de SSO-gebruiker, met de SSO-gegevens en de bijbehorende uitvoeringsrol.
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) }

Merk op dat de Lambda-uitvoeringsrol standaard geen toegang heeft om gebruikersprofielen aan te maken of SSO-gebruikers weer te geven. Nadat u de Lambda-functie hebt gemaakt, gaat u naar de uitvoeringsrol van de functie op IAM en voegt u het volgende beleid toe als een inline beleid nadat u naar behoefte hebt gekeken op basis van de vereisten van uw organisatie.

{ "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>" ] } ]
}

Stel de EventBridge-regel in voor het CloudTrail-evenement

EventBridge is een serverloze gebeurtenisbusservice die u kunt gebruiken om uw toepassingen te verbinden met gegevens uit verschillende bronnen. In deze oplossing creëren we een op regels gebaseerde trigger: EventBridge luistert naar gebeurtenissen en matcht met het opgegeven patroon en activeert een Lambda-functie als de patroonovereenkomst succesvol is. Zoals uitgelegd in het oplossingsoverzicht, luisteren we naar de AddMemberToGroup evenement. Voer de volgende stappen uit om het in te stellen:

  1. Kies op de EventBridge-console Reglement in het navigatievenster.
  2. Kies Creëer regel.
  3. Geef een regelnaam op, bijvoorbeeld AddUserToADGroup.
  4. Voer optioneel een beschrijving in.
  5. kies verzuim voor de evenementenbus.
  6. Onder Regeltype, kiezen Regel met een gebeurtenispatroon, kies dan Volgende.
  7. Op de Bouw gebeurtenispatroon op pagina, kies Event bron as AWS-evenementen of EventBridge-partnerevenementen.
  8. Onder Gebeurtenis patroon, kies de Aangepaste patronen (JSON-editor) tab en voer het volgende patroon in:
    { "source": ["aws.sso-directory"], "detail-type": ["AWS API Call via CloudTrail"], "detail": { "eventSource": ["sso-directory.amazonaws.com"], "eventName": ["AddMemberToGroup"] }
    }

  9. Kies Volgende.
  10. Op de Selecteer doel(en) pagina, kies de AWS-service voor het doeltype, de Lambda-functie als doel en de functie die u eerder hebt gemaakt, en kies vervolgens Volgende.
  11. Kies Volgende op de Labels configureren pagina, kies dan Creëer regel op de Bekijk en creëer pagina.

Nadat je de Lambda-functie en de EventBridge-regel hebt ingesteld, kun je deze oplossing uitproberen. Om dit te doen, opent u uw IdP en voegt u een gebruiker toe aan een van de AD-groepen met de toegewezen Studio-uitvoeringsrol. Nadat u de gebruiker hebt toegevoegd, kunt u de Lambda-functielogboeken verifiëren om de gebeurtenis te inspecteren en ook zien dat de Studio-gebruiker automatisch is ingericht. Daarnaast kunt u gebruik maken van de BeschrijvingUserProfile API-aanroep om te controleren of de gebruiker is gemaakt met de juiste machtigingen.

Ondersteuning van meerdere Studio-accounts

Om meerdere Studio-accounts met de voorgaande architectuur te ondersteunen, raden we de volgende wijzigingen aan:

  1. Stel een AD-groep in die is toegewezen aan elk Studio-accountniveau.
  2. Stel een IAM-rol op groepsniveau in voor elk Studio-account.
  3. Stel de groep in of leid deze af naar IAM-roltoewijzing.
  4. Stel een Lambda-functie in om uit te voeren rolaanname voor meerdere accounts, op basis van de IAM-roltoewijzing ARN en het aangemaakte gebruikersprofiel.

Gebruikers uitschrijven

Wanneer een gebruiker uit zijn AD-groep wordt verwijderd, moet u ook zijn toegang tot het Studio-domein verwijderen. Wanneer een gebruiker met SSO wordt verwijderd, wordt de gebruiker automatisch uitgeschakeld in IAM Identity Center als de AD naar IAM Identity Center-synchronisatie aanwezig is, en wordt de toegang tot de Studio-toepassing onmiddellijk ingetrokken.

Het gebruikersprofiel op Studio blijft echter bestaan. U kunt een vergelijkbare workflow toevoegen met CloudTrail en een Lambda-functie om het gebruikersprofiel uit Studio te verwijderen. De EventBridge-trigger moet nu luisteren naar de Groepslidmaatschap verwijderen evenement. Voer in de Lambda-functie de volgende stappen uit:

  1. Haal de gebruikersprofielnaam op uit de gebruikers- en groeps-ID.
  2. Maak een lijst van alle actieve apps voor het gebruikersprofiel met behulp van de LijstApps API-aanroep, filteren op de UserProfileNameEquals parameter. Zorg ervoor dat u het gepagineerde antwoord controleert om alle apps voor de gebruiker weer te geven.
  3. Verwijder alle actieve apps voor de gebruiker en wacht tot alle apps zijn verwijderd. U kunt de BeschrijvingApp API om de status van de app te bekijken.
  4. Wanneer alle apps in een Verwijderde staat (of Mislukt), verwijder het gebruikersprofiel.

Met deze oplossing kunnen ML-platformbeheerders groepslidmaatschappen op één centrale locatie onderhouden en het beheer van Studio-gebruikersprofielen automatiseren via EventBridge- en Lambda-functies.

De volgende code toont een voorbeeld van een CloudTrail-gebeurtenis:

"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" }
}

De volgende code toont een voorbeeld van een API-verzoek van een Studio-gebruikersprofiel:

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

Conclusie

In dit bericht hebben we besproken hoe beheerders Studio-onboarding kunnen schalen voor honderden gebruikers op basis van hun AD-groepslidmaatschap. We hebben een end-to-end-oplossingsarchitectuur gedemonstreerd die organisaties kunnen gebruiken om hun onboardingproces te automatiseren en te schalen om te voldoen aan hun behoeften op het gebied van flexibiliteit, beveiliging en naleving. Als je op zoek bent naar een schaalbare oplossing om de onboarding van je gebruikers te automatiseren, probeer dan deze oplossing en laat hieronder je feedback achter! Zie voor meer informatie over onboarding naar Studio Aan boord van Amazon SageMaker Domain.


Over de auteurs

Ram Vital is een ML Specialist Solutions Architect bij AWS. Hij heeft meer dan 20 jaar ervaring met het ontwerpen en bouwen van gedistribueerde, hybride en cloudapplicaties. Hij is gepassioneerd door het bouwen van veilige en schaalbare AI/ML- en big data-oplossingen om zakelijke klanten te helpen met hun cloudadoptie en -optimalisatietraject om hun bedrijfsresultaten te verbeteren. In zijn vrije tijd rijdt hij op zijn motor en wandelt hij met zijn 2-jarige schaap-een-doodle!

Durga Sury is een ML Solutions Architect in het Amazon SageMaker Service SA-team. Ze is gepassioneerd om machine learning voor iedereen toegankelijk te maken. In haar 4 jaar bij AWS heeft ze geholpen bij het opzetten van AI/ML-platforms voor zakelijke klanten. Als ze niet aan het werk is, houdt ze van motorritten, mysterieromans en wandelen met haar 5-jarige husky.

spot_img

Laatste intelligentie

spot_img