Pular para o conteúdo principal

Acesso cruzadoaccount Kinesis com uma política AssumeRole

Em AWS, o senhor pode configurar o acesso cruzadoaccount, de modo que a computação em um account possa acessar o serviço AWS em outro account. Uma maneira de conceder acesso, descrita no tutorial: Configurar o acesso S3 com um instance profile, é conceder a um account acesso direto ao serviço em outro account. Outra maneira de conceder acesso a outro serviço é permitir que um account assuma uma função em outro account.

Considere a conta AWS A com account id <deployment-acct-id> e a conta AWS B com account number <kinesis-owner-acct-id>. A conta A é usada quando o senhor implanta seu Databricks workspace : EC2 serviço são gerenciados por este account. Kinesis é gerenciado pela conta B.

Este artigo fornece as etapas para configurar a conta A para usar a ação AWS AssumeRole para acessar Kinesis na conta B como uma função na conta B. Para habilitar esse acesso, o senhor realiza a configuração na conta A e na conta B nas configurações de administração Databricks, quando configura um clustering Databricks e quando executa um Notebook que acessa Kinesis.

Requisitos

AWS acesso de administrador à função IAM e às políticas na AWS account da implantação Databricks e na AWS account do serviço Kinesis.

Etapa 1: Configurar a funçãoaccount em Kinesis account

  1. Em sua conta Kinesis AWS , acesse o serviço IAM e clique em Roles tab.

  2. Clique em Criar função . No painel Select type of trusted entity (Selecionar tipo de entidade confi ável), clique em Another AWS account (Outra conta ). Cole o ID da conta do seu Databricks AWS account, <deployment-acct-id>. Opcionalmente, você pode especificar uma ID externa, mas ela não é obrigatória.

  3. Clique em Next: permissões e conceda a essa função permissão para acessar o Kinesis. O senhor pode fornecer seu próprio JSON ou usar a política AmazonKinesisFullAccess .

  4. Clique em Avançar: Revise e dê um nome à função, por exemplo, KinesisCrossAccountRole.

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

  6. Na lista de funções, clique em KinesisCrossAccountRole e verifique se o site confiável account contém uma política JSON como, por exemplo:

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": ["arn:aws:iam::<deployment-acct-id>:root"],
    "Service": "ec2.amazonaws.com"
    },
    "Action": "sts:AssumeRole"
    }
    ]
    }
  7. Copie o ARN da função, por exemplo: arn:aws:iam::<kinesis-owner-acct-id>:role/KinesisCrossAccountRole.

Etapa 2: Configurar Assume Role (Assumir função) na implantação do Databricks account

  1. Em sua implantação Databricks AWS account, acesse o serviço IAM e clique em Roles tab.

  2. Clique em Criar função . No painel Selecionar tipo de entidade confiável, clique em serviço AWS e clique no serviço EC2 .

  3. Clique em Próximo: permissões .

  4. Clique em Avançar: Revise e dê um nome à função, por exemplo, DatabricksToKinesisAssumeRole.

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

  6. Na lista Funções, clique em DatabricksToKinesisAssumeRole.

  7. Em Permissions (Permissões ) tab, clique em Política em linha.

  8. Clique no botão JSON tab.

  9. Copie essa política e cole a função ARN do seu KinesisCrossAccountRole da Etapa 1 no campo de recurso :

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "Stmt1487884001000",
    "Effect": "Allow",
    "Action": ["sts:AssumeRole"],
    "Resource": ["arn:aws:iam::<kinesis-owner-acct-id>:role/KinesisCrossAccountRole"]
    }
    ]
    }
  10. Clique em Revisar política .

  11. No campo Nome, digite um nome de política, por exemplo DatabricksToKinesisAssumeRole.

  12. Clique em Criar política .

  13. Selecione DatabricksToKinesisAssumeRole. Salve o endereço instance profile ARN para uso na Etapa 3 e salve a função ARN para uso na próxima etapa.

  14. Atualize a política para a função usada para implantar o Databricks workspacee adicione a ação iam:PassRole à política. A ação iam:PassRole deve usar o ARN da função DatabricksToKinesisAssumeRole que o senhor acabou de criar nesta etapa. Depois de salvar, você deve ter uma política como esta:

    JSON
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Sid": "Stmt1403287045000",
    "Effect": "Allow",
    "Action": [
    "ec2:AssociateDhcpOptions",
    "ec2:AssociateRouteTable",
    "ec2:AttachInternetGateway",
    "ec2:AttachVolume"
    ],
    "Resource": ["*"]
    },
    {
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": ["arn:aws:iam::<deployment-acct-id>:role/DatabricksToKinesisAssumeRole"]
    }
    ]
    }

Etapa 3: Adicione o endereço instance profile DatabricksToKinesisAssumeRole ao Databricks

  1. Vá para a página de configurações.
  2. Clique na guia Instance profiles .
  3. Adicione o instance profile DatabricksToKinesisAssumeRole usando o instance profile ARN que o senhor salvou na Etapa 2, arn:aws:iam::<deployment-acct-id>:instance-profile/DatabricksToKinesisAssumeRole.

Etapa 4: Crie um clustering com o instance profile

  1. Selecione ou crie um clustering.
  2. Abra a seção Avançado .
  3. Em Instances (Instâncias ) tab, selecione a instance profile que o senhor adicionou na Etapa 3 DatabricksToKinesisAssumeRole.
  4. começar o agrupamento.

Etapa 5: validar a conexão com o Kinesis

  1. Crie um Notebook e anexe-o ao clustering que o senhor criou na Etapa 4.

  2. Configure a opção roleArn no método Spark readStream para usar a função de suposição especificada (KinesisCrossAccountRole) do site IAM role que o senhor anexou ao cluster (DatabricksToKinesisAssumeRole):

    Python
    kinesis = spark.readStream \
    .format("kinesis") \
    .option("streamName", "testStream") \
    .option("region", "us-east-1") \
    .option("roleArn", "arn:aws:iam::<kinesis-owner-acct-id>:role/KinesisCrossAccountRole") \
    .option("initialPosition", "earliest") \
    .load()

    display(kinesis)

    O exemplo de código pressupõe que o nome da transmissão Kinesis é testStream e que ela reside na região us-east-1. Se você criou KinesisCrossAccountRole com uma ID externa, adicione a seguinte opção:

    Python
    .option("roleExternalId", "myExternalCode")

    Se o senhor criou um endpoint VPC para o serviço Kinesis, adicione a seguinte opção. Substitua <region> pela região da AWS para o endpoint da VPC:

    Python
    .option("stsEndpoint", "sts.<region>.amazonaws.com")
  3. Verifique se há um resultado válido como o seguinte:

    Ativo Kinesis transmissão