Perfil de instancia EC2
Defina un rol IAM para sus instancias EC2 administradas por Qlik. Este rol lo utilizan las instancias que se ejecutan en su entorno de AWS lakehouse.
Un perfil de instancia EC2 es un contenedor para un rol IAM que puede asignarse a una instancia EC2. Permite a la instancia acceder a los servicios de AWS de forma segura sin necesidad de almacenar las credenciales de AWS en la instancia.
Cuando se lanza una instancia con un perfil de instancia, las credenciales temporales del rol IAM asociado se ponen automáticamente a disposición de las aplicaciones que se ejecutan en la instancia a través del servicio de metadatos de instancia. Esto permite a la instancia realizar solicitudes de API autorizadas a servicios de AWS como Amazon S3, DynamoDB o CloudWatch.
El uso de perfiles de instancia mejora la seguridad y simplifica la gestión de credenciales al:
-
Eliminar las credenciales codificadas en el código de la aplicación o en los archivos de configuración.
-
Rotar automáticamente las credenciales.
-
Aplicar el mínimo privilegio a través de políticas IAM de grano fino adjuntas al rol.
Los perfiles de instancia se utilizan habitualmente en escenarios en los que las instancias EC2 necesitan interactuar con otros recursos de AWS de forma segura y programática.
Requisitos previos
Asegúrese de que ha creado la VPC, la subred y las zonas de disponibilidad para alojar su Qlik Open Lakehouse, y de que dispone de los siguientes datos:
-
La URL del depósito de S3 para Qlik para almacenar los archivos de metadatos internos.
-
El nombre de la transmisión Kinesis para Qlik para administrar la instancia en el clúster.
Crear un perfil de instancia
Para crear un rol de cuenta de administración, haga lo siguiente:
-
En la Consola de AWS, vaya a IAM
-
En Roles, haga clic en Crear rol y configúrelo:
-
Tipo de entidad de confianza: seleccione el servicio AWS entre las opciones.
-
Servicio o caso de uso: seleccione EC2.
-
Caso de uso: seleccione EC2.
-
Cree el rol. Vuelva a la página Roles y haga clic en el rol que ha creado.
-
Haga clic en el icono Copiar situado junto al nombre ARN del perfil de la instancia y guarde este valor.
-
Haga clic en Añadir permisos y seleccione Crear política inline.
-
Editor de políticas: seleccione JSON. Pegue el texto siguiente y asegúrese de realizar los puntos siguientes:
-
Cambie el parámetro <INTERNAL_STREAM_NAME> por su Transmisión Kinesis.
-
Cambie el parámetro <INTERNAL_BUCKET_NAME> por su Depósito de S3.
-
{
"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"
}
}
}
]
}
Justificaciones de los permisos exigidos
La tabla siguiente explica cada permiso concedido a la instancia EC2:
| Política | Permisos | Explicación |
|---|---|---|
| Adjuntar política de volumen |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "*" ], "Action": [ "ec2:AttachVolume", "ec2:DetachVolume", "autoscaling:SetInstanceHealth" ], "Condition": { "Null": { "aws:ResourceTag/qlik_cluster": "false" } } } ] } |
Esta política concede a las instancias EC2 permisos para adjuntar volúmenes EBS persistentes creados por Qlik. Esto permite que los datos persistan entre actualizaciones de la máquina Gateway. |
| CloudWatch |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "*" ], "Action": [ "cloudwatch:PutMetricData" } ] } |
Esta política permite que las instancias EC2 envíen métricas personalizadas a CloudWatch, que se utilizan para autoescalar los clústeres de Qlik en función del rendimiento del software. |
| Internal Stream |
{ "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" ] } ] } |
Esta política concede a las instancias EC2 permiso para interactuar con los flujos Kinesis utilizados por los servicios de sincronización de clústeres, como el almacén de valores clave y los bloqueos distribuidos. <INTERNAL_STREAM_NAME> es un valor configurado por el usuario. |
| Internal Bucket |
{ "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" ] } ] } |
La política permite a las instancias EC2 permisos para almacenar, leer y eliminar datos internos. Los datos internos contienen datos reales del usuario que se guardan en un almacenamiento intermedio para su procesamiento. <INTERNAL_BUCKET_NAME> es un valor configurado por el usuario. |