Designer Cloud y EMR sin servidor en AWS
Sigue esta guía para implementar el módulo de Designer Cloud para el procesamiento privado de datos de AWS.
Requisitos previos
Antes de implementar el módulo de Designer Cloud, debes completar estos pasos en la página de Configurar la cuenta de AWS y VPC para datos privados:
La VPC dedicada a Alteryx One Platform se configuró tal y como se menciona en la sección Crear una VPC.
Cuenta de servicio y política de IAM base adjuntos a la cuenta de servicio tal y como se menciona en la sección Configurar IAM.
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 Designer Cloud
Nota
AAC_DesignerCloud_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_DesignerCloud.
Debes crear una política de IAM personalizada. Nómbrala AAC_DesignerCloud_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.
{
"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:*"
}
]
}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_DesignerCloud_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.
Paso 2: Configurar la subred
Nota
Designer Cloud comparte una configuración de subred con aprendizaje automático, Auto Insights y App Builder. Si estás implementando más de una de esas aplicaciones, solo debes configurar las subredes una vez.
Designer Cloud en un entorno de procesamiento privado de datos requiere hasta cinco grupos de subredes. Cada grupo contiene tres subredes individuales, cada una en una zona de disponibilidad diferente.
Grupo eks_control (obligatorio): el plano de control EKS utiliza esta subred para aceptar solicitudes de ejecución de tareas entrantes.
Grupo eks_node (obligatorio): el clúster de EKS utiliza esta subred para ejecutar tareas de software de Alteryx (por ejemplo, conectividad, conversión, procesamiento, publicación).
Grupo public (obligatorio): este grupo no ejecuta ningún servicio, pero el grupo
eks_nodelo utiliza para salir del clúster.Grupo private (obligatorio): este grupo ejecuta servicios privados para el procesamiento privado de datos.
Grupo option (opcional): utiliza este grupo si habilitas el procesamiento de EMR dentro de tu entorno de procesamiento privado de datos. Los servicios de EMR no se ejecutan en el clúster, pero se necesita el espacio de IP para interactuar con los puntos de conexión de EMR sin servidor de AWS.
Paso 2a: Crear subredes en la VPC
Configura las subredes en la VPC aac_vpc.
Crea subredes y asígnales etiquetas según 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 | Nota |
|---|---|---|---|---|---|---|
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 | SPARE | |||||
10.64.32.0/19 | SPARE (se puede configurar para una actualización azul/verde más tarde) | |||||
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 | SPARE | |||||
público | 10.10.0.128/27 | AZa | AACSubnet | público | ||
público | 10.10.0.160/27 | AZb | AACSubnet | público | ||
público | 10.10.0.192/27 | AZc | AACSubnet | público | ||
10.10.0.224/27 | SPARE | |||||
privado | 10.10.1.0/25 | AZa | AACSubnet | privado | ||
privado | 10.10.1.128/25 | AZb | AACSubnet | privado | ||
privado | 10.10.2.0/25 | AZc | AACSubnet | privado | ||
10.10.1.128/25 | SPARE | |||||
opción | 10.10.4.0/24 | AZa | AACSubnet | opción | ||
opción | 10.10.5.0/24 | AZa | AACSubnet | opción | ||
opción | 10.10.6.0/24 | AZa | AACSubnet | opción | ||
10.10.7.0/24 | SPARE |
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 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. |
eks_control | /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. |
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 | /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. |
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 privado de datos
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 Designer Cloud
El aprovisionamiento de Designer Cloud se activa desde la consola de administrador en Alteryx One. Necesitas privilegios de administrador de espacio de trabajo para poder verlo dentro de un espacio de trabajo.
En la página inicial de Alteryx One, selecciona el ícono de círculo en la parte superior derecha con tus iniciales en él. Selecciona Consola de administración en el menú.
Selecciona Manejo privado de datos en el menú de navegación de la izquierda.
Selecciona la casilla de verificación de Designer Cloud 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.
Una vez finalizado 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 procesamiento privado de datos.
Paso 2: Anexar la relación de confianza del rol personalizado
Nota
Este paso solo es necesario si utilizaste un rol entre cuentas para los permisos cuando configuraste el almacenamiento privado de datos. Si utilizaste una clave de acceso para ese paso, puedes omitir este paso.
Importante
Debes esperar a que se complete correctamente el paso 1 antes de continuar con este paso.
Si tu almacenamiento privado de datos utiliza un rol entre cuentas, entonces para que tu nuevo entorno de procesamiento privado de datos pueda leer/escribir desde tu almacenamiento privado de datos, debes actualizar ese rol para agregar una relación de confianza con tu nuevo rol de clúster de Kubernetes:
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<accountid>:role/aac-<xxxx-xxxxxxxxxxxx>-cluster-role"
},
"Action": "sts:AssumeRole"
}Nota
Reemplaza AWS Principal por el ARN del rol de IAM creado durante el proceso de aprovisionamiento para el manejo privado de datos.
<accountid>: número de cuenta de AWS en el que se ha aprovisionado el manejo del entorno de procesamiento privado de datos.
<xxxx-xxxxxxxxxx>: los dos últimos segmentos del identificador del entorno de procesamiento privado de datos. Puedes encontrar este identificador en la interfaz de usuario de administración una vez que se haya configurado correctamente el entorno de procesamiento privado de datos.
Situación de ejemplo:
Identificador de la cuenta: 123456789012
Identificador del entorno de procesamiento privado de datos: b2a65fbd-95dc-490a-b69b-a1dc92df224e
ARN del rol: arn:aws:iam::123456789012:role/aac-b69b-a1dc92df224e-cluster-role
Para obtener más información, consulta https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.html.
Paso 3: Actualizar la política de claves de KMS
Una vez que crees correctamente el procesamiento privado de datos, se agregará un rol personalizado llamado credential-service-role a tu cuenta. Este rol permite a la cuenta de servicio de credenciales de Kubernetes recuperar credenciales de acceso a datos privados del almacén de claves.
Ahora, actualiza la política de la clave de KMS creada en Configurar la cuenta de AWS y VPC para datos privados - Paso 5: Crear una clave simétrica para almacén seguro para permitir el rol personalizado de credential-service-role con permisos personalizados.
Ve a Servicios de administración de claves y selecciona la clave creada Configurar la cuenta de AWS y VPC para datos privados.
Selecciona Política de claves y selecciona Editar.
Elimina el permiso predeterminado y actualiza con lo siguiente:
{ "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>es el número de cuenta de AWS en el que se ha aprovisionado el manejo del entorno de procesamiento privado de datos.Selecciona Guardar cambios.
Paso 4: EMR sin servidor (opcional)
Configura EMR sin servidor si utilizas el procesamiento de Spark/EMR.
Habilitar EMR
Iniciar sesión en Alteryx One.
En el menú Perfil, selecciona Consola de administrador.
En el panel de navegación izquierdo, selecciona Manejo privado de datos.
Selecciona Procesamiento de Spark (EMR).
Selecciona Actualizar.
Actualiza el rol personalizado creado para la conexión S3
Agrega la política personalizada y el rol personalizado de AWS como Almacenamiento privado de datos S3 con estos permisos y relaciones de confianza para EMR sin servidor:
Anexa el 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/*"
]
}
]
}Anexa la relación de confianza del rol personalizado
{
"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
Cuando eliminas el manejo privado de datos, AWS reemplaza la relación de confianza del ARN aac-<xxxxxxxxxxx>-cluster-role por una clave de acceso. También debes eliminar la relación de confianza de la interfaz de usuario.
Nota
Reemplaza AWS Principal por el ARN del rol de IAM creado durante el proceso de aprovisionamiento para el manejo privado de datos.
<accountid>: número de cuenta de AWS en el que se ha aprovisionado el manejo del entorno de procesamiento privado de datos.
<xxxx-xxxxxxxxxx>: los dos últimos segmentos del identificador del entorno de procesamiento privado de datos. Puedes encontrar este identificador en la interfaz de usuario de administración una vez que se haya configurado correctamente el entorno de procesamiento privado de datos.
Situación de ejemplo:
Identificador de la cuenta: 123456789012
Identificador del entorno de procesamiento privado de datos: b2a65fbd-95dc-490a-b69b-a1dc92df224e
ARN del rol: arn:aws:iam::123456789012:role/aac-b69b-a1dc92df224e-emr-serverless-spark-execution
ARN de S3: arn:aws:s3:::aac-aac-b69b-a1dc92df224e-emr-logs