Профиль экземпляра EC2
Определите роль IAM для Qlik-управляемых экземпляров EC2. Эта роль будет использоваться экземплярами, запущенными в среде AWS Lakehouse.
Профиль экземпляра EC2 — это контейнер для роли IAM, которую можно назначить экземпляру EC2. Такой механизм позволит экземпляру безопасно обращаться к службам AWS без необходимости хранить учетные данные AWS.
При запуске экземпляра с этим профилем приложения, работающие на этом экземпляре, автоматически получают временные учетные данные соответствующей роли IAM через службу метаданных экземпляра. Экземпляр в этом случае сможет выполнять авторизованные API-запросы к таким сервисам AWS, как Amazon S3, DynamoDB или CloudWatch.
Использование профилей экземпляров повышает безопасность и упрощает управление данными доступа, так как:
-
не нужно жестко прописывать данные доступа в коде приложения или в конфигурационных файлах;
-
ротация данных доступа происходит автоматически;
-
применяется принцип наименьших привилегий — через дробные IAM-политики, привязанные к роли.
Профили экземпляров широко используются в сценариях, в которых экземпляры EC2 должны безопасно взаимодействовать с другими ресурсами AWS через программные средства.
Необходимые условия
Необходимо создать виртуальную частную сеть (VPC) и настроить подсеть и зоны доступности для размещения Открытое озеро данных Qlik. Кроме того, необходимо следующее:
-
URL-адрес блока S3 для Qlik, в котором будут храниться внутренние файлы метаданных.
-
Имя потока Kinesis для Qlik, через который будет производиться управление экземпляром в кластере.
Создание профиля экземпляра
Чтобы создать роль управления:
-
В консоли AWS перейдите в раздел IAM
-
В разделе Roles (Роли) нажмите Create role (Создать роль) и настройте роль:
-
Trusted entity type (Тип доверенной сущности): в списке выберите AWS service.
-
Service or use case (Сервис или использование): выберите EC2.
-
Use case (Использование): выберите EC2.
-
Создайте роль. Вернитесь на страницу Roles и нажмите на только что созданную роль.
-
Нажмите Copy рядом с именем Instance profile ARN(Профиль экземпляра ARN) и сохраните это значение.
-
Нажмите Add permissions (Добавить разрешения) и выберите Create inline policy (Создать внутреннюю политику).
-
Policy editor (Редактор политики): выберите JSON. Вставьте следующий текст и проверьте, что:
-
В параметре <INTERNAL_STREAM_NAME> введите свой Поток Kinesis.
-
В параметре <INTERNAL_BUCKET_NAME> введите Блок 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"
}
}
}
]
}
Объяснение разрешений
В следующей таблице приводится объяснение разрешений, предоставляемых экземпляру EC2:
| Политика | Разрешения | Объяснение |
|---|---|---|
| Attach Volume Policy |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "*" ], "Action": [ "ec2:AttachVolume", "ec2:DetachVolume", "autoscaling:SetInstanceHealth" ], "Condition": { "Null": { "aws:ResourceTag/qlik_cluster": "false" } } } ] } |
Политика присоединения тома дает экземплярам EC2 разрешение на присоединение томов Persistent EBS, созданных в Qlik. Ее применение позволяет сохранять данные между обновлениями машины-шлюза. |
| CloudWatch |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "*" ], "Action": [ "cloudwatch:PutMetricData" } ] } |
Эта политика позволяет экземплярам EC2 передавать в CloudWatch пользовательские метрики, которые используются для автоматического масштабирования кластеров Qlik в зависимости от производительности программного обеспечения. |
| 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" ] } ] } |
Эта политика дает экземплярам EC2 разрешение на взаимодействие с потоками Kinesis, используемыми службами синхронизации кластера, такими как Key-Value Store и Distributed Locks. <INTERNAL_STREAM_NAME> — это значение, задаваемое пользователем. |
| 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" ] } ] } |
Политика разрешает экземплярам EC2 хранить, читать и удалять внутренние данные. Внутренние данные содержат реальные пользовательские данные, которые временно хранятся для обработки. <INTERNAL_BUCKET_NAME> — это значение, задаваемое пользователем. |