Skip to main content

Workspace Execution dans AWS

Suivez ce guide pour déployer le module Workspace Execution pour le traitement des données privé AWS.

Condition préalable

Avant de déployer le module Workspace Execution, vous devez effectuer les étapes suivantes sur la page Configurer un compte AWS et un VPC pour les données privées

  1. Avoir configuré un VPC dédié à Alteryx One Platform, comme indiqué dans la section Créer un VPC.

  2. Avoir rattaché un rôle de compte de service et IAM de base au compte de service, comme indiqué dans la section Configurer l'IAM.

  3. Avoir déclenché avec succès le provisionnement du traitement des données privé, comme indiqué dans la section Déclencher le provisionnement de la gestion des données privées.

Configuration du compte

Étape 1 : Configurer l'IAM

Étape 1a : Créer une politique IAM Workspace Execution

Note

AAC_CEFD_SA_Policy est un exemple de nom de politique. Vous pouvez choisir n'importe quel nom pour la politique, mais il doit commencer par AAC_CEFD.

Vous devez créer une politique IAM personnalisée. Nommez-la AAC_CEFD_SA_Policy et utilisez le document de politique suivant. Nous vous recommandons d'utiliser l'onglet JSON au lieu de l'éditeur visuel. Alteryx One a besoin d'autorisations * pour s'exécuter. Attendez-vous à recevoir des avertissements de sécurité lorsque vous créez la politique. Notez que le document de politique IAM prend en charge la création de rôles et inclut une politique en ligne permettant à la fonction Lambda d'assumer des rôles.

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

Étape 1b : Marquer la politique IAM

Marquez la politique IAM personnalisée créée à l'étape 1a.

Nom de la balise

Valeur

AACResource

aac_sa_custom_policy

Étape 1c : Rattacher la politique IAM

Rattachez la politique IAM AAC_CEFD_SA_Policy au compte de service aac_automation_sa créé à la page Configurer un compte AWS et un VPC pour les données privées.

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

Note

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).

Étape 2 : Configurer le sous-réseau

Note

Si vous avez acheté Designer Cloud et EMR, configurez les sous-réseaux comme indiqué dans la section Live Query et EMR serverless dans AWS. Les ressources EMR et CEfD partagent les sous-réseaux d'options.

Workspace Execution dans un environnement de traitement de données privé, 1 sous-réseau est nécessaire. Le groupe contient 3 sous-réseaux individuels, chacun dans une zone de disponibilité différente.

  • public (obligatoire) : ce groupe n'exécute aucun service, mais il est utilisé pour les flux sortants du VPC.

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

  • public (obligatoire) : ce groupe n'exécute aucun service, mais il est utilisé pour les flux sortants du VPC.

  • private (obligatoire) : ce groupe exécute des services privés sur le PDP.

  • Groupe d'options : utilisez ce groupe si vous activez Workspace Execution dans votre environnement de traitement des données. Si vous activez cette option, un swarm AMI s'exécute dans ce sous-réseau pour gérer les tâches de traitement Designer qui s'exécutent dans le cloud.

Étape 2a : Créer des sous-réseaux dans le VPC

Configurez des sous-réseaux dans le VPC aac_vpc.

Créez des sous-réseaux et marquez-les comme indiqué dans l'exemple ci-dessous. Vous pouvez ajuster les CIDR et les valeurs de sous-réseau pour les adapter à votre architecture réseau.

Les grands espaces d'adressage sont conçus pour s'adapter à un cluster entièrement évolutif. Si nécessaire, vous pouvez choisir un espace d'adressage plus petit, mais vous risquez de rencontrer des problèmes de mise à l'échelle lors de charges de traitement importantes.

Important

Vous devez marquer les sous-réseaux avec le nom de la balise et la valeur de la balise comme indiqué dans le tableau.

CIDR

Nom du sous-réseau

Sous-réseau

AZ

Nom de la balise

Valeur de la balise

10.10.0.0/21

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

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

Étape 2b : Tables de routage des sous-réseaux

Créez la table de routage pour vos sous-réseaux.

Note

Cette table de routage est un exemple.

Nom du sous-réseau

Destination de routage

Cible

Commentaires

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.

publique

Bloc CIDR /18

Bloc CIDR /21

0.0.0.0/0

local

local

<gateway id>

Configurez les mêmes routes vers les tables de routage des 3 sous-réseau AZ.

privé

Bloc CIDR /18

Bloc CIDR /21

<id du préfixe s3>

0.0.0.0/0

local

local

<id du point de terminaison vpce>

<gateway id>

Configurez les mêmes routes vers les tables de routage des 3 sous-réseau AZ.

0.0.0.0/0 devrait sortir vers le réseau public.

option

Bloc CIDR /21

<id du préfixe s3>

0.0.0.0/0

Locale

<id du point de terminaison vpce>

<gateway id>

Configurez les mêmes routes vers les tables de routage des 3 sous-réseau AZ.

En fait, 0.0.0.0/0 devrait sortir vers le réseau public.

Note

Votre <gateway id> pourrait correspondre à une passerelle NAT de zone ayant été créée via AZ ou à une passerelle de transit, en fonction de votre architecture réseau. S'il s'agit d'une passerelle NAT, créez une passerelle NAT via AZ pour les sous-réseaux publics.

Traitement des données privé

Attention

La modification ou la suppression de ressources de cloud public provisionnées par Alteryx One après la configuration de gestion des données privées peut entraîner des incohérences. Ces incohérences peuvent causer des erreurs lors de l'exécution de la tâche ou lors du désapprovisionnement de la configuration de gestion des données privées.

Étape 1 : Déclencher le déploiement Workspace Execution

Le provisionnement du plan des données est déclenché à partir de la console d'administration dans Alteryx One. Vous devez disposer des privilèges Admin de l'espace de travail dans un espace de travail pour pouvoir le voir.

  1. Depuis la page d'accueil Alteryx One, sélectionnez Menu Profil, puis sélectionnez Admin de l'espace de travail.

  2. Dans la console d'administration, sélectionnez Gestion des données privées, puis Traitement.

  3. Cochez la case Workspace Execution, puis sélectionnez Mettre à jour.

Sélectionner Mettre à jour déclenche le déploiement du cluster et des ressources dans le compte AWS. Cela permet d'exécuter une série de contrôles de validation afin de vérifier la configuration correcte du compte AWS.

Note

Le processus de provisionnement dure environ 35 à 40 minutes.

Une fois le provisionnement terminé, vous pouvez afficher les ressources créées (par exemple, les instances EC2 et les groupes de nœuds) via la console AWS. Il est essentiel de ne pas les modifier vous-même. Les modifications manuelles peuvent entraîner des problèmes avec le fonctionnement du plan des données privé.

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.

Note

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