Skip to main content

Workspace Execution no AWS

Siga este guia para implantar o módulo Workspace Execution para processamento de dados privados da AWS.

Pré-requisito

Antes de implantar o módulo Workspace Execution, conclua estas etapas na página Configurar conta e VPC da AWS para dados privados...

  1. Ter configurado uma VPC dedicada ao Alteryx One Platform, conforme mencionado na seção Criar uma VPC.

  2. Ter conectado a conta de serviço e a função base do IAM à conta de serviço, conforme mencionado na seção Configurar o IAM.

  3. 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 Workspace Execution

Nota

AAC_CEFD_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_CEFD.

Você precisa criar uma política do IAM personalizada. Dê a ela o nome AAC_CEFD_SA_Policy e use o seguinte documento de política. 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. Observe que o documento de política do IAM é compatível com a criação de função e inclui uma política em linha para que a função do Lambda assuma funções.

{
    "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:UpdateAssumeRolePolicy",
                "iam:UpdateOpenIDConnectProviderThumbprint",
                "iam:UpdateRole"
            ],
            "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:DescribeAddonVersions",
                "eks:ListClusters",
                "elasticloadbalancing:*",
                "events:DeleteRule",
                "events:DescribeRule",
                "events:ListTagsForResource",
                "events:ListTargetsByRule",
                "events:PutRule",
                "events:PutTargets",
                "events:RemoveTargets",
                "iam:AddRoleToInstanceProfile",
                "iam:CreateInstanceProfile",
                "iam:DeleteInstanceProfile",
                "iam:GetAccountName",
                "iam:GetInstanceProfile",
                "iam:ListAccountAliases",
                "iam:ListRoles",
                "iam:RemoveRoleFromInstanceProfile",
                "iam:TagInstanceProfile",
                "iam:UntagInstanceProfile",
                "kms:CreateKey",
                "lambda:AddPermission",
                "lambda:CreateFunction",
                "lambda:DeleteFunction",
                "lambda:GetFunction",
                "lambda:GetFunctionCodeSigningConfig",
                "lambda:GetPolicy",
                "lambda:ListVersionsByFunction",
                "lambda:RemovePermission",
                "lambda:UntagResource",
                "lambda:UpdateFunctionCode",
                "lambda:UpdateFunctionConfiguration",
                "lambda:tagResource",
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DeleteLogGroup",
                "logs:DeleteLogStream",
                "logs:DescribeLogGroups",
                "logs:ListTagsForResource",
                "logs:ListTagsLogGroup",
                "logs:PutLogEvents",
                "logs:PutRetentionPolicy",
                "logs:TagLogGroup",
                "logs:TagResource",
                "logs:UntagLogGroup",
                "logs:UntagResource",
                "memorydb:CreateAcl",
                "memorydb:CreateCluster",
                "memorydb:CreateSubnetGroup",
                "memorydb:CreateUser",
                "memorydb:DeleteAcl",
                "memorydb:DeleteCluster",
                "memorydb:DeleteSubnetGroup",
                "memorydb:DeleteUser",
                "memorydb:DescribeACLs",
                "memorydb:DescribeClusters",
                "memorydb:DescribeSubnetGroups",
                "memorydb:DescribeUsers",
                "memorydb:ListTags",
                "memorydb:TagResource",
                "memorydb:UpdateAcl",
                "memorydb:UpdateCluster",
                "memorydb:UpdateSubnetGroup",
                "memorydb:UpdateUser",
                "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"
            ],
            "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_CEFD_SA_Policy à conta de serviço aac_automation_sa criada na página Configurar conta e VPC da AWS para dados privados.

Step 1d: Enable CEFD Environment Customization

CEFD environment customization lets customers upload custom drivers and connectors to an S3 bucket. The feature flag feature.privateDataPlaneHandling.admin.cEFDEnvironmentCustomizationsEnabled to be set to true to enable customization setup.

Step 1d.1 Create CEFD Customization IAM Policy

Nota

AAC_CEFD_Customization_SA_Policy as policy name is referred to as an example in this guide. You can choose any name for the policy, but the name must start with AAC_CEFD_customization.

You need to create a custom IAM policy. Name it AAC_CEFD_Customization_SA_Policy and attach the following policy document.

We recommend using the JSON tab instead of the visual editor. Alteryx Analytics Cloud does require some permissions to run. Expect some security warnings when you create the policy.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": [
                "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"
            ],
            "Resource": "*"
        }
    ]
}
Step 1d.2: Tag the IAM policy

Tag the custom IAM policy created on Step 1d.1.

Tag Name

Value

AACResource

aac_sa_custom_policy

Step 1d.3: Attach IAM policy

Attach the AAC_CEFD_Customization_SA_Policy IAM policy to the aac_automation_sa service account created in Create a IAM user (service account).

Etapa 2: configurar a sub-rede

Nota

Se você comprou o Designer Cloud e o EMR, configure as sub-redes conforme mencionado em Live Query e EMR sem servidor na AWS. Os recursos EMR e CEfD compartilham as sub-redes de opção.

O Workspace Execution em um ambiente de processamento de dados privados requer um grupo de sub-redes. O grupo contém 3 sub-redes individuais, cada uma em uma zona de disponibilidade diferente.

  • pública (obrigatório): esse grupo não executa nenhum serviço, mas é usado para sair da VPC.

  • eks_node group (required) - The EKS cluster uses this subnet to execute Alteryx software jobs (connectivity, conversion, processing, publishing).

  • pública (obrigatório): esse grupo não executa nenhum serviço, mas é usado para sair da VPC.

  • privada (obrigatório): esse grupo executa serviços privados para o PDP.

  • Grupo de opções : use esse grupo se você habilitar o Workspace Execution em seu ambiente de processamento de dados. Se você habilitar essa opção, um swarm de AMI será executado nessa sub-rede para lidar com trabalhos de processamento do Designer executados na nuvem.

Etapa 2a: criar sub-redes na VPC

Configure sub-redes na VPC aac_vpc.

Crie sub-redes e marque-as conforme mostrado no 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

10.10.0.0/21

opção

10.10.4.0/24

AZa

AACSubnet

opção

opção

10.10.5.0/24

AZb

AACSubnet

opção

opção

10.10.6.0/24

AZc

AACSubnet

opção

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

public

10.10.0.128/27

AZa

AACSubnet

public

public

10.10.0.160/27

AZb

AACSubnet

public

public

10.10.0.192/27

AZc

AACSubnet

public

private

10.10.1.0/25

AZa

AACSubnet

Private

private

10.10.1.128/25

AZb

AACSubnet

Private

private

10.10.2.0/25

AZc

AACSubnet

Private

option

10.10.4.0/24

AZa

AACSubnet

Option

option

10.10.5.0/24

AZb

AACSubnet

Option

option

10.10.6.0/24

AZc

AACSubnet

Option

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

/18 CIDR Block

/21 CIDR Block

<s3 prefix id>

0.0.0.0/0

local

local

<vpce endpoint id>

<gateway id>

Configure the same routes to all 3 AZs subnet routing tables.

eks_control

/18 CIDR Block

/21 CIDR Block

<s3 prefix id>

0.0.0.0/0

local

local

<vpce endpoint id>

<gateway id>

Configure the same routes to all 3 AZs subnet routing tables.

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 /21

<s3 prefix id>

0.0.0.0/0

Local

<vpce endpoint id>

<gateway id>

Configure as mesmas rotas para todas as três tabelas de roteamento de sub-rede de AZs.

Basicamente, a 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 Workspace Execution

O provisionamento do plano de dados é acionado a partir do console de administração dentro do Alteryx One. Você precisa de Privilégios do Administrador do espaço de trabalho dentro de um espaço de trabalho para vê-lo.

  1. Na página de chegada do Alteryx One, selecione o menu Perfil e, em seguida, Administrador do espaço de trabalho.

  2. No console de administração, selecione Tratamento de dados privados e, em seguida, Processamento.

  3. Marque a caixa de seleção Workspace Execution 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 plano de dados privados.

Step 2: Update KMS Key policy

After successful creation of Private Data Processing, a custom role credential-service-role is created in the account to allow the k8s credential service account to retrieve private data access credentials from the key vault.

Update the policy of the KMS Key created in Create a Symmetric Key for Secure Vault to allow the custom role credential-service-role with the permissions below.

Nota

<account id> is the AWS account number where Private Data Processing has been provisioned.

  1. Go to Key Management Services and select the key created in Create a Symmetric Key for Secure Vault.

  2. Select Key Policy and click Edit.

  3. Delete the default permission and update with the permissions below:

    {
      "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": "*"
        }
      ]
    }
  4. Click Save changes.