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...
Configurazione di un VPC dedicato a Alteryx One Platform, come indicato nella sezione Creazione di un VPC.
Creazione di un account di servizio e associazione del ruolo IAM a tale account, come indicato nella sezione Configurazione di IAM.
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.
Nella pagina di destinazione Alteryx One, seleziona il Menu del profilo, quindi seleziona Amministratore spazio di lavoro.
Nella console di amministrazione, seleziona Trattamento dati privato, quindi seleziona Elaborazione.
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.
Go to Key Management Services and select the key created in Create a Symmetric Key for Secure Vault.
Select Key Policy and click Edit.
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": "*" } ] }Click Save changes.