Designer Cloud ed EMR serverless in AWS
Questa guida spiega come implementare il modulo Designer Cloud per l'elaborazione privata dei dati in AWS.
Prerequisito
Prima di implementare il modulo Designer Cloud, è 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 criterio IAM di base 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 Designer Cloud
Nota
Il nome del criterio AAC_DesignerCloud_SA_Policy è solo un esempio. È possibile scegliere qualsiasi nome per il criterio, purché cominci con AAC_DesignerCloud.
È necessario creare una policy IAM personalizzata, assegnare il nome AAC_DesignerCloud_SA_Policy e associare 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.
{
"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:*"
}
]
}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_DesignerCloud_SA_Policy all'account di servizio aac_automation_sa creato nella pagina Configurazione dell'account AWS e di VPC per i dati privati.
Passaggio 2: configurazione della sottorete
Nota
Designer Cloud Condivide una configurazione di sottorete con machine Learning , Auto Insightse App Builder . Se distribuisci più di una di queste applicazioni, devi configurare le subnet una sola volta.
Negli ambienti di elaborazione privata dei dati Designer Cloud richiede 5 gruppi di sottoreti, ciascuno dei quali deve contenente 3 sottoreti distinte con zone di disponibilità diverse.
Gruppo eks_control (obbligatorio): il piano di controllo EKS utilizza questa sottorete per accettare le richieste di esecuzione dei processi in entrata.
Gruppo eks_node (obbligatorio): il cluster EKS utilizza questa sottorete allo scopo di eseguire i processi software Alteryx (ad esempio per connettività, conversione, elaborazione e pubblicazione).
Gruppo public (obbligatorio): questo gruppo non esegue alcun servizio, ma viene utilizzato dal gruppo
gke_nodeper uscire dal cluster.Gruppo private (obbligatorio): questo gruppo esegue i servizi privati per l'elaborazione privata dei dati.
Gruppo option (facoltativo): usa questo gruppo se abiliti EMR all'interno del tuo ambiente di elaborazione privata dei dati. I servizi EMR non vengono eseguiti nel cluster, ma lo spazio degli indirizzi IP è necessario per interagire con gli endpoint AWS serverless di EMR.
Passaggio 2a: creazione di sottoreti nel VPC
Devi configurare le sottoreti nel VPC aac_vpc.
Devi creare e taggare le sottoreti come mostrato nell'esempio seguente. 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 | 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 | Di riserva | |||||
10.64.32.0/19 | L'indirizzo di riserva (può essere configurato in un secondo momento, per l'upgrade blu/verde) | |||||
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 | Di riserva | |||||
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 | ||
10.10.0.224/27 | Di riserva | |||||
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 | ||
10.10.1.128/25 | Di riserva | |||||
opzione | 10.10.4.0/24 | AZa | AACSubnet | opzione | ||
opzione | 10.10.5.0/24 | AZa | AACSubnet | opzione | ||
opzione | 10.10.6.0/24 | AZa | AACSubnet | opzione | ||
10.10.7.0/24 | Di riserva |
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 | Blocco CIDR /18 Blocco CIDR /21 <s3 prefix id> 0.0.0.0/0 | Locale Locale <vpce endpoint id> <gateway id> | Configura le stesse route nella tabelle di routing delle zone di disponibilità di tutte e 3 le reti. |
eks_control | Blocco CIDR /18 Blocco CIDR /21 <s3 prefix id> 0.0.0.0/0 | Locale Locale <vpce endpoint id> <gateway id> | Configura le stesse route nella tabelle di routing delle zone di disponibilità di tutte e 3 le reti. |
public | Blocco CIDR /18 Blocco CIDR /21 0.0.0.0/0 | Locale Locale <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 | Locale Locale <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 /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. |
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 Designer Cloud
Il provisioning di Designer Cloud viene attivato dalla console di amministrazione in Alteryx One. Per vederlo, devi avere i privilegi di amministrazione dello spazio di lavoro in questione.
Nella pagina di destinazione di Alteryx One seleziona l'icona del cerchio con le tue iniziali, in alto a destra. Seleziona Console di amministrazione dal menu.
Seleziona Trattamento dati privato dal menu di navigazione a sinistra.
Seleziona la casella di spunta Designer Cloud, 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 dell'elaborazione privata dei dati.
Passaggio 2: aggiunta della Relazione di fiducia del ruolo personalizzato
Nota
Questo passaggio è necessario solo se, durante la configurazione dell'archiviazione privata dei dati, è stato utilizzato un ruolo su più account per le autorizzazioni. Se per tale operazione è stata utilizzata una chiave di accesso, è possibile saltare questo passaggio.
Importante
Prima di procedere con questo passaggio è necessario attendere il completamento corretto del Passaggio 1.
Se l'archiviazione privata dei dati utilizza un ruolo su più account, affinché il nuovo ambiente di elaborazione privata dei dati possa leggere/scrivere in tale spazio di archiviazione è necessario aggiornare il ruolo in questione, aggiungendo una relazione di fiducia con il nuovo ruolo per il cluster Kubernetes:
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<accountid>:role/aac-<xxxx-xxxxxxxxxxxx>-cluster-role"
},
"Action": "sts:AssumeRole"
}Nota
Sostituisci l'entità di servizio AWS con l'ARN del ruolo IAM creato dal processo di provisioning del trattamento dati privato.
<accountid>: numero dell'account AWS in cui è stato eseguito il provisioning del trattamento dati privato.
<xxxx-xxxxxxxxxxxx>: ultimi due segmenti dell'ID dell'ambiente di elaborazione privata dei dati. È possibile individuare questo ID nell'interfaccia di amministrazione, dopo aver completato correttamente la configurazione dell'ambiente di elaborazione privata dei dati.
Scenario di esempio:
ID account: 123456789012
ID ambiente di elaborazione privata dei dati: b2a65fbd-95dc-490a-b69b-a1dc92df224e
Ruolo ARN: arn:aws:iam::123456789012:role/aac-b69b-a1dc92df224e-cluster-role
Per ulteriori informazioni, consulta l'articolo https://docs.aws.amazon.com/directoryservice/latest/admin-guide/edit_trust.html.
Passaggio 3: aggiornamento dei criteri per la chiave KMS
Dopo la creazione dell'ambiente di elaborazione privata dei dati, al tuo account viene aggiunto un ruolo personalizzato di nome credential-service-role, che consente all'account del servizio credenziali Kubernetes di recuperare le credenziali di accesso all'ambiente dati privato dal vault delle chiavi.
A questo punto devi aggiornare il criterio per la chiave KMS creato in Configurazione dell'account AWS e di VPC per i dati privatiPassaggio 5: creazione di una chiave simmetrica per il vault sicuro, in modo da concedere le autorizzazioni personalizzate al ruolo personalizzato credential-service-role.
Vai a Key Management Services e seleziona la chiave creata in Configurazione dell'account AWS e di VPC per i dati privati.
Seleziona Criteri chiave e fai clic su Modifica.
Elimina l'autorizzazione predefinita e aggiorna i criteri come segue:
{ "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>è il numero dell'account AWS in cui è stato eseguito il provisioning del trattamento dati privato.Seleziona Salva modifiche.
Passaggio 4: EMR serverless (facoltativo)
Se utilizzi l'elaborazione Spark/EMR, devi configurare EMR serverless.
Abilitazione di EMR
Accesso a Alteryx One.
Seleziona Console di amministrazione dal menu Profilo.
Dal pannello di navigazione a sinistra, seleziona Gestione privata dei dati.
Seleziona Spark Processing (EMR).
Seleziona Aggiorna.
Aggiornamento del ruolo personalizzato creato per la connessione S3
Aggiungi i criteri personalizzati e il ruolo personalizzato da AWS S3 come archivio dati privato, con le autorizzazioni e le relazioni di fiducia seguenti per EMR serverless:
Aggiunta del documento dei criteri personalizzati
{
"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/*"
]
}
]
}Aggiunta della relazione di fiducia del ruolo personalizzato
{
"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
Quando si elimina l'ambiente di gestione privata dei dati, AWS sostituisce la relazione di fiducia dell'ARN aac-<xxxx-xxxxxxxxxxxx>-cluster-role con una chiave di accesso. La relazione di fiducia deve essere eliminata anche dall'interfaccia utente.
Nota
Sostituisci l'entità di servizio AWS con l'ARN del ruolo IAM creato dal processo di provisioning del trattamento dati privato.
<accountid>: numero dell'account AWS in cui è stato eseguito il provisioning del trattamento dati privato.
<xxxx-xxxxxxxxxxxx>: ultimi due segmenti dell'ID dell'ambiente di elaborazione privata dei dati. È possibile individuare questo ID nell'interfaccia di amministrazione, dopo aver completato correttamente la configurazione dell'ambiente di elaborazione privata dei dati.
Scenario di esempio:
ID account: 123456789012
ID ambiente di elaborazione privata dei dati: b2a65fbd-95dc-490a-b69b-a1dc92df224e
ARN ruolo: arn:aws:iam::123456789012:role/aac-b69b-a1dc92df224e-emr-serverless-spark-execution
ARN S3: arn:aws:s3:::aac-aac-b69b-a1dc92df224e-emr-logs