Appendice - SageMaker Best practice per l'amministrazione di Studio

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Appendice

Confronto tra più locazioni

Tabella 2 — Confronto tra più locazioni

Multidominio

Account multiplo

Controllo degli accessi basato sugli attributi (ABAC) all'interno di un singolo dominio

L'isolamento delle risorse si ottiene utilizzando i tag. SageMaker Studio etichetta automaticamente tutte le risorse con l'ARN del dominio e l'ARN del profilo utente/spazio.

Ogni inquilino ha il proprio account, quindi c'è un isolamento assoluto delle risorse.

L'isolamento delle risorse si ottiene utilizzando i tag. Gli utenti devono gestire l'etichettatura delle risorse create per ABAC.

Le API degli elenchi non possono essere limitate dai tag. Il filtraggio delle risorse tramite interfaccia utente viene eseguito sugli spazi condivisi, tuttavia, le chiamate API List effettuate tramite AWS CLI o l'SDK Boto3 elencheranno le risorse in tutta la regione.

È anche possibile l'isolamento delle API di List, poiché gli inquilini si trovano nei loro account dedicati.

Le API degli elenchi non possono essere limitate dai tag. Elenca le chiamate API effettuate tramite AWS CLI o l'SDK Boto3 elencherà le risorse in tutta la regione.

SageMaker I costi di elaborazione e archiviazione di Studio per tenant possono essere facilmente monitorati utilizzando Domain ARN come tag di allocazione dei costi.

SageMaker I costi di calcolo e archiviazione di Studio per tenant sono facili da monitorare con un account dedicato.

SageMaker I costi di elaborazione di Studio per tenant devono essere calcolati utilizzando tag personalizzati.

SageMaker I costi di storage di Studio non possono essere monitorati per dominio poiché tutti i tenant condividono lo stesso volume EFS.

Le quote di servizio sono impostate a livello di account, quindi un singolo tenant potrebbe comunque utilizzare tutte le risorse.

Le quote di servizio possono essere impostate a livello di account per ogni tenant.

Le quote di servizio sono impostate a livello di account, in modo che un singolo tenant possa comunque utilizzare tutte le risorse.

La scalabilità a più tenant può essere ottenuta tramite Infrastructure as code (IaC) o Service Catalog.

La scalabilità a più tenant coinvolge Organizations e la vendita di più account.

La scalabilità richiede un ruolo specifico del tenant per ogni nuovo tenant e i profili utente devono essere etichettati manualmente con i nomi dei tenant.

La collaborazione tra gli utenti all'interno di un tenant è possibile tramite spazi condivisi.

La collaborazione tra utenti all'interno di un tenant è possibile tramite spazi condivisi.

Tutti gli inquilini avranno accesso allo stesso spazio condiviso per la collaborazione.

SageMaker Backup e ripristino del dominio Studio

In caso di eliminazione accidentale di EFS o quando è necessario ricreare un dominio a causa di modifiche alla rete o all'autenticazione, segui queste istruzioni.

Opzione 1: eseguire il backup da EFS esistente utilizzando EC2

SageMaker Backup del dominio Studio

  1. Elenca i profili utente e gli spazi in SageMaker Studio (CLI, SDK).

  2. Mappa i profili/gli spazi utente agli UID su EFS.

    1. Per ogni utente nell'elenco di utenti/spazi, descrivi il profilo/spazio utente (CLI, SDK).

    2. Mappa il profilo/spazio utente su. HomeEfsFileSystemUid

    3. Mappa il profilo utente per verificare UserSettings['ExecutionRole'] se gli utenti hanno ruoli di esecuzione distinti.

    4. Identifica il ruolo di esecuzione Space predefinito.

  3. Crea un nuovo dominio e specifica il ruolo di esecuzione Space predefinito.

  4. Crea profili e spazi utente.

    • Per ogni utente nell'elenco di utenti, crea un profilo utente (CLI, SDK) utilizzando la mappatura dei ruoli di esecuzione.

  5. Crea una mappatura per i nuovi EFS e UID.

    1. Per ogni utente nell'elenco di utenti, descrivi il profilo utente (CLI, SDK).

    2. Mappa il profilo utente su. HomeEfsFileSystemUid

  6. Facoltativamente, elimina tutte le app, i profili utente, gli spazi, quindi elimina il dominio.

Backup EFS

Per eseguire il backup di EFS, utilizzare le seguenti istruzioni:

  1. Avvia l'istanza EC2 e collega i gruppi di sicurezza in entrata/uscita del vecchio dominio SageMaker Studio alla nuova istanza EC2 (consenti il traffico NFS su TCP sulla porta 2049). Consulta Connect SageMaker Studio Notebooks in un VPC a risorse esterne.

  2. Monta il volume SageMaker Studio EFS sulla nuova istanza EC2. Fare riferimento a Montaggio dei file system EFS.

  3. Copia i file nell'archivio locale EBS: >sudo cp -rp /efs /studio-backup:

    1. Collega i nuovi gruppi di sicurezza del dominio all'istanza EC2.

    2. Monta il nuovo volume EFS sull'istanza EC2.

    3. Copia i file nel nuovo volume EFS.

    4. Per ogni utente nella raccolta dell'utente:

      1. Crea la directory:mkdir new_uid.

      2. Copia i file dalla vecchia directory UID alla nuova directory UID.

      3. Cambia la proprietà di tutti i file: chown <new_UID> per tutti i file.

Opzione 2: backup da EFS esistente utilizzando S3 e la configurazione del ciclo di vita

  1. Fai riferimento a Migrare il tuo lavoro su un'istanza di SageMaker notebook Amazon con Amazon Linux 2.

  2. Crea un bucket S3 per il backup (ad esempio. >studio-backup

  3. Elenca tutti i profili utente con ruoli di esecuzione.

  4. Nel dominio SageMaker Studio corrente, imposta uno script LCC predefinito a livello di dominio.

    • Nella scheda LCC, copia tutto nel /home/sagemaker-user prefisso del profilo utente in S3 (ad esempio,). s3://studio-backup/studio-user1

  5. Riavvia tutte le app predefinite di Jupyter Server (per eseguire la scheda LCC).

  6. Elimina tutte le app, i profili utente e i domini.

  7. Crea un nuovo dominio SageMaker Studio.

  8. Crea nuovi profili utente dall'elenco dei profili utente e dei ruoli di esecuzione.

  9. Configura un LCC a livello di dominio:

    • Nella scheda LCC, copia tutto ciò che è presente nel prefisso del profilo utente in S3 in /home/sagemaker-user

  10. Crea app Jupyter Server predefinite per tutti gli utenti con la configurazione LCC (CLI, SDK).

SageMaker Accesso allo studio tramite asserzione SAML

Configurazione della soluzione:

  1. Crea un'applicazione SAML nel tuo IdP esterno.

  2. Configura l'IdP esterno come provider di identità in IAM.

  3. Crea una funzione SAMLValidator Lambda a cui l'IdP può accedere (tramite un URL di funzione o un API Gateway).

  4. Crea una funzione GeneratePresignedUrl Lambda e un API Gateway per accedere alla funzione.

  5. Crea un ruolo IAM che gli utenti possano assumere per richiamare l'API Gateway. Questo ruolo deve essere passato nell'asserzione SAML come attributo nel seguente formato:

    • Nome dell'attributo: https://aws.amazon.com/SAML/Attributes/Role

    • Valore dell'attributo:<IdentityProviderARN>, <RoleARN>

  6. Aggiorna l'endpoint SAML Assertion Consumer Service (ACS) all'URL di richiamo. SAMLValidator

Codice di esempio di validatore SAML:

import requests import os import boto3 from urllib.parse import urlparse, parse_qs import base64 import requests from aws_requests_auth.aws_auth import AWSRequestsAuth import json # Config for calling AssumeRoleWithSAML idp_arn = "arn:aws:iam::0123456789:saml-provider/MyIdentityProvider" api_gw_role_arn = 'arn:aws:iam:: 0123456789:role/APIGWAccessRole' studio_api_url = "abcdef.execute-api.us-east-1.amazonaws.com" studio_api_gw_path = "https://" + studio_api_url + "/Prod " # Every customer will need to get SAML Response from the POST call def get_saml_response(event): saml_response_uri = base64.b64decode(event['body']).decode('ascii') request_body = parse_qs(saml_response_uri) print(f"b64 saml response: {request_body['SAMLResponse'][0]}") return request_body['SAMLResponse'][0] def lambda_handler(event, context): sts = boto3.client('sts') # get temporary credentials response = sts.assume_role_with_saml( RoleArn=api_gw_role_arn, PrincipalArn=durga_idp_arn, SAMLAssertion=get_saml_response(event) ) auth = AWSRequestsAuth(aws_access_key=response['Credentials']['AccessKeyId'], aws_secret_access_key=response['Credentials']['SecretAccessKey'], aws_host=studio_api_url, aws_region='us-west-2', aws_service='execute-api', aws_token=response['Credentials']['SessionToken']) presigned_response = requests.post( studio_api_gw_path, data=saml_response_data, auth=auth) return presigned_response