Designer Cloud e EMR sem servidor na AWS
Siga este guia para implantar o módulo Designer Cloud para processamento de dados privados da AWS.
Pré-requisito
Antes de implantar o módulo Designer Cloud, conclua estas etapas na página Configurar conta e VPC da AWS para dados privados...
Ter configurado uma VPC dedicada ao Alteryx One Platform conforme mencionado na seção Criar uma VPC.
Ter conectado a conta de serviço e a política base do IAM à conta de serviço, conforme mencionado na seção Configurar o IAM.
Ter acionado com sucesso o provisionamento do processamento de dados privados, conforme mencionado na seção Acionar provisionamento do tratamento de dados privados.
Configuração da conta
Etapa 1: configurar o IAM
Etapa 1a: criar uma política do IAM do Designer Cloud
Nota
AAC_DesignerCloud_SA_Policy é um nome de política de exemplo. Você pode escolher qualquer nome para a política, mas ele deve começar com AAC_DesignerCloud.
Você precisa criar uma política do IAM personalizada. Dê a ela o nome AAC_DesignerCloud_SA_Policy e anexe o documento de política a seguir. Recomendamos usar a guia "JSON" em vez do editor visual. O Alteryx One requer algumas permissões * para ser executado. Ao criar a política, você deverá receber alguns avisos de segurança.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::*:role/*",
"Condition": {
"StringEqualsIfExists": {
"iam:PassedToService": [
"ec2.amazonaws.com",
"ec2.amazonaws.com.cn"
]
}
}
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"eks:*",
"iam:CreateServiceLinkedRole",
"kms:CreateGrant",
"kms:Decrypt",
"kms:DescribeKey",
"kms:Encrypt",
"kms:GetKeyPolicy",
"kms:GetKeyRotationStatus",
"kms:ListGrants",
"kms:ListResourceTags",
"kms:ListRetirableGrants",
"kms:PutKeyPolicy",
"kms:RetireGrant",
"kms:RevokeGrant",
"kms:ScheduleKeyDeletion",
"kms:TagResource",
"kms:UntagResource"
],
"Resource": [
"arn:aws:eks:*:*:addon/*/*/*",
"arn:aws:eks:*:*:cluster/*",
"arn:aws:eks:*:*:nodegroup/*/*/*",
"arn:aws:eks:*:*:identityproviderconfig/*/*/*/*",
"arn:aws:eks:*:*:access-entry/*/*/*",
"arn:aws:kms:*:*:key/*",
"arn:aws:iam::*:role/*"
]
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": [
"iam:AttachRolePolicy",
"iam:CreateOpenIDConnectProvider",
"iam:CreatePolicy",
"iam:CreatePolicyVersion",
"iam:CreateRole",
"iam:DeleteOpenIDConnectProvider",
"iam:DeletePolicy",
"iam:DeletePolicyVersion",
"iam:DeleteRole",
"iam:DeleteRolePolicy",
"iam:DetachRolePolicy",
"iam:GetOpenIDConnectProvider",
"iam:GetPolicy",
"iam:GetPolicyVersion",
"iam:GetRole",
"iam:GetRolePolicy",
"iam:GetUser",
"iam:GetUserPolicy",
"iam:ListAttachedRolePolicies",
"iam:ListAttachedUserPolicies",
"iam:ListGroupsForUser",
"iam:ListInstanceProfilesForRole",
"iam:ListPolicyTags",
"iam:ListPolicyVersions",
"iam:ListRolePolicies",
"iam:PassRole",
"iam:PutRolePolicy",
"iam:TagOpenIDConnectProvider",
"iam:TagPolicy",
"iam:TagRole",
"iam:UntagOpenIDConnectProvider",
"iam:UntagPolicy",
"iam:UntagRole",
"iam:UpdateOpenIDConnectProviderThumbprint",
"iam:UpdateRole",
"iam:UpdateAssumeRolePolicy"
],
"Resource": [
"arn:aws:iam::*:policy/*",
"arn:aws:iam::*:oidc-provider/*",
"arn:aws:iam::*:user/*",
"arn:aws:iam::*:role/*"
]
},
{
"Sid": "VisualEditor3",
"Effect": "Allow",
"Action": [
"autoscaling:*",
"ec2:*",
"eks:CreateCluster",
"eks:ListClusters",
"eks:DescribeAddonVersions",
"elasticloadbalancing:*",
"iam:GetAccountName",
"iam:ListAccountAliases",
"iam:ListRoles",
"iam:CreateInstanceProfile",
"iam:DeleteInstanceProfile",
"iam:GetInstanceProfile",
"iam:TagInstanceProfile",
"iam:UntagInstanceProfile",
"iam:RemoveRoleFromInstanceProfile",
"iam:AddRoleToInstanceProfile",
"kms:CreateKey",
"logs:CreateLogGroup",
"logs:DeleteLogGroup",
"logs:DescribeLogGroups",
"logs:ListTagsLogGroup",
"logs:PutRetentionPolicy",
"logs:TagResource",
"logs:UntagResource",
"logs:TagLogGroup",
"logs:UntagLogGroup",
"logs:ListTagsForResource",
"networkmanager:Describe*",
"networkmanager:Get*",
"networkmanager:List*",
"s3:CreateBucket",
"s3:DeleteBucket",
"s3:DeleteBucketPolicy",
"s3:DeleteBucketWebsite",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:DeleteObjectVersionTagging",
"s3:GetAccelerateConfiguration",
"s3:GetBucketAcl",
"s3:GetBucketCORS",
"s3:GetBucketLocation",
"s3:GetBucketLogging",
"s3:GetBucketObjectLockConfiguration",
"s3:GetBucketOwnershipControls",
"s3:GetBucketPolicy",
"s3:GetBucketPolicyStatus",
"s3:GetBucketPublicAccessBlock",
"s3:GetBucketRequestPayment",
"s3:GetBucketTagging",
"s3:GetBucketVersioning",
"s3:GetBucketWebsite",
"s3:GetEncryptionConfiguration",
"s3:GetLifecycleConfiguration",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionAttributes",
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionTagging",
"s3:GetObjectVersionTorrent",
"s3:GetReplicationConfiguration",
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:PutAccelerateConfiguration",
"s3:PutBucketAcl",
"s3:PutBucketCORS",
"s3:PutBucketLogging",
"s3:PutBucketObjectLockConfiguration",
"s3:PutBucketOwnershipControls",
"s3:PutBucketPolicy",
"s3:PutBucketPublicAccessBlock",
"s3:PutBucketRequestPayment",
"s3:PutBucketTagging",
"s3:PutBucketVersioning",
"s3:PutBucketWebsite",
"s3:PutEncryptionConfiguration",
"s3:PutLifecycleConfiguration",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl",
"s3:PutObjectVersionTagging",
"sts:GetCallerIdentity",
"memorydb:CreateSubnetGroup",
"memorydb:CreateUser",
"memorydb:CreateAcl",
"memorydb:CreateCluster",
"memorydb:TagResource",
"memorydb:DescribeSubnetGroups",
"memorydb:DescribeUsers",
"memorydb:DescribeACLs",
"memorydb:DescribeClusters",
"memorydb:ListTags",
"memorydb:DeleteUser",
"memorydb:DeleteSubnetGroup",
"memorydb:DeleteAcl",
"memorydb:DeleteCluster",
"memorydb:UpdateAcl",
"memorydb:UpdateCluster",
"memorydb:UpdateSubnetGroup",
"memorydb:UpdateUser"
],
"Resource": "*"
},
{
"Sid": "VisualEditor4",
"Effect": "Allow",
"Action": "secretsmanager:*",
"Resource": "arn:aws:secretsmanager:*:*:secret:*"
}
]
}Etapa 1b: marcar a política do IAM
Marque a política do IAM personalizada criada na Etapa 1a.
Nome da tag | Valor |
|---|---|
AACResource | aac_sa_custom_policy |
Etapa 1c: anexar a política do IAM
Anexe a política do IAM AAC_DesignerCloud_SA_Policy à conta de serviço aac_automation_sa criada na página Configurar conta e VPC da AWS para dados privados.
Etapa 2: configurar a sub-rede
Nota
Designer Cloud compartilha uma configuração de sub-rede com o Machine Learning, Auto Insights e o App Builder. Se você estiver implantando mais de um desses aplicativos, precisará configurar as sub-redes apenas uma vez.
O Designer Cloud em um ambiente de processamento de dados privados requer grupos de até cinco sub-redes. Cada grupo contém três sub-redes individuais, cada uma em uma zona de disponibilidade diferente.
Grupo eks_control (obrigatório): o plano de controle do EKS usa essa sub-rede para aceitar solicitações de execução de trabalhos recebidas.
Grupo eks_node (obrigatório): o cluster do EKS usa essa sub-rede para executar trabalhos de software do Alteryx (por exemplo, conectividade, conversão, processamento e publicação).
Grupo público (obrigatório): esse grupo não executa nenhum serviço, mas o grupo
eks_nodeo usa para sair do cluster.Grupo privado (obrigatório): esse grupo executa serviços privados para o processamento de dados privados.
Grupo de opções (opcional): use esse grupo se você habilitar o processamento EMR em seu ambiente de processamento de dados. Os serviços do EMR não são executados no cluster, mas o espaço IP é necessário para interagir com os pontos de extremidade do EMR sem servidor da AWS.
Etapa 2a: criar sub-redes na VPC
Configure sub-redes na VPC aac_vpc.
Crie e marque sub-redes seguindo o exemplo abaixo. Você pode ajustar os CIDRs e os valores de sub-rede para se ajustarem à sua arquitetura de rede.
Os grandes espaços de endereço são projetados para acomodar um cluster totalmente dimensionado. Se necessário, você pode escolher um espaço de endereço menor, mas pode ter problemas de dimensionamento sob cargas de processamento pesadas.
Importante
Você deve marcar as sub-redes com Nome da tag e Valor da tag, conforme mencionado na tabela.
CIDRs | Nome da sub-rede | Sub-rede | AZ | Nome da tag | Valor da tag | Observação |
|---|---|---|---|---|---|---|
10.64.0.0/18 | eks_node | 10.64.0.0/21 | AZa | AACSubnet | eks_node | |
eks_node | 10.64.8.0/21 | AZb | AACSubnet | eks_node | ||
eks_node | 10.64.16.0/21 | AZc | AACSubnet | eks_node | ||
10.64.24.0/21 | RESERVADO | |||||
10.64.32.0/19 | RESERVADO (pode ser configurado para atualização azul/verde posteriormente) | |||||
10.10.0.0/21 | eks_control | 10.10.0.0/27 | AZa | AACSubnet | eks_control | |
eks_control | 10.10.0.32/27 | AZb | AACSubnet | eks_control | ||
eks_control | 10.10.0.64/27 | AZc | AACSubnet | eks_control | ||
10.10.0.96/27 | RESERVADO | |||||
pública | 10.10.0.128/27 | AZa | AACSubnet | pública | ||
pública | 10.10.0.160/27 | AZb | AACSubnet | pública | ||
pública | 10.10.0.192/27 | AZc | AACSubnet | pública | ||
10.10.0.224/27 | RESERVADO | |||||
privada | 10.10.1.0/25 | AZa | AACSubnet | privada | ||
privada | 10.10.1.128/25 | AZb | AACSubnet | privada | ||
privada | 10.10.2.0/25 | AZc | AACSubnet | privada | ||
10.10.1.128/25 | RESERVADO | |||||
opção | 10.10.4.0/24 | AZa | AACSubnet | opção | ||
opção | 10.10.5.0/24 | AZa | AACSubnet | opção | ||
opção | 10.10.6.0/24 | AZa | AACSubnet | opção | ||
10.10.7.0/24 | RESERVADO |
Etapa 2b: tabelas de rotas de sub-rede
Crie a tabela de rotas para suas sub-redes.
Nota
Esta tabela de rotas é um exemplo.
Nome da sub-rede | Destino da rota | Alvo | Comentários |
|---|---|---|---|
eks_node | Bloco CIDR /18 Bloco CIDR /21 <s3 prefix id> 0.0.0.0/0 | Local Local <vpce endpoint id> <gateway id> | Configure as mesmas rotas para todas as três tabelas de roteamento de sub-rede de AZs. |
eks_control | Bloco CIDR /18 Bloco CIDR /21 <s3 prefix id> 0.0.0.0/0 | Local Local <vpce endpoint id> <gateway id> | Configure as mesmas rotas para todas as três tabelas de roteamento de sub-rede de AZs. |
pública | Bloco CIDR /18 Bloco CIDR /21 0.0.0.0/0 | Local Local <gateway id> | Configure as mesmas rotas para todas as três tabelas de roteamento de sub-rede de AZs. |
privada | Bloco CIDR /18 Bloco CIDR /21 <s3 prefix id> 0.0.0.0/0 | Local Local <vpce endpoint id> <gateway id> | Configure as mesmas rotas para todas as três tabelas de roteamento de sub-rede de AZs. 0.0.0.0/0 deve sair para a rede pública. |
opção | Bloco CIDR /18 Bloco CIDR /21 <s3 prefix id> 0.0.0.0/0 | local local <vpce endpoint id> <gateway id> | Configure as mesmas rotas para todas as três tabelas de roteamento de sub-rede de AZs. 0.0.0.0/0 deve sair para a rede pública. |
Nota
O <gateway id> pode ser um gateway NAT de zona que foi criado por AZ ou um gateway de trânsito, dependendo da arquitetura da sua rede. Em caso de gateway NAT, crie um gateway NAT por AZ para sub-redes públicas.
Processamento de dados privados
Cuidado
Modificar ou remover quaisquer recursos de nuvem pública provisionados pelo Alteryx One depois que o tratamento de dados privados for configurado poderá causar inconsistências. Essas inconsistências podem levar a erros durante a execução do trabalho ou ao desprovisionamento da configuração do tratamento de dados privados.
Etapa 1: acionar a implantação do Designer Cloud
O provisionamento do Designer Cloud é acionado a partir do console de administração no Alteryx One. Você precisa de Privilégios do Administrador do espaço de trabalho dentro de um espaço de trabalho para vê-lo.
Na página de chegada do Alteryx One, selecione o ícone de círculo no canto superior direito com suas iniciais. No menu, selecione Console de administração.
Selecione Tratamento de dados privados no menu de navegação esquerdo.
Marque a caixa de seleção Designer Cloud e clique em Atualizar.
A seleção de Atualizar aciona a implantação do cluster e dos recursos na conta da AWS. Isso executa um conjunto de verificações de validação da configuração correta da conta da AWS.
Nota
O processo de provisionamento leva aproximadamente de 35 a 40 minutos para ser concluído.
Após a conclusão do provisionamento, você pode visualizar os recursos criados (por exemplo, instâncias de EC2 e grupos de nós) por meio do console da AWS. É muito importante que você não os modifique por conta própria. As alterações manuais podem causar problemas com a função de processamento de dados privados.
Etapa 2: acrescentar a relação de confiança da função personalizada
Nota
Esta etapa só é necessária se você usou uma função entre contas para as permissões ao configurar o armazenamento de dados privado. Se você usou uma chave de acesso para aquela etapa, pode ignorar esta.
Importante
Você deve aguardar a conclusão bem-sucedida da Etapa 1 antes de prosseguir com esta etapa.
Se o seu armazenamento de dados privado usa uma função entre contas, para que o seu novo ambiente de processamento de dados privado possa ler/gravar no seu armazenamento de dados privado, você precisa atualizar essa função para acrescentar uma relação de confiança à sua nova função de cluster do Kubernetes:
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<accountid>:role/aac-<xxxx-xxxxxxxxxxxx>-cluster-role"
},
"Action": "sts:AssumeRole"
}Nota
Substitua a entidade da AWS pelo ARN da função do IAM criada pelo processo de provisionamento de tratamento de dados privados.
<accountid>: número da conta da AWS para a qual o tratamento do ambiente de processamento de dados privado foi provisionado.
<xxxx-xxxxxxxxxxxx>: últimos dois segmentos do ID do ambiente de processamento de dados privado. Você pode localizar esse ID na IU do administrador depois que o ambiente de processamento de dados privado tiver sido provisionado com sucesso.
Exemplo de cenário:
ID da conta: 123456789012
ID do ambiente de processamento de dados privado: b2a65fbd-95dc-490a-b69b-a1dc92df224e
ARN da função: arn:aws:iam::123456789012:role/aac-b69b-a1dc92df224e-cluster-role
Para obter mais informações, acesse https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.html.
Etapa 3: atualizar a política da chave KMS
Depois de criar com sucesso o processamento de dados privados, uma função personalizada chamada credential-service-role é adicionada à sua conta. Essa função permite que a conta de serviço de credenciais do Kubernetes recupere credenciais de acesso a dados privados do cofre de chaves.
Agora, atualize a política da chave KMS criada em Configurar conta e VPC da AWS para dados privados – Etapa 5: criar uma chave simétrica para o cofre seguro para permitir que a função personalizada credential-service-role obtenha as permissões personalizadas.
Acesse Serviços de gerenciamento de chaves e selecione a chave criada em Configurar conta e VPC da AWS para dados privados.
Clique em Política da chave e em Editar.
Exclua a permissão padrão e faça a atualização com as seguintes permissões:
{ "Version": "2012-10-17", "Id": "key-consolepolicy-3", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account id>:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account id>:role/credential-service-role" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" } ] }Nota
<accountID>é o número da conta da AWS para a qual o tratamento do ambiente de processamento de dados privado foi provisionado.Selecione Salvar alterações.
Etapa 4: EMR sem servidor (opcional)
Configure o EMR sem servidor se você estiver usando o processamento Spark/EMR.
Habilitar EMR
Faça login no Alteryx One.
No menu Perfil, selecione Console de administração.
No painel de navegação esquerdo, selecione Tratamento de dados privados.
Clique em Processamento Spark (EMR).
Clique em Atualizar.
Atualizar a função personalizada criada para a conexão S3
Adicione a política e a função personalizadas do AWS S3 como armazenamento de dados privado com estas permissões e relações de confiança para o EMR sem servidor:
Adicionar documento de política personalizada
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EMRServerlessAccess",
"Effect": "Allow",
"Action": [
"emr-serverless:CreateApplication",
"emr-serverless:UpdateApplication",
"emr-serverless:DeleteApplication",
"emr-serverless:ListApplications",
"emr-serverless:GetApplication",
"emr-serverless:StartApplication",
"emr-serverless:StopApplication",
"emr-serverless:StartJobRun",
"emr-serverless:CancelJobRun",
"emr-serverless:ListJobRuns",
"emr-serverless:GetJobRun"
],
"Resource": "*"
},
{
"Sid": "AllowNetworkInterfaceCreationViaEMRServerless",
"Effect": "Allow",
"Action": "ec2:CreateNetworkInterface",
"Resource": [
"arn:aws:ec2:*:*:network-interface/*",
"arn:aws:ec2:*:*:security-group/*",
"arn:aws:ec2:*:*:subnet/*"
],
"Condition": {
"StringEquals": {
"aws:CalledViaLast": "ops.emr-serverless.amazonaws.com"
}
}
},
{
"Sid":"AllowEMRServerlessServiceLinkedRoleCreation",
"Effect":"Allow",
"Action":"iam:CreateServiceLinkedRole",
"Resource":"arn:aws:iam:::role/aws-service-role/ops.emr-serverless.amazonaws.com/AWSServiceRoleForAmazonEMRServerless"
},
{
"Sid": "AllowPassingRuntimeRole",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam:::role/aac--emr-serverless-spark-execution",
"Condition": {
"StringLike": {
"iam:PassedToService": "emr-serverless.amazonaws.com"
}
}
},
{
"Sid": "S3ResourceBucketAccess",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::aac--emr-logs",
"arn:aws:s3:::aac--emr-logs/*"
]
}
]
}Adicionar relação de confiança da função personalizada
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:::role/aac--emr-serverless-spark-execution"
},
"Action": "sts:AssumeRole"
},
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "emr-serverless.amazonaws.com"
},
"Action": "sts:AssumeRole"
}Nota
Quando você exclui o tratamento de dados privados, a AWS substitui a relação de confiança do ARN aac-<xxxx-xxxxxxxxxxxx>-cluster-role por uma chave de acesso. Você também deve excluir a relação de confiança da IU.
Nota
Substitua a entidade da AWS pelo ARN da função do IAM criada pelo processo de provisionamento de tratamento de dados privados.
<accountid>: número da conta da AWS para a qual o tratamento do ambiente de processamento de dados privado foi provisionado.
<xxxx-xxxxxxxxxxxx>: últimos dois segmentos do ID do ambiente de processamento de dados privado. Você pode localizar esse ID na IU do administrador depois que o ambiente de processamento de dados privado tiver sido provisionado com sucesso.
Exemplo de cenário:
ID da conta: 123456789012
ID do ambiente de processamento de dados privado: b2a65fbd-95dc-490a-b69b-a1dc92df224e
ARN da função: arn:aws:iam::123456789012:role/aac-b69b-a1dc92df224e-emr-serverless-spark-execution
ARN S3: arn:aws:s3:::aac-aac-b69b-a1dc92df224e-emr-logs