Skip to main content

Workspace Execution en AWS

Sigue esta guía para implementar el módulo de Workspace Execution para el procesamiento privado de datos de AWS.

Requisitos previos

Antes de implementar el módulo de Workspace Execution, debes completar estos pasos en la página de Configurar la cuenta de AWS y VPC para datos privados:

  1. Se configuró una VPC dedicada a Alteryx One Platform como se menciona en la sección Crear una VPC.

  2. Cuenta de servicio y rol de IAM base adjuntos a la cuenta de servicio tal y como se menciona en la sección Configurar IAM.

  3. Se activó correctamente el aprovisionamiento de procesamiento privado de datos, como se menciona en la sección Aprovisionamiento de manejo privado de datos de activación.

Configuración de cuenta

Paso 1: Cómo configurar IAM

Paso 1a: Crear una política de IAM de Workspace Execution

Nota

AAC_CEFD_SA_Policy es un nombre de política de ejemplo. Puedes elegir cualquier nombre para la política, pero el nombre debe comenzar con AAC_CEFD.

Debes crear una política de IAM personalizada. Nómbrala AAC_CEFD_SA_Policy y utiliza el siguiente documento de política. Recomendamos utilizar la pestaña JSON en lugar del editor visual. Alteryx One requiere algunos permisos de * para ejecutarse. Espera algunas advertencias de seguridad cuando crees la política. Ten en cuenta que el documento de la política de IAM admite la creación de roles e incluye una política en línea para que la función Lambda asuma roles.

{
    "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:*"
        }
    ]
}

Paso 1b: Etiquetar la política de IAM

Etiqueta la política de IAM personalizada que creaste en el paso 1a.

Nombre de la etiqueta

Valor

AACResource

aac_sa_custom_policy

Paso 1c: Adjuntar la política de IAM

Adjunta la política de IAM de AAC_CEFD_SA_Policy a la cuenta de servicio aac_automation_sa creada en la página Configurar la cuenta de AWS y VPC para datos 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).

Paso 2: Configurar la subred

Nota

Si compraste Designer Cloud y EMR, configura las subredes como se menciona en Live Query y EMR sin servidor en AWS. Los recursos EMR y CEfD comparten las subredes de opciones.

Workspace Execution en un entorno de procesamiento privado de datos requiere un grupo de subredes. El grupo contiene tres subredes individuales, cada una en una zona de disponibilidad diferente.

  • público (obligatorio): este grupo no ejecuta ningún servicio, pero se utiliza para salir de la VPC.

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

  • público (obligatorio): este grupo no ejecuta ningún servicio, pero se utiliza para salir de la VPC.

  • privado (obligatorio): este grupo ejecuta servicios privados para el PDP.

  • grupo de opciones: utiliza este grupo si habilitas Workspace Execution dentro de tu entorno de procesamiento de datos. Si habilitas esta opción, se ejecuta un enjambre AMI en esta subred para manejar los trabajos de procesamiento de Designer que se ejecutan en la nube.

Paso 2a: Crear subredes en la VPC

Configura las subredes en la VPC aac_vpc.

Crea subredes y etiquétalas como se muestra en el siguiente ejemplo. Puedes ajustar los valores de CIDR y de subredes para que se ajusten a tu arquitectura de red.

Los espacios de direcciones grandes están diseñados para adaptarse a un clúster totalmente escalado. Puedes elegir un espacio de direcciones más pequeño si es necesario, pero podrías tener problemas de escalado bajo cargas de procesamiento pesadas.

Importante

Debes etiquetar las subredes con Nombre de la etiqueta y Valor de la etiqueta como se menciona en la tabla.

CIDR

Nombre de la subred

Subred

AZ

Nombre de la etiqueta

Valor de la etiqueta

10.10.0.0/21

opción

10.10.4.0/24

AZa

AACSubnet

opción

opción

10.10.5.0/24

AZb

AACSubnet

opción

opción

10.10.6.0/24

AZc

AACSubnet

opción

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

Paso 2b: Tablas de ruta de subred

Crea la tabla de rutas para tus subredes.

Nota

Esta tabla de rutas es un ejemplo.

Nombre de la subred

Destino de la ruta

Objetivo

Comentarios

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úblico

/18 Bloque de CIDR

/21 Bloque de CIDR

0.0.0.0/0

local

local

<id. de puerta de enlace>

Configura las mismas rutas en las tres tablas de enrutamiento de subred AZ.

privado

/18 Bloque de CIDR

/21 Bloque de CIDR

<id. del prefijo s3>

0.0.0.0/0

local

local

<id. del punto de conexión de vpce>

<id. de puerta de enlace>

Configura las mismas rutas en las tres tablas de enrutamiento de subred AZ.

0.0.0.0/0 debe estar saliendo a la red pública.

opción

/21 Bloque de CIDR

<id. del prefijo s3>

0.0.0.0/0

Local

<id. del punto de conexión de vpce>

<id. de puerta de enlace>

Configura las mismas rutas en las tres tablas de enrutamiento de subred AZ.

Básicamente, 0.0.0.0/0 debe estar saliendo a la red pública.

Nota

Tu <id> de puerta de enlace puede ser una puerta de enlace NAT zonal creada por AZ o una puerta de enlace de tránsito, según la arquitectura de tu red. Si la puerta de enlace es NAT, crea una puerta de enlace NAT por AZ para las subredes públicas.

Procesamiento de datos privados

Atención

Cambiar o eliminar cualquier recurso de nube pública provisionado por Alteryx One después de configurar el Manejo privado de datos puede causar incoherencias. Estas incoherencias pueden provocar errores durante la ejecución de tareas o al desaprovisionar la configuración de Manejo privado de datos.

Paso 1: Activar la implementación de Workspace Execution

El aprovisionamiento del plano de datos se activa desde la consola de administrador dentro de Alteryx One. Necesitas privilegios de administrador de espacio de trabajo para poder verlo dentro de un espacio de trabajo.

  1. En la página inicial de Alteryx One, selecciona el menú Perfil y, a continuación, selecciona Administrador de espacio de trabajo.

  2. Desde la consola de administración, selecciona Manejo privado de datos y, a continuación, selecciona Procesamiento.

  3. Selecciona la casilla de verificación de Workspace Execution y, a continuación, selecciona Update.

Al seleccionar Actualizar, se activa la implementación del clúster y los recursos en la cuenta de AWS. Esto ejecuta un conjunto de comprobaciones de validación para verificar la configuración correcta de la cuenta de AWS.

Nota

El proceso de aprovisionamiento tarda aproximadamente entre 35 y 40 minutos en completarse.

Después de completar el aprovisionamiento, puedes ver los recursos creados (por ejemplo, instancias de EC2 y grupos de nodos) a través de la consola de AWS. Es muy importante que no los modifiques por tu cuenta. Los cambios manuales pueden causar problemas con la función del plano de datos privado.

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.