EC2 インスタンス プロファイル
Qlik で管理する EC2 インスタンスに IAM ロールを定義します。このロールは、AWS のレイクハウス環境で稼働しているインスタンスで使用されます。
EC2 インスタンス プロファイルは、EC2 インスタンスに割り当てることができる IAM ロールのコンテナです。インスタンス上に AWS 認証情報を保存することなく、インスタンスが安全に AWS サービスにアクセスできるようになります。
インスタンスがインスタンス プロファイルで起動されると、関連する IAM ロールの一時的な資格情報は、インスタンス メタデータ サービスを介してインスタンス上で実行されているアプリケーションで自動的に利用可能になります。これにより、インスタンスは Amazon S3、DynamoDB、CloudWatch などの AWS サービスに対して許可された API リクエストを行うことができます。
インスタンス プロファイルを使用することで、セキュリティが向上し、資格情報管理が簡素化されます。
-
アプリケーション コードや設定ファイルにハードコードされた認証情報を排除します。
-
資格情報を自動的にローテーションします。
-
ロールに付加されたきめ細かい IAM ポリシーによる最小権限の強制。
インスタンス プロファイルは、EC2 インスタンスが他の AWS リソースと安全かつプログラム的にやり取りする必要があるシナリオで一般的に使用されます。
前提条件
Qlik Open Lakehouse をホスティングするための VPC、サブネット、可用性ゾーンを作成し、以下の詳細を確認してください。
-
Qlik が内部メタデータ ファイルを保存する S3 バケットの URL。
-
Qlik がクラスター内のインスタンスを管理するための Kinesis ストリームの名前。
インスタント プロファイルを作成
管理ロールを作成するには、以下を行います。
-
AWS コンソールで、[IAM] に移動します。
-
[ロール] で [ロールの作成] をクリックし、設定を行います。
-
[信頼できるエンティティ タイプ: オプションからAWSサービスを選択します。
-
[サービスまたはユース ケース] で、[EC2] を選択します。
-
[ユース ケース] で、[EC2] を選択します。
-
ロールを作成します。[ロール] ページに戻り、作成したロールをクリックします。
-
インスタンス プロファイル ARN 名の横にあるコピー アイコンをクリックし、この値を保存します。
-
[権限の追加] をクリックし、[インライン ポリシーの作成] を選択します。
-
ポリシー エディタ: 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 インスタンスに付与された各許可について説明しています。
| ポリシー | 権限 | 説明 |
|---|---|---|
| ボリューム ポリシーの添付 |
{ "Version": "2012-10-17", "Effect": "Allow", "Resource": [ "*" ], "Action": [ "ec2:AttachVolume", "ec2:DetachVolume", "autoscaling:SetInstanceHealth" ], "Condition": { "Null": { "aws:ResourceTag/qlik_cluster": "false" } } } ] } |
このポリシーは、Qlik によって作成された永続 EBS ボリュームをアタッチする権限を EC2 インスタンスに付与します。これにより、ゲートウェイ マシンのアップグレード間でもデータを維持することができます。 |
| 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> はユーザーが設定した値です。 |