O blog da AWS
Configurando o Amazon SageMaker Studio para equipes e grupos com isolamento completo de recursos
Por Vikrant Kahlir, Rakesh Ramadas e Rama Thamman
12 de setembro de 2022: Este blogpost foi atualizado para refletir o novo nome do AWS Single Sign-On (SSO) – AWS IAM Identity Center. Leia mais sobre a mudança de nome aqui.
O Amazon SageMaker é um serviço totalmente gerenciado que oferece a cada desenvolvedor de aprendizado de máquina (ML) e cientista de dados a capacidade de criar, treinar e implantar modelos de ML rapidamente. O Amazon SageMaker Studio é um ambiente de desenvolvimento integrado (IDE) baseado na web para ML que permite criar, treinar, depurar, implantar e monitorar seus modelos de ML. O Amazon SageMaker Studio fornece todas as ferramentas necessárias para levar seus modelos da experimentação à produção e, ao mesmo tempo, aumentar sua produtividade. Você pode escrever código, rastrear experimentos, visualizar dados e executar depuração e monitoramento em uma única interface visual integrada.
Esta publicação descreve como configurar o controle de acesso para equipes ou grupos no Amazon SageMaker Studio usando o controle de acesso baseado em atributos (ABAC). O ABAC é uma abordagem poderosa que pode ser utilizada para configurar o Studio para que diferentes equipes de ML e ciência de dados tenham o isolamento completo dos recursos da equipe.
Fornecemos orientações sobre como configurar o acesso do Amazon SageMaker Studio para métodos de autenticação AWS Identity and Access Management (IAM) e AWS IAM Identity Center (sucessor do AWS Single Sign-On). Esta publicação ajuda você a configurar políticas do IAM para usuários e funções usando principais ABAC. Para demonstrar a configuração, configuramos duas equipes como mostrado no diagrama a seguir e mostramos dois casos de uso:
- Caso de uso 1 — Somente o usuário A1 pode acessar seu ambiente de estúdio; O usuário A2 não pode acessar o ambiente do usuário A1 e vice-versa
- Caso de uso 2 — Os usuários da equipe B não podem acessar artefatos (experimentos, etc.) criados por membros da equipe A
Você pode configurar políticas de acordo com suas necessidades. Você pode até incluir uma tag de projeto caso queira restringir ainda mais o acesso do usuário por projetos dentro de uma equipe. A abordagem é muito flexível e escalável.
Autenticação
O Amazon SageMaker Studio oferece suporte aos seguintes métodos de autenticação para a integração de usuários. Ao configurar o Studio, você pode escolher um método de autenticação usado para todos os seus usuários:
- IAM — Inclui o seguinte:
- Usuários do IAM — Usuários gerenciados no IAM
- Federação de contas da AWS — Usuários gerenciados em um provedor de identidade externo (IdP)
- AWS IAM Identity Center (sucessor do AWS Single Sign-On) — Usuários gerenciados em um IdP externo federado usando o AWS IAM Identity Center (sucessor do AWS Single Sign-On)
Identidades de usuário de ciência de dados
A tabela a seguir descreve duas identidades diferentes que interagem com os recursos do Amazon SageMaker Studio e o nível de acesso que precisam para cumprir suas funções. Usamos essa tabela como um requisito de alto nível para modelar funções e políticas do IAM para estabelecer controles desejados com base na propriedade de recursos no nível da equipe e do usuário.
Identidades do usuário | Permissões |
Usuário Administrador |
Crie, modifique, exclua qualquer recurso do IAM. Crie perfis de usuário do Amazon SageMaker Studio com uma tag. Faça o acesso no console do Amazon SageMaker. Leia e descreva os recursos do Amazon SageMaker. |
Cientistas ou desenvolvedores de dados |
Execute um IDE do Amazon SageMaker Studio atribuído a um usuário específico do IAM ou do AWS IAM Identity Center (sucessor do AWS Single Sign-On). Crie recursos do Amazon SageMaker com as tags necessárias. Para esta publicação, usamos a tag de equipe. Atualize, exclua e execute recursos criados com uma tag específica. Faça o acesso no console do Amazon SageMaker se for um usuário do IAM. Leia e descreva os recursos do Amazon SageMaker. |
Visão geral da solução
Usamos os requisitos anteriores para modelar funções e permissões necessárias para estabelecer controles. O diagrama de fluxo a seguir descreve as diferentes etapas de configuração:
Aplicando sua política ao usuário administrador
Você deve aplicar a seguinte política ao usuário administrador que cria perfis de usuário do Studio. Esta política requer que o administrator inclua a tag studiouserid
. Você pode usar um nome diferente para a tag, se necessário. O console do Studio não permite que você adicione tags ao criar perfis de usuário, portanto usamos a AWS Command Line Interface (AWS CLI).
Para usuários administrativos gerenciados no IAM, anexe a seguinte política ao usuário. Para usuários administrativos gerenciados em um IdP externo, adicione a seguinte política à regra que o usuário assume na federação. A política a seguir impõe a tag studiouserid para estar presente quando a ação sagemaker:CreateUserProfile
é chamada.
{ “Version”: “2012-10-17", “Statement”: [ { “Sid”: “CreatesAgeMakerStudiouserProfilePolicy”, “Effect”: “Allow”, “Action”: “sagemaker:CreateUserProfile”, “Resource”: “*”, “Condition”: { “ForAnyValue:StringEquals”: { “aws:TagKeys”: [ “studiouserid” ] } } } ] }
O AWS IAM Identity Center (sucessor do AWS Single Sign-On) não requer essa política; ele executa a verificação de identidade.
Atribuindo a política aos usuários do Studio
A política a seguir limita o acesso do Studio aos respectivos usuários exigindo que a tag de recurso corresponda ao nome de usuário da ação sagemaker:CreatePresignedDomainUrl
.
Quando um usuário tenta acessar a URL de inicialização do Amazon SageMaker Studio, essa verificação é executada.
Para usuários do IAM, anexe a seguinte política ao usuário. Use o nome de usuário para o valor da tag studiouserid
.
{ “Version”: “2012-10-17", “Statement”: [ { “Sid”: “AmazonSageMakerPresignedUrlPolicy”, “Effect”: “Allow”, “Action”: [ “sagemaker:CreatePresignedDomainUrl” ], “Resource”: “*”, “Condition”: { “StringEquals”: { “sagemaker:ResourceTag/studiouserid”: “$ {aws:username}” } } } ] }
Para a federação de contas da AWS, anexe a seguinte política à função que o usuário assume após a federação:
{ “Version”: “2012-10-17", “Statement”: [ { “Sid”: “AmazonSageMakerPresignedUrlPolicy”, “Effect”: “Allow”, “Action”: [ “sagemaker:CreatePresignedDomainUrl” ], “Resource”: “*”, “Condition”: { “StringEquals”: { “sagemaker:ResourceTag/studiouserid”: “$ {aws:PrincipalTag/studiouserid}” } } } ] }
Adicione a seguinte declaração a esta política na seção Relacionamento de Confiança. Esta instrução define a tag transitiva permitida.
“Statement”: [ { - - Existing statements }, { “Sid”: “IdentifyTransitiveTags”, “Effect”: “Allow”, “Principal”: { “Federated”: “arn:aws:iam::<account id>:saml-provider/ <identity provider>” }, “Action”: “sts:TagSession”, “Condition”: { “ForAllValues:StringEquals”: { “sts:TransitiveTagKeys”: [ “studiouserid” ] } } ]
Para usuários gerenciados no AWS IAM Identity Center (sucessor do AWS Single Sign-On), essa política não é necessária. O AWS IAM Identity Center (sucessor do AWS Single Sign-On) executa a verificação de identidade.
Criando as funções para as equipes
Para criar funções para suas equipes, você deve primeiro criar as políticas. Para simplificar, usamos as mesmas políticas para ambas as equipes. Na maioria dos casos, você só precisa de um conjunto de políticas para todas as equipes, mas você tem a flexibilidade de criar políticas diferentes para diferentes equipes. Na segunda etapa, você cria uma função para cada equipe, anexa as políticas e marca as funções com tags de equipe apropriadas.
Criando as políticas
Crie as seguintes políticas. Para esta publicação, dividimos as políticas em três para obter mais legibilidade, mas você pode criar as políticas de acordo com suas necessidades.
Política 1: acesso somente leitura do Amazon SageMaker
A política a seguir oferece privilégios para Listar e Descrever recursos do Amazon SageMaker. Você pode personalizar esta política de acordo com suas necessidades.
{ “Version”: “2012-10-17", “Statement”: [ { “Sid”: “AmazonSageMakerDescribeReadyOnlyPolicy”, “Effect”: “Allow”, “Action”: [ “sagemaker:Describe*”, “sagemaker:GetSearchSuggestions” ], “Resource”: “*” }, { “Sid”: “AmazonSageMakerListOnlyPolicy”, “Effect”: “Allow”, “Action”: [ “sagemaker:List*” ], “Resource”: “*” }, { “Sid”: “AmazonSageMakerUIandMetricsOnlyPolicy”, “Effect”: “Allow”, “Action”: [ “sagemaker: *App”, “sagemaker:Search”, “sagemaker:RenderUiTemplate”, “sagemaker:BatchGetMetrics” ], “Resource”: “*” }, { “Sid”: “AmazonSageMakerEC2ReadOnlyPolicy”, “Effect”: “Allow”, “Action”: [ “ec2:DescribeDhcpOptions”, “ec2:DescribeNetworkInterfaces”, “ec2:DescribeRouteTables”, “ec2:DescribeSecurityGroups”, “ec2:DescribeSubnets”, “ec2:DescribeVpcEndpoints”, “ec2:DescribeVpcs” ], “Resource”: “*” }, { “Sid”: “AmazonSageMakerIAMReadOnlyPolicy”, “Effect”: “Allow”, “Action”: [ “iam:ListRoles” ], “Resource”: “*” } ] }
Política 2: Acesso ao Amazon SageMaker para serviços de suporte
A política a seguir oferece privilégios para criar, ler, atualizar e excluir acesso ao Amazon Simple Storage Service (Amazon S3), Amazon Elastic Container Registry (Amazon ECR) e Amazon CloudWatch, além de acesso de leitura ao AWS Key Management Service (AWS KMS). Você pode personalizar esta política de acordo com suas necessidades.
{ “Version”: “2012-10-17", “Statement”: [ { “Sid”: “AmazonSageMakerCRUDAccessS3Policy”, “Effect”: “Allow”, “Action”: [ “s3:PutObject”, “s3:GetObject”, “s3:AbortMultipartUpload”, “s3:DeleteObject”, “s3:CreateBucket”, “s3:ListBucket”, “S3:PutBucketCORS”, “s3:ListAllMyBuckets”, “S3:GetBucketCORS”, “s3:GetBucketLocation” ], “Resource”: "<S3 BucketName>” }, { “Sid”: “AmazonSageMakerReadOnlyAccessKMSPolicy”, “Effect”: “Allow”, “Action”: [ “kms:DescribeKey”, “kms:ListAliases” ], “Resource”: “*” }, { “Sid”: “AmazonSageMakerCRUDAccessECRPolicy”, “Effect”: “Allow”, “Action”: [ “ecr:Set*”, “ecr:CompleteLayerUpload”, “ecr:Batch*”, “ecr:Upload*”, “ecr:InitiateLayerUpload”, “ecr:Put*”, “ecr:Describe*”, “ecr:CreateRepository”, “ecr:Get*”, “ecr:StartImageScan” ], “Resource”: “*” }, { “Sid”: “AmazonSageMakerCRUDAccessCloudWatchPolicy”, “Effect”: “Allow”, “Action”: [ “cloudwatch:Put*”, “cloudwatch:Get*”, “cloudwatch:List*”, “cloudwatch:DescribeAlarms”, “logs:Put*”, “logs:Get*”, “logs:List*”, “logs:CreateLogGroup”, “logs:CreateLogStream”, “logs:ListLogDeliveries”, “logs:Describe*”, “logs:CreateLogDelivery”, “logs:PutResourcePolicy”, “logs:UpdateLogDelivery” ], “Resource”: “*” } ] }
Política 3: Acesso ao desenvolvedor do Amazon SageMaker Studio
A política a seguir oferece privilégios para criar, atualizar e excluir recursos do Amazon SageMaker Studio.
Ele também impõe o requisito de tag de equipe durante a criação. Além disso, ele impõe ações de início, parada, atualização e exclusão em recursos restritos apenas aos respectivos membros da equipe.
A condição de validação da tag da equipe no código a seguir garante que o valor da tag de equipe corresponda à equipe principal. Consulte o código em negrito para mais detalhes.
{ “Version”: “2012-10-17", “Statement”: [ { “Sid”: “AmazonSageMakerStudioCreateApp”, “Effect”: “Allow”, “Action”: [ “sagemaker:CreateApp” ], “Resource”: “*” }, { “Sid”: “AmazonSageMakerStudioIAMPassRole”, “Effect”: “Allow”, “Action”: [ “iam:PassRole” ], “Resource”: “*” }, { “Sid”: “AmazonSageMakerInvokeEndPointRole”, “Effect”: “Allow”, “Action”: [ “sagemaker:InvokeEndPoint” ], “Resource”: “*” }, { “Sid”: “AmazonSageMakerAddTags”, “Effect”: “Allow”, “Action”: [ “sagemaker:AddTags” ], “Resource”: “*” }, { “Sid”: “AmazonSageMakerCreate”, “Effect”: “Allow”, “Action”: [ “sagemaker:Create*” ], “Resource”: “*”, “Condition”:{“ForAnyValue:StringEquals”:{“aws:TagKeys”:[“team”]}, “StringEqualsIfExists”: {“aws:RequestTag/team”: “${aws:PrincipalTag/team}”}} }, { “Sid”: “AmazonSageMakerUpdateDeleteExecutePolicy”, “Effect”: “Allow”, “Action”: [ “sagemaker:Delete*”, “sagemaker:Stop*”, “sagemaker:Update*”, “sagemaker:Start*”, “sagemaker:DisassociateTrialComponent”, “sagemaker:AssociateTrialComponent”, “sagemaker:BatchPutMetrics” ], “Resource”: “*”, “Condition”: {“StringEquals”:{“aws:PrincipalTag/team”: “${sagemaker:ResourceTag/team}”}} } ] }
Criando e configurando as funções
Agora você pode criar uma função para cada equipe com estas políticas. Marque as funções no console do IAM ou com o comando CLI. As etapas são as mesmas para todos os três tipos de autenticação. Por exemplo, marque a função da Equipe A com a tag key = team and value = “<Team Name>”
Criando o perfil de usuário do Amazon SageMaker Studio
Nesta etapa, adicionamos a tagstudiouserid
ao criar perfis de usuário do Studio. As etapas são ligeiramente diferentes para cada tipo de autenticação.
Usuários do IAM
Para usuários do IAM, você cria perfis de usuário do Studio para cada usuário incluindo a função criada para a equipe à qual o usuário pertence. O código a seguir é um exemplo de comando CLI. No momento em que esta publicação é escrita, a inclusão de uma tag ao criar um perfil de usuário está disponível somente por meio da AWS CLI.
aws sagemaker create-user-profile --domain-id <domain id> --user-profile-name <unique profile name> --tags Key=studiouserid,Value=<aws user name> --user-settings ExecutionRole=arn:aws:iam::<account id>:role/<Team Role Name>
Federação de contas da AWS
Para a federação de contas da AWS, você cria um atributo de usuário (studiouserid) em um IdP externo com um valor exclusivo para cada usuário. O código a seguir mostra como configurar o atributo no Okta:
O exemplo abaixo mostra como adicionar o atributo “studiouserid” no OKTA. Na tela SIGN ON METHODS da OKTA, configure os seguintes atributos SAML 2.0, conforme mostrado na imagem abaixo. Atributo 1: Nome: https://thinkwithwp.com/SAML/Attributes/PrincipalTag:studiouserid Valor: user.studiouserid Atributo 2: Nome: https://thinkwithwp.com/SAML/Attributes/TransitiveTagKeys Valor: {"studiouserid"}
A captura de tela a seguir mostra os atributos no console Okta.
Em seguida, crie o perfil de usuário usando o seguinte comando. Use o valor do atributo de usuário da etapa anterior para o valor da tag studiouserid
.
aws sagemaker create-user-profile --domain-id <domain id> --user-profile-name <unique profile name> --tags Key=studiouserid,Value=<user attribute value> --user-settings ExecutionRole=arn:aws:iam::<account id>:role/<Team Role Name>
AWS IAM Identity Center (sucessor do AWS Single Sign-On)
Para obter instruções sobre como atribuir usuários no AWS IAM Identity Center (sucessor do AWS Single Sign-On), consulte Integração do Amazon SageMaker Studio com o AWS SSO e o Okta Universal Directory.
Atualize o perfil de usuário do Studio para incluir a função de execução apropriada que foi criada para a equipe à qual o usuário pertence. Consulte o seguinte comando CLI:
aws sagemaker update-user-profile --domain-id <domain id> --user-profile-name <user profile name> --user-settings ExecutionRole=arn:aws:iam::<account id>:role/<Team Role Name> --region us-west-2
Validando que apenas os usuários atribuídos do Studio podem acessar seus perfis
Quando um usuário tenta acessar um perfil do Studio que não tenha valor de tag studiouserid
correspondente ao nome de usuário, ocorre um erro AccessDeniedException
. Você pode testar isto copiando o link do Launch Studio no console do Amazon SageMaker e acessando-o quando conectado como um usuário diferente. A captura de tela a seguir mostra a mensagem de erro.
Validando que apenas os respectivos membros da equipe podem acessar certos artefatos
Nesta etapa, mostramos como configurar o Studio para que os membros de uma determinada equipe não possam acessar artefatos criados por outra equipe.
No nosso caso de uso, um usuário da Equipe A cria um experimento e marca este experimento com a tag da equipe. Isso limita o acesso a este experimento apenas para usuários da Equipe A. Consulte o seguinte código:
import sys !{sys.executable} -m pip install sagemaker !{sys.executable} -m pip install sagemaker-experiments import time import sagemaker from smexperiments.experiment import Experiment demo_experiment = Experiment.create(experiment_name = "USERA1TEAMAEXPERIMENT1", description = "UserA1 experiment", tags = [{'Key': 'team', 'Value': 'TeamA'}]) Se um usuário que não está na Equipe A tentar excluir o experimento, o Studio nega a ação de exclusão. Consulte o seguinte código: #comando executado pela Equipe A na instancia do Studio import time from smexperiments.experiment import Experiment experiment_to_cleanup = Experiment.load(experiment_name="USERA1TEAMAEXPERIMENT1") experiment_to_cleanup.delete() [Client Error] An error occurred (AccessDeniedException) when calling the DeleteExperiment operation: User: arn:aws:sts:: :<AWS Account ID>::assumed-role/ SageMakerStudioDeveloperTeamBRole/SageMaker is not authorized to perform: sagemaker:DeleteExperiment on resource: arn:aws:sagemaker:us-east-1:<AWS Account ID>:experiment/usera1teamaexperiment1
Conclusão
Nesta publicação, demonstramos como isolar o acesso do Amazon SageMaker Studio usando a técnica ABAC. Apresentamos dois casos de uso: restringindo o acesso a um perfil do Studio apenas ao usuário atribuído (usando a tag studiouserid) e restringindo o acesso aos artefatos do Studio apenas para membros da equipe. Também mostramos como limitar o acesso a experimentos apenas aos membros da equipe usando a tag de equipe. Você pode personalizar ainda mais as políticas aplicando mais tags para criar controles hierárquicos mais complexos.
Experimente esta solução para isolar recursos por equipes ou grupos no Amazon SageMaker Studio. Para obter mais informações sobre como usar o ABAC como estratégia de autorização, consulte O que é o ABAC para a AWS?
Este artigo foi traduzido do Blog da AWS em Inglês.
Sobre os Autores
Vikrant Kahlir é arquiteto sênior de soluções na equipe de Arquitetura de Soluções. Ele trabalha com equipes de produtos e engenharia de clientes estratégicos da AWS para ajuda-los com soluções tecnológicas usando serviços da AWS para bancos de dados gerenciados, AI/ML, HPC, Computação Autônoma e IoT.
Rakesh Ramadas é arquiteto de soluções ISV na Amazon Web Services. Suas áreas de foco incluem AI/ML e Big Data.
Rama Thamman é Gerente de Desenvolvimento de Software com a equipe de Plataformas de IA, liderando a equipe de Migrações ML.
Revisor
Tiago Simão é Arquiteto de Soluções AWS Brasil.