Perfil de instância EC2
Defina uma função de IAM para suas instâncias EC2 gerenciadas pelo Qlik. Essa função é usada pelas instâncias em execução em seu ambiente do lakehouse da AWS.
Um perfil de instância do EC2 é um contêiner para uma função de IAM que pode ser atribuída a uma instância do EC2. Ele permite que a instância acesse os serviços da AWS com segurança, sem a necessidade de armazenar as credenciais da AWS na instância.
Quando uma instância é iniciada com um perfil de instância, as credenciais temporárias da função do IAM associada são automaticamente disponibilizadas para aplicativos em execução na instância por meio do serviço de metadados da instância. Isso permite que a instância faça solicitações de API autorizadas para serviços da AWS, como Amazon S3, DynamoDB ou CloudWatch.
O uso de perfis de instância aumenta a segurança e simplifica o gerenciamento de credenciais com:
-
Eliminação de credenciais codificadas no código do aplicativo ou nos arquivos de configuração.
-
Rotação automática de credenciais.
-
Aplicação do privilégio mínimo por meio de políticas de IAM refinadas associadas à função.
Geralmente, os perfis de instância são usados em cenários onde instâncias do EC2 precisam interagir com outros recursos da AWS de forma segura e programática.
Pré-requisitos
Certifique-se de que você tenha criado a VPC, a sub-rede e as zonas de disponibilidade para hospedar seu Qlik Open Lakehouse e tenha os detalhes a seguir:
-
A URL do compartimento S3 para o Qlik para armazenar arquivos de metadados internos.
-
O nome do fluxo do Kinesis para o Qlik para gerenciar a instância no cluster.
Criando um perfil de instância
Para criar uma função de gerenciamento, faça o seguinte:
-
No Console da AWS, acesse IAM.
-
Em Funções, clique em Criar função e configure-a:
-
Tipo de entidade confiável: selecione Serviço da AWS entre as opções.
-
Serviço ou caso de uso: selecione EC2.
-
Caso de uso: selecione EC2.
-
Crie a função. Volte à página Funções e clique na função que você criou.
-
Clique no ícone Copiar ao lado do nome ARN do perfil da instância e salve esse valor.
-
Clique em Adicionar permissões e selecione Criar política inline.
-
Editor de políticas: selecione JSON. Cole o texto a seguir e certifique-se de:
-
Alterar o parâmetro <INTERNAL_STREAM_NAME> para seu Fluxo do Kinesis.
-
Alterar o parâmetro <INTERNAL_BUCKET_NAME> para seu Compartimento 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"
}
}
}
]
}
Justificativas para a permissão de requisitos
A tabela a seguir explica cada permissão concedida à instância do EC2:
| Política | Permissões | Explicação |
|---|---|---|
| Anexar política de volume |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "*" ], "Action": [ "ec2:AttachVolume", "ec2:DetachVolume", "autoscaling:SetInstanceHealth" ], "Condition": { "Null": { "aws:ResourceTag/qlik_cluster": "false" } } } ] } |
Essa política concede às instâncias do EC2 permissões para anexar volumes Persistent EBS criados pelo Qlik. Isso permite que os dados sejam mantidos entre as atualizações de máquinas do Gateway. |
| CloudWatch |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "*" ], "Action": [ "cloudwatch:PutMetricData" } ] } |
Essa política permite que as instâncias do EC2 enviem métricas personalizadas para o CloudWatch, que são usadas para dimensionar automaticamente os clusters do Qlik com base no desempenho do software. |
| Fluxo 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" ] } ] } |
Essa política concede às instâncias do EC2 permissão para interagir com os fluxos do Kinesis usados pelos serviços de sincronização de cluster, como o armazenamento de chave-valor e os bloqueios distribuídos. <INTERNAL_STREAM_NAME> é um valor configurado pelo usuário. |
| Compartimento 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" ] } ] } |
A política permite que as instâncias do EC2 tenham permissões para armazenar, ler e excluir dados internos. Os dados internos contêm dados reais do usuário que são mantidos em armazenamento intermediário para processamento. <INTERNAL_BUCKET_NAME> é um valor configurado pelo usuário. |