Skip to main content

Workspace Execution in AWS

Questa guida spiega come implementare il modulo Workspace Execution per l'elaborazione privata dei dati in AWS.

Prerequisito

Prima di implementare il modulo Workspace Execution, è necessario completare la procedura che segue nella pagina Configurazione dell'account AWS e di VPC per i dati privati...

  1. Configurazione di un VPC dedicato a Alteryx One Platform, come indicato nella sezione Creazione di un VPC.

  2. Creazione di un account di servizio e associazione del ruolo IAM a tale account, come indicato nella sezione Configurazione di IAM.

  3. Attivazione corretta del provisioning dell'elaborazione dati privata, come indicato nella sezione Attivazione del provisioning dell'elaborazione dati privata.

Configurazione dell'account

Passaggio 1: configurazione del modulo IAM

Passaggio 1a: creazione del criterio IAM per Workspace Execution

Nota

Il nome del criterio AAC_CEFD_SA_Policy è solo un esempio. È possibile scegliere qualsiasi nome per il criterio, purché cominci con AAC_CEFD.

È necessario creare una policy IAM personalizzata, assegnare il nome AAC_CEFD_SA_Policy e usare il documento di criteri seguente. È consigliabile utilizzare la scheda JSON al posto dell'editor visivo. Per l'esecuzione di Alteryx One sono necessarie alcune autorizzazioni *. Durante la creazione della policy verranno probabilmente visualizzati alcuni avvisi di sicurezza. Ricorda che il documento di criteri IAM supporta la creazione dei ruoli e include un criterio inline che consente alla funzione Lambda di assumere i ruoli assegnati.

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

Passaggio 1b: aggiunta di un tag al criterio IAM.

Aggiungi un tag al criterio IAM personalizzato creato nel Passaggio 1a.

Nome tag

Valore

AACResource

aac_sa_custom_policy

Passaggio 1c: associazione del criterio IAM

Associa il criterio IAM AAC_CEFD_SA_Policy all'account di servizio aac_automation_sa creato nella pagina Configurazione dell'account AWS e di VPC per i dati privati.

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

Passaggio 2: configurazione della sottorete

Nota

Se hai acquistato Designer Cloud ed EMR, configura le sottoreti come indicato in Live Query ed EMR serverless in AWS. Le risorse di EMR e CEfD condividono le sottoreti di tipo option.

Negli ambienti di elaborazione privata dei dati, Workspace Executionrichiede 1 gruppo di sottoreti contenente 3 sottoreti distinte, ciascuna con una zona di disponibilità diversa.

  • public (obbligatorio): questo gruppo non esegue alcun servizio, ma viene utilizzato per uscire dal VPC.

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

  • public (obbligatorio): questo gruppo non esegue alcun servizio, ma viene utilizzato per uscire dal VPC.

  • private (obbligatorio): questo gruppo esegue i servizi privati del sistema PDP.

  • option: usa questo gruppo se abiliti Workspace Execution all'interno del tuo ambiente di elaborazione privata dei dati. Se abiliti questa opzione, in questa sottorete viene eseguito uno swarm AMI per gestire i processi di elaborazione Designer eseguiti nel cloud.

Passaggio 2a: creazione di sottoreti nel VPC

Devi configurare le sottoreti nel VPC aac_vpc.

Crea le sottoreti e assegna loro i tag come indicato nell'esempio che segue. Puoi modificare i valori di CIDR e sottoreti in base all'architettura della rete in uso.

Gli spazi degli indirizzi molto grandi sono progettati in modo da consentire la gestione di un cluster completamente espanso. Se necessario, puoi scegliere uno spazio di indirizzi più piccolo, ma con i carichi di elaborazione più pesanti rischi di incontrare problemi di scalabilità.

Importante

Devi assegnare alle sottoreti i valori di Nome tag e Valore tag indicati nella tabella.

CIDR

Nome sottorete

Sottorete

Zona disponibilità

Nome tag

Valore tag

10.10.0.0/21

opzione

10.10.4.0/24

AZa

AACSubnet

opzione

opzione

10.10.5.0/24

AZb

AACSubnet

opzione

opzione

10.10.6.0/24

AZc

AACSubnet

opzione

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

Passaggio 2b: tabelle di routing delle sottoreti

È necessario creare una tabella di routing per le sottoreti.

Nota

Questa tabella di routing è solo un esempio.

Nome sottorete

Destinazione route

Target

Commenti

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.

public

Blocco CIDR /18

Blocco CIDR /21

0.0.0.0/0

local

local

<gateway id>

Configura le stesse route nella tabelle di routing delle zone di disponibilità di tutte e 3 le reti.

private

Blocco CIDR /18

Blocco CIDR /21

<s3 prefix id>

0.0.0.0/0

local

local

<vpce endpoint id>

<gateway id>

Configura le stesse route nella tabelle di routing delle zone di disponibilità di tutte e 3 le reti.

0.0.0.0/0 deve essere in uscita dalla rete pubblica.

opzione

Blocco CIDR /21

<s3 prefix id>

0.0.0.0/0

Locale

<vpce endpoint id>

<gateway id>

Configura le stesse route nella tabelle di routing delle zone di disponibilità di tutte e 3 le reti.

Sostanzialmente, 0.0.0.0/0 deve essere in uscita dalla rete pubblica.

Nota

Il valore <gateway id> può indicare un gateway NAT creato a livello di zona di disponibilità o un gateway di transito, a seconda dell'architettura della rete in uso. Nel caso di un gateway NAT, devi creare un gateway NAT per ogni zona di disponibilità delle sottoreti pubbliche.

Elaborazione dei dati privati

Attenzione

La modifica o la rimozione di qualsiasi risorsa del cloud pubblico fornita da Alteryx One dopo la configurazione della gestione dei dati privati, può causare incongruenze. Tali incongruenze possono causare errori durante l'esecuzione del processo o il deprovisioning della configurazione di gestione dei dati privati.

Passaggio 1: deployment del trigger Workspace Execution

Il provisioning del piano dati viene attivato dalla console di amministrazione all'interno di Alteryx One. Per vederlo, devi avere i privilegi di amministrazione dello spazio di lavoro in questione.

  1. Nella pagina di destinazione Alteryx One, seleziona il Menu del profilo, quindi seleziona Amministratore spazio di lavoro.

  2. Nella console di amministrazione, seleziona Trattamento dati privato, quindi seleziona Elaborazione.

  3. Seleziona la casella di spunta Workspace Execution, quindi seleziona Aggiorna.

Quando selezioni Aggiorna, viene avviata l'implementazione del cluster e delle risorse nell'account AWS. Viene eseguita una serie di controlli di convalida per verificare che la configurazione dell'account AWS sia corretta.

Nota

Il processo di provisioning richiede circa 35-40 minuti.

Al termine del provisioning, puoi visualizzare le risorse create (ad esempio le istanze EC2 e i gruppi di nodi) tramite la console AWS. Evita di modificarle personalmente, perché le modifiche manuali possono causare problemi con il funzionamento del piano dati privato.

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.