Profilo istanze EC2
Definire un ruolo IAM per le istanze EC2 gestite da Qlik. Questo ruolo è utilizzato dalle istanze in esecuzione nell'ambiente lakehouse di AWS.
Un profilo di istanza EC2 è un contenitore per un ruolo IAM che può essere assegnato a un'istanza EC2. Consente all'istanza di accedere ai servizi AWS in modo sicuro, senza la necessità di memorizzare le credenziali AWS nell'istanza.
Quando un'istanza viene avviata con il profilo di un'istanza, le credenziali temporanee del ruolo IAM associato sono automaticamente rese disponibili alle applicazioni in esecuzione nell'istanza tramite il servizio di metadati dell'istanza. Ciò consente all'istanza di effettuare richieste API autorizzate ai servizi AWS come Amazon S3, DynamoDB o CloudWatch.
L'uso di profili di istanza migliora la sicurezza e semplifica la gestione delle credenziali nei seguenti modi:
-
Tramite l'eliminazione delle credenziali codificate nel codice dell'applicazione o nei file di configurazione.
-
Tramite la rotazione automatica delle credenziali.
-
Tramite l'applicazione di privilegi minimi attraverso criteri IAM granulari collegati al ruolo.
I profili di istanza sono comunemente utilizzati nei scenari in cui le istanze EC2 devono interagire con altre risorse AWS in modo sicuro e programmatico.
Prerequisiti
Assicurarsi di aver creato il VPC, la sottorete e le zone di disponibilità per l'hosting del Qlik Open Lakehouse e di disporre dei seguenti dettagli:
-
L'URL del bucket S3 di Qlik per archiviare i file dei metadati interni.
-
Il nome del flusso Kinesis per Qlik per gestire l'istanza nel cluster.
Creazione del profilo di un'istanza
Per creare un ruolo di gestione, fare quanto segue:
-
Nella Console AWS, andare a IAM.
-
In Ruoli, fare clic su Crea ruolo e configurarlo:
-
Tipo di entità attendibile: selezionare il Servizio AWS tra le opzioni.
-
Servizio o caso d'uso: selezionare EC2.
-
Caso d'uso: selezionare EC2.
-
Creare il ruolo. Tornare alla pagina Ruoli e fare clic sul ruolo creato.
-
Fare clic sull'icona Copia accanto al nome ARN profilo istanza e salvare il valore.
-
Fare clic su Aggiungi autorizzazioni e selezionare Crea criterio inline.
-
Editor criteri: selezionare JSON. Incollare il seguente testo, quindi assicurarsi di fare quanto segue:
-
Cambiare il parametro <INTERNAL_STREAM_NAME> con il Flusso Kinesis utilizzato.
-
Cambiare il parametro <INTERNAL_STREAM_NAME> con il Bucket S3 utilizzato.
-
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"*"
],
"Action": [
"ec2:AttachVolume",
"ec2:DetachVolume",
"autoscaling:SetInstanceHealth"
],
"Condition": {
"Null": {
"aws:ResourceTag/qlik_cluster": "false"
}
}
},
{
"Effect": "Allow",
"Resource": [
"*"
],
"Action": [
"cloudwatch:PutMetricData"
]
},
{
"Effect": "Allow",
"Resource": [
"arn:aws:kinesis:*:*:stream/<STREAM_NAME>"
],
"Action": [
"kinesis:PutRecord",
"kinesis:DescribeStreamSummary",
"kinesis:ListShards",
"kinesis:PutRecords",
"kinesis:GetShardIterator",
"kinesis:GetRecords",
"kinesis:DescribeStream",
"kinesis:ListStreamConsumers"
]
},
{
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::<BUCKET_NAME>",
"arn:aws:s3:::<BUCKET_NAME>/*"
],
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:AbortMultipartUpload",
"s3:DeleteObjectVersion",
"s3:ListBucket",
"s3:DeleteObject",
"s3:GetObjectVersion"
]
},
{
"Effect": "Allow",
"Resource": [
"arn:aws:ssm:*:*:parameter/qlik/*"
],
"Action": [
"ssm:GetParameter",
"ssm:PutParameter"
]
},
{
"Effect": "Allow",
"Resource": [
"<SYMMETRIC_KMS_KEY>"
],
"Action": [
"kms:*"
]
},
{
"Effect": "Allow",
"Resource": [
"*"
],
"Action": [
"sts:AssumeRole"
],
"Condition": {
"StringEquals": {
"sts:ExternalId": "6b69f9c3c8f502f2ddfc8434d443f172ebe4c032f4ef1a3c51215d27a58ca799"
}
}
}
]
}
Giustificazioni delle autorizzazioni richieste
La tabella seguente spiega ogni autorizzazione concessa all'istanza EC2:
| Criterio | Autorizzazioni | Spiegazione |
|---|---|---|
| Criterio per il volume degli allegati |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "*" ], "Action": [ "ec2:AttachVolume", "ec2:DetachVolume", "autoscaling:SetInstanceHealth" ], "Condition": { "Null": { "aws:ResourceTag/qlik_cluster": "false" } } } ] } |
Questo criterio concede alle istanze EC2 le autorizzazioni per collegare i volumi EBS persistenti creati da Qlik. Questo permette ai dati di persistere tra gli aggiornamenti del computer del Gateway. |
| CloudWatch |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "*" ], "Action": [ "cloudwatch:PutMetricData" } ] } |
Questo criterio consente alle istanze EC2 di inviare metriche personalizzate a CloudWatch, che vengono utilizzate per scalare automaticamente i cluster Qlik in base alle prestazioni del software. |
| Flusso interno |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "arn:aws:kinesis:*:*:stream/<STREAM_NAME>" ], "Action": [ "kinesis:PutRecord", "kinesis:DescribeStreamSummary", "kinesis:ListShards", "kinesis:PutRecords", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:DescribeStream", "kinesis:ListStreamConsumers" ] } ] } |
Questo criterio concede alle istanze EC2 l'autorizzazione di interagire con i flussi Kinesis utilizzati dai servizi di sincronizzazione del cluster, come Key-Value Store e i blocchi distribuiti. <INTERNAL_STREAM_NAME> è un valore configurato dall'utente. |
| Bucket interno |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "arn:aws:s3:::<BUCKET_NAME>", "arn:aws:s3:::<BUCKET_NAME>/*" ], "Action": [ "s3:PutObject", "s3:GetObject", "s3:AbortMultipartUpload", "s3:DeleteObjectVersion", "s3:ListBucket", "s3:DeleteObject", "s3:GetObjectVersion" ] } ] } |
Il criterio concede alle istanze EC2 le autorizzazioni per archiviare, leggere ed eliminare i dati interni. I dati interni contengono dati utente reali che vengono conservati nella memoria intermedia per l'elaborazione. <INTERNAL_BUCKET_NAME> è un valore configurato dall'utente. |