Tutorial: configurar uma relação de confiança entre realms com um controlador de domínio do Active Directory - Amazon EMR

Tutorial: configurar uma relação de confiança entre realms com um controlador de domínio do Active Directory

Ao configurar uma relação de confiança entre realms, você permite que os principais (normalmente usuários) de um realm do Kerberos diferente se autentiquem em componentes do aplicativo no cluster do EMR. O centro de distribuição de chaves (KDC) dedicado ao cluster estabelece uma relação de confiança com outro KDC usando uma entidade principal entre realms existente em ambos os KDCs. O nome do principal e a senha coincidem precisamente.

Uma relação de confiança entre realms exige que os KDCs possam se alcançar um ao outro pela rede e resolver os nomes de domínio um do outro. As etapas para estabelecer uma relação de confiança entre realms com um controlador de domínio do Microsoft AD em execução como uma instância do EC2 são apresentadas abaixo com uma configuração de rede de exemplo que oferece a conectividade e a resolução de nomes de domínio necessárias. Qualquer configuração de rede que permita o tráfego de rede entre KDCs é aceitável.

Opcionalmente, depois de estabelecer uma relação de confiança entre realms com o Active Directory usando um KDC em um cluster, você poderá criar outro cluster usando uma configuração de segurança diferente para fazer referência ao KDC no primeiro cluster como um KDC externo. Para obter um exemplo de configuração de segurança e a configuração do cluster, consulte KDC externo do cluster com relação de confiança entre realms do Active Directory.

Para obter mais informações sobre o suporte do Amazon EMR para Kerberos e KDC, bem como links para a documentação do MIT Kerberos, consulte Usar o Kerberos para autenticação com o Amazon EMR.

Importante

O Amazon EMR não oferece suporte a relações de confiança entre realms com AWS Directory Service for Microsoft Active Directory.

Etapa 1: configurar a VPC e a sub-rede

Etapa 2: iniciar e instalar o controlador de domínio do Active Directory

Etapa 3: adicionar contas de usuário ao domínio do cluster do EMR

Etapa 4: configurar uma relação de confiança recebida no controlador de domínio do Active Directory

Etapa 5: usar uma opção DHCP definida para especificar o controlador de domínio do Active Directory como um servidor DNS da VPC

Etapa 6: Iniciar um cluster EMR Kerberizado

Etapa 7: criar usuários HDFS e definir permissões no cluster para contas do Active Directory

Etapa 1: configurar a VPC e a sub-rede

As etapas a seguir demonstram como criar uma VPC e uma sub-rede, de maneira que o KDC dedicado ao cluster possa alcançar o controlador de domínio do Active Directory e resolver o nome de domínio. Nessas etapas, a resolução de nomes de domínio é fornecida referenciando-se o controlador de domínio do Active Directory como o servidor de nomes de domínio no conjunto de opções DHCP. Para obter mais informações, consulte Etapa 5: usar uma opção DHCP definida para especificar o controlador de domínio do Active Directory como um servidor DNS da VPC.

O KDC e o controlador de domínio do Active Directory devem poder resolver os nomes de domínio um do outro. Isso permite ao Amazon EMR adicionar computadores ao domínio e configurar automaticamente as contas do Linux correspondentes e os parâmetros SSH em instâncias de cluster.

Se o Amazon EMR não conseguir resolver o nome de domínio, você poderá referenciar a relação de confiança usando o endereço IP do controlador de domínio do Active Directory. No entanto, você deve adicionar manualmente contas do Linux, adicionar entidades principais correspondentes ao KDC dedicado ao cluster e configurar o SSH.

Para configurar a VPC e a sub-rede
  1. Crie uma Amazon VPC com uma única sub-rede pública. Para obter mais informações, consulte Step 1: Create the VPC no Amazon VPC Getting Started Guide.

    Importante

    Ao usar um controlador de domínio do Microsoft Active Directory, escolha um bloco CIDR para o cluster do EMR, de maneira que todos os endereços IPv4 tenham menos de nove caracteres (por exemplo, 10.0.0.0/16). Isso ocorre porque os nomes DNS dos computadores do cluster são usados quando os computadores ingressam no diretório do Active Directory. A AWS atribui nomes de host DNS com base no endereço IPv4 de forma que endereços IP mais longos possam resultar em nomes DNS com mais de 15 caracteres. O Active Directory tem um limite de 15 caracteres para registrar nomes de computador adicionados e trunca nomes mais longos, o que pode causar erros imprevisíveis.

  2. Remova o conjunto de opções DHCP padrão atribuído à VPC. Para obter mais informações, consulte Changing a VPC to use No DHCP options. Posteriormente, você adicionará um novo especificando o controlador de domínio do Active Directory como o servidor DNS.

  3. Confirme se o suporte DNS está habilitado para a VPC, ou seja, se os nomes de host e a resolução DNS estão habilitados. Por padrão, as transições estão ativadas. Para obter mais informações, consulte Updating DNS support for your VPC.

  4. Confirme se a VPC tem um gateway da Internet anexado, que é o padrão. Para mais informações, consulte Criar e anexar um gateway da Internet.

    nota

    Um gateway da Internet é usado neste exemplo porque você está estabelecendo um novo controlador de domínio para a VPC. O gateway da Internet talvez não seja necessário para o aplicativo. O único requisito é que o KDC dedicado ao cluster possa acessar o controlador de domínio do Active Directory.

  5. Crie uma tabela de rotas personalizada, adicione uma rota com o gateway da Internet como destino e a anexe à sub-rede. Para obter mais informações, consulte Criar uma tabela de rotas personalizada.

  6. Ao executar a instância do EC2 do controlador de domínio, ela precisa ter um endereço IPv4 público estático para você se conectar a ela usando RDP. A maneira mais fácil de fazer isso é configurar a sub-rede para atribuir automaticamente endereços IPv4 públicos. Não se trata da configuração padrão quando uma sub-rede é criada. Para obter mais informações, consulte Modificar o atributo de endereçamento IPv4 público para a sub-rede. Você também pode atribuir o endereço ao iniciar a instância. Para obter mais informações, consulte Assigning a public IPv4 address during instance launch.

  7. Quando terminar, anote a VPC e os IDs de sub-rede. Você os usará depois quando iniciar o controlador de domínio do Active Directory e o cluster.

Etapa 2: iniciar e instalar o controlador de domínio do Active Directory

  1. Inicie uma instância do EC2 com base na AMI Microsoft Windows Server 2016 Base. Recomendamos um tipo de instância m4.xlarge ou melhor. Para obter mais informações, consulte Iniciar uma instância do AWS Marketplace no Guia do usuário do Amazon EC2 para instâncias do Windows.

  2. Anote o ID do grupo de segurança associado à instância do EC2. Você precisa dele para o Etapa 6: Iniciar um cluster EMR Kerberizado. Nós usamos sg-012xrlmdomain345. Opcionalmente, você pode especificar grupos de segurança diferentes para o cluster do EMR e essa instância que permite o tráfego entre eles. Para obter mais informações, consulte Grupos de segurança do Amazon EC2 para instâncias do Linux no Guia do usuário do Amazon EC2 para instâncias do Linux.

  3. Conecte-se à instância do EC2 usando o RDP. Para obter mais informações, consulte Conectar-se à sua instância do Windows no Guia do usuário do Amazon EC2 para instâncias do Windows.

  4. Inicie o Server Manager para instalar e configurar o perfil Active Directory Domain Services no servidor. Promova o servidor para um controlador de domínio e atribua um nome de domínio (o exemplo que usamos aqui é ad.domain.com). Anote o nome de domínio porque você vai precisar dele depois ao criar a configuração de segurança do EMR e o cluster. Se estiver começando a configurar o Active Directory, você poderá seguir as instruções em How to setup Active Directory (AD) In Windows Server 2016.

    A instância será reiniciada quando você terminar.

Etapa 3: adicionar contas de usuário ao domínio do cluster do EMR

Use o RDP para o controlador de domínio do Active Directory para criar contas em usuários e computadores do Active Directory para cada usuário do cluster. Para obter mais informações, consulte Create a User Account in Active Directory Users and Computers no site Microsoft Learn. Anote o User logon name (Nome de logon do usuário) de cada usuário. Você precisará dele mais tarde ao configurar o cluster.

Além disso, crie uma conta com privilégios suficientes para integrar computadores ao domínio. Você especifica essa conta ao criar um cluster. O Amazon EMR a usa para integrar instâncias de cluster ao domínio. Você especifica essa conta e a senha em Etapa 6: Iniciar um cluster EMR Kerberizado. Para delegar privilégios de integração do computador à conta, recomendamos criar um grupo com privilégios de junção e, em seguida, atribuir o usuário ao grupo. Para obter instruções, consulte Delegating directory join privileges no Guia de administração AWS Directory Service.

Etapa 4: configurar uma relação de confiança recebida no controlador de domínio do Active Directory

Os comandos de exemplo abaixo criam uma relação de confiança no Active Directory, que é uma relação de confiança de realm unidirecional, de entrada e não transitiva com o KDC dedicado ao cluster. O exemplo que usamos para no realm do cluster é EC2.INTERNAL. Substitua KDC-FQDN pelo nome DNS público listado para o nó primário do Amazon EMR que hospeda o KDC. O parâmetro passwordt especifica a cross-realm principal password (senha da entidade principal entre realms), determinada por você com o realm do cluster ao criar um cluster. O nome do realm deriva do nome de domínio padrão em us-east-1 para o cluster. O Domain é o domínio do Active Directory no qual você está criando a confiança, que é em minúscula por convenção. O exemplo usa ad.domain.com

Abra o prompt de comando do Windows com privilégios de administrador e digite os seguintes comandos para criar a relação de confiança no controlador de domínio do Active Directory:

C:\Users\Administrator> ksetup /addkdc EC2.INTERNAL KDC-FQDN C:\Users\Administrator> netdom trust EC2.INTERNAL /Domain:ad.domain.com /add /realm /passwordt:MyVeryStrongPassword C:\Users\Administrator> ksetup /SetEncTypeAttr EC2.INTERNAL AES256-CTS-HMAC-SHA1-96

Etapa 5: usar uma opção DHCP definida para especificar o controlador de domínio do Active Directory como um servidor DNS da VPC

Agora que o controlador de domínio do Active Directory está configurado, você deve configurar a VPC para usá-lo como um servidor de nomes de domínio para resolução de nomes em sua VPC. Para isso, anexe um conjunto de opções DHCP. Especifique o Nome do domínio como o nome de domínio do cluster. Por exemplo, ec2.internal caso o cluster esteja em us-east-1 ou region.compute.internal para outras regiões. Em Domain name servers (Servidores de nomes de domínio), você deve especificar o endereço IP do controlador de domínio do Active Directory (que deve ser acessível a partir do cluster) como a primeira entrada, seguido por AmazonProvidedDNS (por exemplo, xx.xx.xx.xx, AmazonProvidedDNS). Para obter mais informações, consulte Changing DHCP option sets.

Etapa 6: Iniciar um cluster EMR Kerberizado

  1. No Amazon EMR, crie uma configuração de segurança que especifique o controlador de domínio do Active Directory criado por você nas etapas anteriores. Um comando de exemplo é mostrado abaixo. Substitua o domínio, ad.domain.com, pelo nome do domínio especificado por você em Etapa 2: iniciar e instalar o controlador de domínio do Active Directory.

    aws emr create-security-configuration --name MyKerberosConfig \ --security-configuration '{ "AuthenticationConfiguration": { "KerberosConfiguration": { "Provider": "ClusterDedicatedKdc", "ClusterDedicatedKdcConfiguration": { "TicketLifetimeInHours": 24, "CrossRealmTrustConfiguration": { "Realm": "AD.DOMAIN.COM", "Domain": "ad.domain.com", "AdminServer": "ad.domain.com", "KdcServer": "ad.domain.com" } } } } }'
  2. Crie o cluster com os seguintes atributos:

    • Use a opção --security-configuration para especificar a configuração de segurança que você criou. Nós usamos MyKerberosConfig no exemplo.

    • Use a propriedade SubnetId da --ec2-attributes option para especificar a sub-rede que você criou em Etapa 1: configurar a VPC e a sub-rede. Nós usamos step1-subnet no exemplo.

    • Use AdditionalMasterSecurityGroups e AdditionalSlaveSecurityGroups da opção --ec2-attributes para especificar que o grupo de segurança associado ao controlador de domínio AD do Etapa 2: iniciar e instalar o controlador de domínio do Active Directory está associado ao nó primário do cluster, bem como aos nós centrais e de tarefa. Nós usamos sg-012xrlmdomain345 no exemplo.

    Use --kerberos-attributes para especificar os seguintes atributos Kerberos específicos ao cluster:

    O exemplo a seguir inicia um cluster kerberizado.

    aws emr create-cluster --name "MyKerberosCluster" \ --release-label emr-5.10.0 \ --instance-type m5.xlarge \ --instance-count 3 \ --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=MyEC2KeyPair,\ SubnetId=step1-subnet, AdditionalMasterSecurityGroups=sg-012xrlmdomain345, AdditionalSlaveSecurityGroups=sg-012xrlmdomain345\ --service-role EMR_DefaultRole \ --security-configuration MyKerberosConfig \ --applications Name=Hadoop Name=Hive Name=Oozie Name=Hue Name=HCatalog Name=Spark \ --kerberos-attributes Realm=EC2.INTERNAL,\ KdcAdminPassword=MyClusterKDCAdminPwd,\ ADDomainJoinUser=ADUserLogonName,ADDomainJoinPassword=ADUserPassword,\ CrossRealmTrustPrincipalPassword=MatchADTrustPwd

Etapa 7: criar usuários HDFS e definir permissões no cluster para contas do Active Directory

Ao configurar uma relação de confiança com o Active Directory, o Amazon EMR cria usuários do Linux no cluster para cada conta do Active Directory. Por exemplo, o nome de logon de usuário LiJuan no Active Directory tem uma conta do Linux de lijuan. Os nomes de usuário do Active Directory podem conter letras maiúsculas, mas o Linux não segue o uso de maiúsculas e minúsculas do Active Directory.

Para permitir que os usuários façam login no cluster para executar trabalhos do Hadoop, você deve adicionar diretórios do usuário HDFS para contas do Linux e conceder a cada um a propriedade do diretório. Para isso, recomendamos executar um script salvo no Amazon S3 como uma etapa de cluster. Você também pode executar os comandos no script abaixo da linha de comando no nó primário. Use o par de chaves do EC2 especificado por você quando criou o cluster para se conectar ao nó primário via SSH como o usuário do Hadoop. Para obter mais informações, consulte Usar um par de chaves do EC2 para credenciais SSH.

Execute o comando a seguir para adicionar uma etapa ao cluster que executa um script, AddHDFSUsers.sh.

aws emr add-steps --cluster-id <j-2AL4XXXXXX5T9> \ --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,\ Jar=s3://region.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://DOC-EXAMPLE-BUCKET/AddHDFSUsers.sh"]

O conteúdo do arquivo AddHDFSUsers.sh é o seguinte.

#!/bin/bash # AddHDFSUsers.sh script # Initialize an array of user names from AD or Linux users and KDC principals created manually on the cluster ADUSERS=("lijuan" "marymajor" "richardroe" "myusername") # For each user listed, create an HDFS user directory # and change ownership to the user for username in ${ADUSERS[@]}; do hdfs dfs -mkdir /user/$username hdfs dfs -chown $username:$username /user/$username done

Grupos do Active Directory mapeados para grupos do Hadoop

O Amazon EMR usa o Daemon do System Security Services (SSD) para mapear grupos do Active Directory para grupos do Hadoop. Para confirmar mapeamentos de grupos, depois de fazer login no nó primário, conforme descrito em Usar o SSH para se conectar a clusters kerberizados, você poderá usar o comando hdfs groups para confirmar que os grupos do Active Directory aos quais sua conta do Active Directory pertence foram mapeados para os grupos do Hadoop para o usuário correspondente do Hadoop no cluster. Você também pode verificar mapeamentos de grupos de outros usuários especificando um ou mais nomes de usuário usando, por exemplo, o comando hdfs groups lijuan. Para obter mais informações, consulte grupos no Guia de comandos HDFS do Apache.