Criar uma função IAM para a implementação do workspace

Este artigo descreve como:

  • Crie e configure uma IAM role entre account para implementação workspace do Databricks. Essa função dá ao Databricks acesso limitado à sua account da AWS para fins de criação e gerenciamento de recursos de computação e VPC.

  • Use o console de conta do Databricks para criar uma configuração de credencial que faça referência à IAM role.

Requisitos

Automatizar a criação de funções de IAM

Você pode automatizar a criação do IAM role usando uma das seguintes opções de automação:

Criação manual do IAM role

As passos a seguir se aplicam a uma implementação personalizada e workspace da AWS. Você só precisa seguir estes passos se estiver implementando um workspace usando a opção de configuração Custom AWS.

Etapa 1: criar uma função de IAM entre contas

  1. Obtenha sua ID account do Databricks. Consulte Localize o ID da sua conta.

  2. Faça login no console do AWS como um usuário com privilégios de administrador e acesse o console do IAM.

  3. Clique na guia Funções na barra lateral.

  4. Clique em Criar função.

    1. Em Selecionar tipo de entidade confiável, clique no bloco da conta da AWS .

    2. Marque a caixa de seleção Outra conta AWS.

    3. No campo account ID, digite Databricks account ID 414351767826. Esse não é o ID account que o senhor copiou do console Databricks account . Se o senhor estiver usando Databricks on AWS GovCloud use o endereço Databricks account ID 044793339203.

    4. Marque a caixa de seleção Exigir ID externa.

    5. No campo ID externo, digite o ID da sua conta Databricks, que foi copiado do console da conta Databricks.

    6. Clique no botão Avançar .

    7. Na página Adicionar permissões, clique no botão Avançar. Agora você deve estar na página Nome, revisar e criar.

    8. No campo Nome da função, insira um nome de papel.

    9. Clique em Criar papel. A lista de funções é exibida.

Etapa 2: Criar uma política de acesso

A política de acesso que você adiciona à função depende do tipo de implantação da Amazon VPC (Virtual Private cloud). Para obter informações sobre como Databricks usa cada permissão, consulte IAM permissions for Databricks-gerenciar VPCs. Use as instruções de política que descrevem sua implantação:

Opção 1: Política de implementação padrão

  1. Na seção Funções do console do IAM, clique no IAM role que você criou na Etapa 1.

  2. Clique no menu suspenso Adicionar permissões e selecione Criar política em linha.

  3. No editor de políticas, clique na guia JSON.

  4. Copie e cole a seguinte política de acesso:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1403287045000",
          "Effect": "Allow",
          "Action": [
            "ec2:AllocateAddress",
            "ec2:AssignPrivateIpAddresses",
            "ec2:AssociateDhcpOptions",
            "ec2:AssociateIamInstanceProfile",
            "ec2:AssociateRouteTable",
            "ec2:AttachInternetGateway",
            "ec2:AttachVolume",
            "ec2:AuthorizeSecurityGroupEgress",
            "ec2:AuthorizeSecurityGroupIngress",
            "ec2:CancelSpotInstanceRequests",
            "ec2:CreateDhcpOptions",
            "ec2:CreateFleet",
            "ec2:CreateInternetGateway",
            "ec2:CreateLaunchTemplate",
            "ec2:CreateLaunchTemplateVersion",
            "ec2:CreateNatGateway",
            "ec2:CreateRoute",
            "ec2:CreateRouteTable",
            "ec2:CreateSecurityGroup",
            "ec2:CreateSubnet",
            "ec2:CreateTags",
            "ec2:CreateVolume",
            "ec2:CreateVpc",
            "ec2:CreateVpcEndpoint",
            "ec2:DeleteDhcpOptions",
            "ec2:DeleteFleets",
            "ec2:DeleteInternetGateway",
            "ec2:DeleteLaunchTemplate",
            "ec2:DeleteLaunchTemplateVersions",
            "ec2:DeleteNatGateway",
            "ec2:DeleteRoute",
            "ec2:DeleteRouteTable",
            "ec2:DeleteSecurityGroup",
            "ec2:DeleteSubnet",
            "ec2:DeleteTags",
            "ec2:DeleteVolume",
            "ec2:DeleteVpc",
            "ec2:DeleteVpcEndpoints",
            "ec2:DescribeAvailabilityZones",
            "ec2:DescribeFleetHistory",
            "ec2:DescribeFleetInstances",
            "ec2:DescribeFleets",
            "ec2:DescribeIamInstanceProfileAssociations",
            "ec2:DescribeInstanceStatus",
            "ec2:DescribeInstances",
            "ec2:DescribeInternetGateways",
            "ec2:DescribeLaunchTemplates",
            "ec2:DescribeLaunchTemplateVersions",
            "ec2:DescribeNatGateways",
            "ec2:DescribePrefixLists",
            "ec2:DescribeReservedInstancesOfferings",
            "ec2:DescribeRouteTables",
            "ec2:DescribeSecurityGroups",
            "ec2:DescribeSpotInstanceRequests",
            "ec2:DescribeSpotPriceHistory",
            "ec2:DescribeSubnets",
            "ec2:DescribeVolumes",
            "ec2:DescribeVpcs",
            "ec2:DetachInternetGateway",
            "ec2:DisassociateIamInstanceProfile",
            "ec2:DisassociateRouteTable",
            "ec2:GetLaunchTemplateData",
            "ec2:GetSpotPlacementScores",
            "ec2:ModifyFleet",
            "ec2:ModifyLaunchTemplate",
            "ec2:ModifyVpcAttribute",
            "ec2:ReleaseAddress",
            "ec2:ReplaceIamInstanceProfileAssociation",
            "ec2:RequestSpotInstances",
            "ec2:RevokeSecurityGroupEgress",
            "ec2:RevokeSecurityGroupIngress",
            "ec2:RunInstances",
            "ec2:TerminateInstances"
          ],
          "Resource": [
            "*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "iam:CreateServiceLinkedRole",
            "iam:PutRolePolicy"
          ],
          "Resource": "arn:aws:iam::*:role/aws-service-role/spot.amazonaws.com/AWSServiceRoleForEC2Spot",
          "Condition": {
            "StringLike": {
              "iam:AWSServiceName": "spot.amazonaws.com"
            }
          }
        }
      ]
    }
    
  5. Clique em Revisar política.

  6. No campo Nome , insira um nome de política.

  7. Clique em Criar política.

  8. (Opcional) Se você usar Políticas de controle de serviço para negar determinadas ações no nível da conta AWS, certifique-se de que sts:AssumeRole seja permitido na lista de dados para que os Databricks possam assumir a função de conta cruzada.

  9. No resumo da função, copie o ARN da função a ser adicionada ao Databricks.

Opção 2: VPC gerenciado pelo cliente com política de restrições padrão

  1. Faça login no console do AWS como um usuário com privilégios de administrador e acesse o console do IAM.

  2. Clique na guia Funções na barra lateral.

  3. Na lista de funções, clique no IAM role entre contas que você criou na etapa 1.

  4. Clique no menu suspenso Adicionar permissões e selecione Criar política em linha.

  5. No editor de políticas, clique na guia JSON.

  6. Copie e cole a seguinte política de acesso.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1403287045000",
          "Effect": "Allow",
          "Action": [
            "ec2:AssociateIamInstanceProfile",
            "ec2:AttachVolume",
            "ec2:AuthorizeSecurityGroupEgress",
            "ec2:AuthorizeSecurityGroupIngress",
            "ec2:CancelSpotInstanceRequests",
            "ec2:CreateTags",
            "ec2:CreateVolume",
            "ec2:DeleteTags",
            "ec2:DeleteVolume",
            "ec2:DescribeAvailabilityZones",
            "ec2:DescribeIamInstanceProfileAssociations",
            "ec2:DescribeInstanceStatus",
            "ec2:DescribeInstances",
            "ec2:DescribeInternetGateways",
            "ec2:DescribeNatGateways",
            "ec2:DescribeNetworkAcls",
            "ec2:DescribePrefixLists",
            "ec2:DescribeReservedInstancesOfferings",
            "ec2:DescribeRouteTables",
            "ec2:DescribeSecurityGroups",
            "ec2:DescribeSpotInstanceRequests",
            "ec2:DescribeSpotPriceHistory",
            "ec2:DescribeSubnets",
            "ec2:DescribeVolumes",
            "ec2:DescribeVpcAttribute",
            "ec2:DescribeVpcs",
            "ec2:DetachVolume",
            "ec2:DisassociateIamInstanceProfile",
            "ec2:ReplaceIamInstanceProfileAssociation",
            "ec2:RequestSpotInstances",
            "ec2:RevokeSecurityGroupEgress",
            "ec2:RevokeSecurityGroupIngress",
            "ec2:RunInstances",
            "ec2:TerminateInstances",
            "ec2:DescribeFleetHistory",
            "ec2:ModifyFleet",
            "ec2:DeleteFleets",
            "ec2:DescribeFleetInstances",
            "ec2:DescribeFleets",
            "ec2:CreateFleet",
            "ec2:DeleteLaunchTemplate",
            "ec2:GetLaunchTemplateData",
            "ec2:CreateLaunchTemplate",
            "ec2:DescribeLaunchTemplates",
            "ec2:DescribeLaunchTemplateVersions",
            "ec2:ModifyLaunchTemplate",
            "ec2:DeleteLaunchTemplateVersions",
            "ec2:CreateLaunchTemplateVersion",
            "ec2:AssignPrivateIpAddresses",
            "ec2:GetSpotPlacementScores"
          ],
          "Resource": [
            "*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
            "iam:CreateServiceLinkedRole",
            "iam:PutRolePolicy"
          ],
          "Resource": "arn:aws:iam::*:role/aws-service-role/spot.amazonaws.com/AWSServiceRoleForEC2Spot",
          "Condition": {
            "StringLike": {
              "iam:AWSServiceName": "spot.amazonaws.com"
            }
          }
        }
      ]
    }
    
  7. Clique em Revisar política.

  8. No campo Nome , insira um nome de política.

  9. Clique em Criar política.

  10. (Opcional) Se você usar Políticas de controle de serviço para negar determinadas ações no nível da conta AWS, certifique-se de que sts:AssumeRole seja permitido na lista de dados para que os Databricks possam assumir a função de conta cruzada.

  11. No resumo da função, copie a ARN da função.

Opção 3: VPC gerenciada pelo cliente com restrições de políticas personalizadas

Observação

A account AWS de produção do Databricks da qual as Amazon Machine Images (AMI) são originadas é 601306020600. Você pode usar esse ID account para criar políticas de acesso personalizadas que restrinjam quais AMIs podem ser usadas em sua account da AWS. Para obter mais informações, entre em contato com sua equipe account do Databricks.

  1. Faça login no console do AWS como um usuário com privilégios de administrador e acesse o console do IAM.

  2. Clique na guia Funções na barra lateral.

  3. Na lista de funções, clique no IAM role entre contas que você criou na etapa 1.

  4. Clique no menu suspenso Adicionar permissões e, em seguida, em Criar política embutida.

  5. No editor de políticas, clique na guia JSON.

  6. Copie e cole a seguinte política de acesso.

    Substitua os valores a seguir na política pelos seus próprios valores de configuração:

    • ACCOUNTID — O ID da sua conta da AWS, que é um número.

    • VPCID — ID do AWS VPC onde você deseja iniciar workspaces.

    • REGION — Nome da região AWS para sua implementação VPC, por exemplo us-west-2.

    • SECURITYGROUPID - ID do seu grupo de segurança do AWS. Quando você adiciona uma restrição de grupo de segurança, não é possível reutilizar o IAM role entre contas nem fazer referência a um ID de credenciais (credentials_id) para outros workspaces. Para esses outros workspaces, você deve criar funções, políticas e objetos de credenciais separados.

    Observação

    Se você tiver requisitos personalizados configurados para grupos de segurança com seu vpc gerenciado pelo cliente, entre em contato com a equipe account do Databricks para obter assistência com personalizações de políticas do IAM.

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "NonResourceBasedPermissions",
          "Effect": "Allow",
          "Action": [
            "ec2:AssignPrivateIpAddresses",
            "ec2:CancelSpotInstanceRequests",
            "ec2:DescribeAvailabilityZones",
            "ec2:DescribeIamInstanceProfileAssociations",
            "ec2:DescribeInstanceStatus",
            "ec2:DescribeInstances",
            "ec2:DescribeInternetGateways",
            "ec2:DescribeNatGateways",
            "ec2:DescribeNetworkAcls",
            "ec2:DescribePrefixLists",
            "ec2:DescribeReservedInstancesOfferings",
            "ec2:DescribeRouteTables",
            "ec2:DescribeSecurityGroups",
            "ec2:DescribeSpotInstanceRequests",
            "ec2:DescribeSpotPriceHistory",
            "ec2:DescribeSubnets",
            "ec2:DescribeVolumes",
            "ec2:DescribeVpcAttribute",
            "ec2:DescribeVpcs",
            "ec2:CreateTags",
            "ec2:DeleteTags",
            "ec2:GetSpotPlacementScores",
            "ec2:RequestSpotInstances",
            "ec2:DescribeFleetHistory",
            "ec2:ModifyFleet",
            "ec2:DeleteFleets",
            "ec2:DescribeFleetInstances",
            "ec2:DescribeFleets",
            "ec2:CreateFleet",
            "ec2:DeleteLaunchTemplate",
            "ec2:GetLaunchTemplateData",
            "ec2:CreateLaunchTemplate",
            "ec2:DescribeLaunchTemplates",
            "ec2:DescribeLaunchTemplateVersions",
            "ec2:ModifyLaunchTemplate",
            "ec2:DeleteLaunchTemplateVersions",
            "ec2:CreateLaunchTemplateVersion"
          ],
          "Resource": [
            "*"
          ]
        },
        {
          "Sid": "InstancePoolsSupport",
          "Effect": "Allow",
          "Action": [
            "ec2:AssociateIamInstanceProfile",
            "ec2:DisassociateIamInstanceProfile",
            "ec2:ReplaceIamInstanceProfileAssociation"
          ],
          "Resource": "arn:aws:ec2:REGION:ACCOUNTID:instance/*",
          "Condition": {
            "StringEquals": {
              "ec2:ResourceTag/Vendor": "Databricks"
            }
          }
        },
        {
          "Sid": "AllowEc2RunInstancePerTag",
          "Effect": "Allow",
          "Action": "ec2:RunInstances",
          "Resource": [
            "arn:aws:ec2:REGION:ACCOUNTID:volume/*",
            "arn:aws:ec2:REGION:ACCOUNTID:instance/*"
          ],
          "Condition": {
            "StringEquals": {
              "aws:RequestTag/Vendor": "Databricks"
            }
          }
        },
        {
          "Sid": "AllowEc2RunInstanceImagePerTag",
          "Effect": "Allow",
          "Action": "ec2:RunInstances",
          "Resource": [
            "arn:aws:ec2:REGION:ACCOUNTID:image/*"
          ],
          "Condition": {
            "StringEquals": {
              "aws:ResourceTag/Vendor": "Databricks"
            }
          }
        },
        {
          "Sid": "AllowEc2RunInstancePerVPCid",
          "Effect": "Allow",
          "Action": "ec2:RunInstances",
          "Resource": [
            "arn:aws:ec2:REGION:ACCOUNTID:network-interface/*",
            "arn:aws:ec2:REGION:ACCOUNTID:subnet/*",
            "arn:aws:ec2:REGION:ACCOUNTID:security-group/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:vpc": "arn:aws:ec2:REGION:ACCOUNTID:vpc/VPCID"
            }
          }
        },
        {
          "Sid": "AllowEc2RunInstanceOtherResources",
          "Effect": "Allow",
          "Action": "ec2:RunInstances",
          "NotResource": [
            "arn:aws:ec2:REGION:ACCOUNTID:image/*",
            "arn:aws:ec2:REGION:ACCOUNTID:network-interface/*",
            "arn:aws:ec2:REGION:ACCOUNTID:subnet/*",
            "arn:aws:ec2:REGION:ACCOUNTID:security-group/*",
            "arn:aws:ec2:REGION:ACCOUNTID:volume/*",
            "arn:aws:ec2:REGION:ACCOUNTID:instance/*"
          ]
        },
        {
          "Sid": "EC2TerminateInstancesTag",
          "Effect": "Allow",
          "Action": [
            "ec2:TerminateInstances"
          ],
          "Resource": [
            "arn:aws:ec2:REGION:ACCOUNTID:instance/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:ResourceTag/Vendor": "Databricks"
            }
          }
        },
        {
          "Sid": "EC2AttachDetachVolumeTag",
          "Effect": "Allow",
          "Action": [
            "ec2:AttachVolume",
            "ec2:DetachVolume"
          ],
          "Resource": [
            "arn:aws:ec2:REGION:ACCOUNTID:instance/*",
            "arn:aws:ec2:REGION:ACCOUNTID:volume/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:ResourceTag/Vendor": "Databricks"
            }
          }
        },
        {
          "Sid": "EC2CreateVolumeByTag",
          "Effect": "Allow",
          "Action": [
            "ec2:CreateVolume"
          ],
          "Resource": [
            "arn:aws:ec2:REGION:ACCOUNTID:volume/*"
          ],
          "Condition": {
            "StringEquals": {
              "aws:RequestTag/Vendor": "Databricks"
            }
          }
        },
        {
          "Sid": "EC2DeleteVolumeByTag",
          "Effect": "Allow",
          "Action": [
            "ec2:DeleteVolume"
          ],
          "Resource": [
            "arn:aws:ec2:REGION:ACCOUNTID:volume/*"
          ],
          "Condition": {
            "StringEquals": {
              "ec2:ResourceTag/Vendor": "Databricks"
            }
          }
        },
        {
          "Effect": "Allow",
          "Action": [
            "iam:CreateServiceLinkedRole",
            "iam:PutRolePolicy"
          ],
          "Resource": "arn:aws:iam::*:role/aws-service-role/spot.amazonaws.com/AWSServiceRoleForEC2Spot",
          "Condition": {
            "StringLike": {
              "iam:AWSServiceName": "spot.amazonaws.com"
            }
          }
        },
        {
          "Sid": "VpcNonresourceSpecificActions",
          "Effect": "Allow",
          "Action": [
            "ec2:AuthorizeSecurityGroupEgress",
            "ec2:AuthorizeSecurityGroupIngress",
            "ec2:RevokeSecurityGroupEgress",
            "ec2:RevokeSecurityGroupIngress"
          ],
          "Resource": "arn:aws:ec2:REGION:ACCOUNTID:security-group/SECURITYGROUPID",
          "Condition": {
            "StringEquals": {
              "ec2:vpc": "arn:aws:ec2:REGION:ACCOUNTID:vpc/VPCID"
            }
          }
        }
      ]
    }
    
  7. Clique em Revisar política.

  8. No campo Nome , insira um nome de política.

  9. Clique em Criar política.

  10. (Opcional) Se você usar Políticas de controle de serviço para negar determinadas ações no nível da conta AWS, certifique-se de que sts:AssumeRole seja permitido na lista de dados para que os Databricks possam assumir a função de conta cruzada.

  11. No resumo da função, copie a ARN da função.

Etapa 3: criar uma configuração de credenciais no Databricks

Depois de criar o IAM role, você pode informar aos Databricks sobre ela criando uma configuração de credencial que usa o ID da função.

Para criar uma configuração de credencial:

  1. No console da conta, clique em Recursos da nuvem.

  2. Clique em Configuração de credenciais.

  3. Clique em Adicionar configuração de credencial.

  4. No campo Nome da configuração da credencial, insira um nome legível para sua nova configuração de credencial.

  5. No campo ARN de função, insira o ARN da sua função.

  6. Clique em Adicionar.

A validação não é executada durante a criação da configuração da credencial. Alguns erros são detectados somente quando você utiliza a configuração para criar uma novo workspace. Esses erros podem incluir uma ARN inválida ou permissões incorretas para a função, entre outros.

Excluir uma configuração de credencial

As configurações de credenciais não podem ser editadas após a criação. Se a configuração tiver dados incorretos ou se você não precisar mais deles, exclua a configuração de credencial:

  1. No console da conta, clique em recursocloud .

  2. Clique em Configuração de credenciais.

  3. Na linha de configuração de credenciais, clique no ícone do menu Ações e selecione Excluir.

    Você também pode clicar no nome de configuração da credencial e clicar em Excluir na caixa de diálogo pop-up.

  4. Na caixa de diálogo de confirmação, clique em Confirmar exclusão.