Sessões interativas com o IAM - AWS Glue

Sessões interativas com o IAM

Essas seções descrevem as considerações de segurança para sessões interativas do AWS Glue.

Entidades principais do IAM usadas com sessões interativas

Você usa duas entidades principais do IAM com sessões interativas do AWS Glue

  • Client principal (Entidade principal do cliente): a entidade principal do cliente (um usuário ou perfil) autoriza operações de API para sessões interativas de um cliente do AWS Glue configurado com as credenciais baseadas na identidade da entidade principal. Por exemplo, poderia ser um perfil do IAM que você normalmente usa para acessar o console do AWS Glue. Também poderia ser um perfil atribuído a um usuário do IAM cujas credenciais são usadas para a AWS Command Line Interface ou um cliente do AWS Glue usado pelo kernel de sessões interativas do Jupyter.

  • Perfil de runtime: o perfil de runtime é um perfil do IAM que a entidade principal do cliente repassa para as operações de API de sessões interativas. O AWS Glue usa esse perfil para executar instruções na sessão. Por exemplo, essa função pode ser a usada para execução de trabalhos de ETL do AWS Glue.

    Para ter mais informações, consulte Configuração de uma função do runtime.

Configuração de uma entidade principal do cliente

Você deve anexar uma política de identidade à entidade principal do cliente para permitir que ela chame a API de sessões interativas. Esse perfil deve ter acesso de iam:PassRole ao perfil de execução que você repassaria para a API de sessões interativas, como CreateSession. Por exemplo, é possível anexar a política gerenciada AWSGlueConsoleFullAccess a um perfil do IAM, a qual permite que todos os usuários do IAM na conta com a política anexada acessem todas as sessões criadas nessa conta (por exemplo, a instrução de runtime ou a instrução de cancelamento).

Se você quiser proteger a sessão e torná-la privada apenas para certos perfis do IAM, como os associados ao usuário que criou a sessão, é possível usar o controle de autorização baseado em tag de sessão interativa do AWS Glue, denominado TagOnCreate. Para obter mais informações, consulte Tornar sua sessão privada com TagOnCreate sobre como uma política gerenciada com escopo reduzido e baseada em etiquetas de proprietário pode tornar sua sessão privada com TagOnCreate. Para obter mais informações sobre políticas baseadas em identidade, consulte Políticas baseadas em identidade para o AWS Glue.

Configuração de uma função do runtime

Você deve passar uma função do IAM para a operação da API CreateSession para permitir que o AWS Glue assuma e execute instruções em sessões interativas. A função deve ter as mesmas permissões do IAM que as necessárias para execução de um trabalho típico do AWS Glue. Por exemplo, você pode criar uma função de serviço usando a política AWSGlueServiceRole que permite que o AWS Glue chame serviços da AWS em seu nome. Se você usar o console do AWS Glue, ele criará automaticamente uma função de serviço em seu nome ou usará uma existente. Você também pode criar sua própria função do IAM e anexar sua própria política do IAM para permitir permissões semelhantes.

Se você quiser proteger a sessão e torná-la privada apenas para o usuário do IAM que a criou, é possível usar o controle de autorização baseado em tag de sessão interativa do AWS Glue, denominado TagOnCreate. Para obter mais informações, consulte Tornar sua sessão privada com TagOnCreate sobre como uma política gerenciada com escopo reduzido e baseada em etiquetas de proprietário pode tornar sua sessão privada com TagOnCreate. Para obter mais informações sobre políticas baseadas em identidade, consulte Políticas baseadas em identidade para Glue AWS. Se você estiver criando a função de execução por conta própria diretamente do console do IAM e quiser tornar seu serviço privado com o recurso TagOnCreate, siga as etapas abaixo.

  1. Crie uma função do IAM com o tipo de função definido como Glue.

  2. Anexe a seguinte política gerenciada do AWS Glue: AwsGlueSessionUserRestrictedServiceRole

  3. Adicione o prefixo do nome da política AwsGlueSessionUserRestrictedServiceRole ao nome da função. Por exemplo, é possível criar uma função com o nome AwsGlueSessionUserRestrictedServiceRole-myrole e anexar a política gerenciada AwsGlueSessionUserRestrictedServiceRole do AWS Glue.

  4. Anexe uma política de confiança como a seguinte para permitir que o AWS Glue assuma a função:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }

Para um kernel do Jupyter de sessões interativas, você pode especificar a chave iam_role em seu perfil da AWS Command Line Interface. Para obter mais informações, consulte Configurar sessões com ~/.aws/config. Se você estiver interagindo com sessões interativas usando um bloco de anotações do AWS Glue, poderá passar o perfil de execução no magic %iam_role, na primeira célula que executar.

Tornar sua sessão privada com TagOnCreate

As sessões interativas do AWS Glue são compatíveis com marcação e Tag Based Authorization (TBAC – Autorização baseada em etiquetas) para sessões interativas como um recurso nomeado. Além da TBAC usando as APIs TagResource e UntagResource, as sessões interativas do AWS Glue são compatíveis com o recurso TagOnCreate para “etiquetar” uma sessão com uma determinada etiqueta somente durante a criação da sessão com a operação CreateSession. Isso também significa que essas etiquetas serão removidas com DeleteSession, também conhecido por UntagOnDelete.

O recurso TagOnCreate oferece um poderoso mecanismo de segurança para tornar sua sessão privada para o criador da sessão. Por exemplo, você pode anexar uma política do IAM com a RequestTag “owner“ e o valor de ${aws:userId} a uma entidade principal de cliente (por exemplo, um usuário do IAM) para só permitir a criação de uma sessão se uma tag “owner” com um valor correspondente de userId dos chamadores for fornecida como a tag userId na solicitação CreateSession. Essa política permite que as sessões interativas do AWS Glue criem um recurso de sessão e marquem a sessão com a etiqueta userId somente durante o tempo de criação da sessão. Além disso, é possível reduzir o escopo do acesso (por exemplo, execução de instruções) à sessão somente ao criador (também conhecido como etiqueta de proprietário com o valor ${aws:userId}) da sessão anexando uma política do IAM com o ResourceTag “owner” ao perfil de execução que você transmitiu durante CreateSession.

A fim de facilitar o uso do recurso TagOnCreate para tornar uma sessão privada para o criador da sessão, o AWS Glue fornece políticas gerenciadas e funções de serviço especializadas.

Se quiser criar uma sessão interativa do AWS Glue usando uma entidade principal AssumeRole do IAM (ou seja, usando uma credencial fornecida assumindo um perfil do IAM) e desejar tornar a sessão privada para o criador, use políticas semelhantes às AWSGlueSessionUserRestrictedNotebookPolicy e AWSGlueSessionUserRestrictedNotebookServiceRole respectivamente. Essas políticas permitem que o AWS Glue use ${aws:PrincipalTag} para extrair o valor da etiqueta do proprietário. Isso requer que você repasse uma etiqueta userId com o valor ${aws:userId} como SessionTag na credencial de assumir função. Consulte Etiquetas de sessão de ID. Se você estiver usando uma instância do Amazon EC2 com um perfil da instância que distribui a credencial e quiser criar uma sessão ou interagir com a sessão diretamente da instância do Amazon EC2, será necessário repassar uma etiqueta userId com o valor ${aws:userId} como SessionTag na credencial de assumir função.

Por exemplo, se você estiver criando uma sessão usando uma credencial de entidade principal AssumeRole do IAM e quiser tornar seu serviço privado com o recurso TagOnCreate, siga as etapas abaixo.

  1. Crie você mesmo uma função de runtime no console do IAM. Anexe a política gerenciada AwsGlueSessionUserRestrictedNotebookServiceRole do AWS Glue e adicione o prefixo do nome da política AwsGlueSessionUserRestrictedNotebookServiceRole ao nome da função. Por exemplo, você pode criar uma função com o nome AwsGlueSessionUserRestrictedNotebookServiceRole-myrole e anexar a política gerenciada AwsGlueSessionUserRestrictedNotebookServiceRole do AWS Glue.

  2. Anexe uma política de confiança como a exibida abaixo para permitir que o AWS Glue assuma a função acima.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }
  3. Crie outra função nomeada com um prefixo AwsGlueSessionUserRestrictedNotebookPolicy e anexe a política gerenciada AwsGlueSessionUserRestrictedNotebookPolicy do AWS Glue para tornar a sessão privada. Além da política gerenciada, anexe a seguinte política em linha para permitir iam:PassRole para a função que você criou na etapa 1.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/AwsGlueSessionUserRestrictedNotebookServiceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } } ] }
  4. Anexe uma política de confiança como a seguinte ao IAM acima para que o AWS Glue assuma a função.

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com" ] }, "Action": [ "sts:AssumeRole", "sts:TagSession" ] }] }
    nota

    Opcionalmente, você pode usar uma só função (p. ex., função de caderno) e anexar ambas as políticas gerenciadas AwsGlueSessionUserRestrictedNotebookServiceRole e AwsGlueSessionUserRestrictedNotebookPolicy vistas acima. Anexe também a política em linha adicional para permitir iam:passrole da sua função para o AWS Glue. Por fim, anexe a política de confiança acima para permitir sts:AssumeRole e sts:TagSession.

AWSGlueSessionUserRestrictedNotebookPolicy

A política WSGlueSessionUserRestrictedNotebookPolicy só fornecerá acesso para criar uma sessão interativa do AWS Glue no caderno se houver uma chave de tag "owner" e um valor que corresponda ao ID de usuário da AWS da entidade principal (usuário ou perfil). Para mais informações, consulte Onde você pode usar variáveis de política. Essa política é anexada à entidade principal (usuário ou perfil) que cria cadernos de sessões interativas do AWS Glue no AWS Glue Studio. Essa política também permite acesso suficiente ao bloco de anotações do AWS Glue Studio para interagir com os recursos da sessão interativa do AWS Glue Studio que são criados com o valor da etiqueta “owner” correspondente ao ID de usuário da AWS da entidade principal. Essa política nega permissão para alterar ou remover etiquetas “owner” de um recurso de sessão do AWS Glue após a criação da sessão.

AWSGlueSessionUserRestrictedNotebookServiceRole

AWSGlueSessionUserRestrictedNotebookServiceRole fornece acesso suficiente ao caderno do AWS Glue Studio para interagir com os recursos da sessão interativa do AWS Glue que forem criados com a tag "owner" e o valor correspondente ao ID de usuário da AWS da entidade principal (usuário ou perfil) do criador do caderno. Para mais informações, consulte Onde você pode usar variáveis de política. Essa política de função de serviço é anexada à função que é repassada como mágica para um caderno ou repassada como função de execução para a API CreateSession. Essa política também permite criar uma sessão interativa do AWS Glue com base em um bloco de anotações exclusivamente mediante uma chave de etiqueta “owner” e valor correspondente ao ID de usuário da AWS da entidade principal. Essa política nega permissão para alterar ou remover etiquetas “owner” de um recurso de sessão do AWS Glue após a criação da sessão. Essa política também inclui permissões para gravação e leitura de buckets do Amazon S3, gravação de logs do CloudWatch, criação e exclusão de tags para recursos do Amazon EC2 usados pelo AWS Glue.

Tornar sua sessão privada com políticas de usuário

Você pode anexar a política AWSGlueSessionUserRestrictedPolicy aos perfis do IAM anexados a cada um dos usuários da sua conta para impedir que eles criem uma sessão apenas com uma tag "owner" com um valor correspondente ao seu próprio ${aws:userId}. Em vez de usar o AWSGlueSessionUserRestrictedNotebookPolicy e AWSGlueSessionUserRestrictedNotebookServiceRole, você precisa usar políticas semelhantes às políticas AWSGlueSessionUserRestrictedPolicy e AWSGlueSessionUserRestrictedServiceRole, respectivamente. Para mais informações, consulte Usar políticas baseadas em identidade. Essa política limita o escopo do acesso a uma sessão apenas ao criador, a ${aws:userId} do usuário que criou a sessão com a tag "owner" com seu próprio ${aws:userId}. Se você mesmo tiver criado o perfil de execução usando o console do IAM seguindo as etapas em Configuração de uma função do runtime, então, além de anexar a política gerenciada AwsGlueSessionUserRestrictedPolicy, anexe também a política em linha a seguir para cada um dos usuários da sua conta para permitir iam:PassRole para o perfil de execução que você criou anteriormente.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::*:role/AwsGlueSessionUserRestrictedServiceRole*" ], "Condition": { "StringLike": { "iam:PassedToService": [ "glue.amazonaws.com" ] } } }] }

AWSGlueSessionUserRestrictedPolicy

A AWSGlueSessionUserRestrictedPolicy fornece acesso para criar uma sessão interativa do AWS Glue usando a API CreateSession somente mediante o fornecimento de uma chave de tag "owner" e valor correspondente ao ID de usuário da AWS. Essa política de identidade é anexada ao usuário do IAM que invoca a API CreateSession. Essa política também permite interagir com os recursos da sessão interativa do AWS Glue que foram criados com a etiqueta de “owner” (proprietário) e valor correspondente aos seus IDs de usuário da AWS. Essa política nega permissão para alterar ou remover etiquetas “owner” de um recurso de sessão do AWS Glue após a criação da sessão.

AWSGlueSessionUserRestrictedServiceRole

AWSGlueSessionUserRestrictedServiceRole fornece acesso total a todos os recursos do AWS Glue, com exceção das sessões e permite que os usuários criem e usem somente as sessões interativas associadas ao usuário. Esta política também inclui outras permissões necessárias pelo AWS Glue para gerenciar recursos do Glue em outros serviços da AWS. A política também permite adicionar tags aos recursos do AWS Glue em outros serviços da AWS.

Considerações sobre políticas do IAM

Sessões interativas são recursos do IAM no AWS Glue. Como elas são recursos do IAM, o acesso e a interação a uma sessão são regidos pelas políticas do IAM. Com base nas políticas do IAM anexadas a uma entidade principal do cliente ou função de execução configurada por um administrador, uma entidade principal do cliente (usuário ou função) poderá criar novas sessões e interagir com suas próprias sessões e outras sessões.

Se um administrador anexou uma política do IAM, como AWSGlueConsoleFullAccess ou AWSGlueServiceRole, que permita acesso a todos os recursos do AWS Glue nessa conta, as entidades principais clientes poderão colaborar entre si. Por exemplo, se as políticas permitirem, um usuário do IAM poderá interagir com as sessões criadas por outros usuários.

Se você quiser configurar uma política ajustada às suas necessidades específicas, consulte a documentação do IAM sobre configuração de recursos para uma política. Por exemplo, para isolar as sessões que pertencem a um usuário, você pode usar o atributo TagOnCreate que é compatível com as sessões interativas do AWS Glue. Consulte Tornar sua sessão privada com TagOnCreate .

As sessões interativas são compatíveis com a limitação de criação de sessões com base em determinadas condições da VPC. Consulte Controlar políticas que controlam configurações usando chaves de condição.