EC2 实例配置文件
为 Qlik 管理的 EC2 实例定义 IAM 角色。该角色由在 AWS Lakehouse 环境中运行的实例使用。
EC2 实例配置文件是可以分配给 EC2 实例的 IAM 角色的容器。它允许实例安全地访问 AWS 服务,而不需要在实例上存储 AWS 凭据。
使用实例配置文件启动实例时,相关 IAM 角色的临时凭据可通过实例元数据服务自动提供给在实例上运行的应用程序。这样,实例就能向亚马逊 S3、DynamoDB 或 CloudWatch 等 AWS 服务发出授权 API 请求。
使用实例配置文件可以通过以下方式提高安全性并简化凭证管理:
-
消除应用程序代码或配置文件中的硬编码凭据。
-
自动轮换证书。
-
通过附加在角色上的细粒度 IAM 策略来执行最低权限。
实例配置文件通常用于 EC2 实例需要与其他 AWS 资源进行安全和编程式交互的场景。
先决条件
确保已创建用于托管 Qlik Open Lakehouse 的 VPC、子网和可用区,并掌握以下详细信息:
-
供 Qlik 用于存储内部元数据文件的 S3 存储段的 URL。
-
Kinesis 数据流的名称,用于 Qlik 管理群集中的实例。
创建实例配置文件
要创建管理角色,请执行以下操作:
-
在 AWS 控制台中,转到 IAM
-
在角色中,单击创建角色并进行配置:
-
可信实体类型:从选项中选择 AWS 服务。
-
服务或用例:选择 EC2。
-
用例:选择 EC2。
-
创建角色。返回角色页面,单击您所创建的角色。
-
单击实例配置文件 ARN 名称旁边的复制图标并保存此值。
-
单击添加权限并选择创建内联策略。
-
策略编辑器:选择 JSON。粘贴以下文本,并确保:
{
"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 实例的每种权限:
| 策略 | 权限 | 解释 |
|---|---|---|
| 附加卷策略 |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "*" ], "Action": [ "ec2:AttachVolume", "ec2:DetachVolume", "autoscaling:SetInstanceHealth" ], "Condition": { "Null": { "aws:ResourceTag/qlik_cluster": "false" } } } ] } |
该策略授予 EC2 实例附加由 Qlik 创建的持久 EBS 卷的权限。这样,数据就能在 Gateway 计算机升级之间保持不变。 |
| CloudWatch |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "*" ], "Action": [ "cloudwatch:PutMetricData" } ] } |
该策略允许 EC2 实例向 CloudWatch 推送自定义指标,用于根据软件性能自动扩展 Qlik 群集。 |
| 数据流 |
{ "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 数据流交互的权限。<INTERNAL_STREAM_NAME> 是用户配置的值。 |
| 内部存储段 |
{ "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> 是用户配置的值。 |