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
-
Em sua conta Kinesis AWS , acesse o serviço IAM e clique em Roles tab.
-
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. -
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 .
-
Clique em Avançar: Revise e dê um nome à função, por exemplo,
KinesisCrossAccountRole
. -
Clique em Criar papel . A lista de funções é exibida.
-
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"
}
]
} -
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
-
Em sua implantação Databricks AWS account, acesse o serviço IAM e clique em Roles tab.
-
Clique em Criar função . No painel Selecionar tipo de entidade confiável, clique em serviço AWS e clique no serviço EC2 .
-
Clique em Próximo: permissões .
-
Clique em Avançar: Revise e dê um nome à função, por exemplo,
DatabricksToKinesisAssumeRole
. -
Clique em Criar papel . A lista de funções é exibida.
-
Na lista Funções, clique em
DatabricksToKinesisAssumeRole
. -
Em Permissions (Permissões ) tab, clique em
.
-
Clique no botão JSON tab.
-
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"]
}
]
} -
Clique em Revisar política .
-
No campo Nome, digite um nome de política, por exemplo
DatabricksToKinesisAssumeRole
. -
Clique em Criar política .
-
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. -
Atualize a política para a função usada para implantar o Databricks workspacee adicione a ação
iam:PassRole
à política. A açãoiam:PassRole
deve usar o ARN da funçãoDatabricksToKinesisAssumeRole
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
- Vá para a página de configurações.
- Clique na guia Instance profiles .
- 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
- Selecione ou crie um clustering.
- Abra a seção Avançado .
- Em Instances (Instâncias ) tab, selecione a instance profile que o senhor adicionou na Etapa 3
DatabricksToKinesisAssumeRole
. - começar o agrupamento.
Etapa 5: validar a conexão com o Kinesis
-
Crie um Notebook e anexe-o ao clustering que o senhor criou na Etapa 4.
-
Configure a opção
roleArn
no método SparkreadStream
para usar a função de suposição especificada (KinesisCrossAccountRole
) do site IAM role que o senhor anexou ao cluster (DatabricksToKinesisAssumeRole
):Pythonkinesis = 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ãous-east-1
. Se você criouKinesisCrossAccountRole
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")
-
Verifique se há um resultado válido como o seguinte: