AWS上でブラウザ->LBまでがHTTPS、LBからEC2インスタンスがHTTPの構成となるような環境を作っていく。
前提条件
- Splunk Enterpriseのバージョン: 8.1.2
- Nginxのバージョン: 1.21
- EC2インスタンスのOS: RHEL 7.7
- SELinuxを無効化すること
- AWSマネージドコンソールの言語:
English(US)
AWS S3の準備
- AWSのマネージドコンソールにログインし、Amazon S3ダッシュボードを開きます。
- Create bucketボタンをクリックします。
- Bucket nameに任意のバケット名を入力します。
- AWS RegionをEC2インスタンスを作成するリージョンと同じにします。
-
Default encryptionを
Enable
にします。 -
Encryption key typeを
AWS Key Management Service key (SSE-KMS)
にします。- APIのコールがSSE-KMSの上限を超える可能性がある場合は
Amazon S3 key (SSE-S3)
を利用します。
- APIのコールがSSE-KMSの上限を超える可能性がある場合は
-
AWS KMS keyを
AWS managed key (aws/s3)
にします。 - Create bucketをクリックします。
IAMポリシーの準備
- **Identity and Access Management (IAM)**ダッシュボードを開きます。
- 左ペインのメニューからPoliciesを選択します。
- Create Policyをクリックします。
- JSONタブを開きます。
- 以下の内容をテキストエリアに書き込みます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "kms:*",
"Resource": "arn:aws:kms:{Region}:{AccountID}:key/{KMS ID}"
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::{BucketName}/*"
}
]
}
- Next: Tagsをクリックします。(タグが必要な場合は設定します。)
- Next: Reviewをクリックします。
- Nameにポリシー名を入力します。これは必須項目です。
- Create Policyをクリックします。
IAMロールの準備
- **Identity and Access Management (IAM)**ダッシュボードを開きます。
- 左ペインのメニューからRolesを選択します。
- Create roleをクリックします。
-
Choose a use caseから
EC2
を選択します。 - Next: Permissionsをクリックします。
- Atatach permissions policiesで上記の手順で作成したIAMポリシーをアタッチします。
- Next: Tagsをクリックします。
- Next: Reviewをクリックします。
- Role nameを入力します。
- Create roleをクリックします。
EC2インスタンスの準備
詳細な手順は割愛しますが、上記の手順で作成したロールをアタッチしてください。
今回の構成としては、1つのVPCにpublicなサブネットとprivateなサブネットを用意しており、このEC2インスタンスはprivateなサブネットに構築します。
後ほどロードバランサーをpublicなサブネットに紐づけて作成し、リクエストをこのインスタンスに流すように設定します。
また、自身の作業環境からSSHアクセスできるようにセキュリティグループを設定してください。
Splunk Enterpriseのインストールと設定
今回は/app/splunk
にSplunk Enterpriseをインストールします。
- 公式のインストール手順に従って、Splunk Enterpriseをインストールし、Splunkが起動することを確かめます。
- 以下のようなディレクトリとファイルを用意します。コンフィグをアプリとして管理することで運用管理しやすくなります。
$ cd /app/splunk/etc/apps/
$ mkdir -p standalone_config/local
$ mkdir -p standalone_config/metadata
$ touch standalone_config/local/app.conf
$ touch standalone_config/local/indexes.conf
$ touch standalone_config/metadata/default.meta
-
standalone_config/local/app.conf
を以下のように編集します。
[install]
state = enabled
[package]
check_for_updates = false
[ui]
is_visible = false
is_manageable = false
-
standalone_config/local/indexes.conf
を以下のように編集します。
[default]
remotePath = volume:remote_store/$_index_name
[volume:remote_store]
storageType = remote
path = s3://{s3BucketName}
remote.s3.encryption = sse-kms
remote.s3.kms.key_id = {kmsId}
-
standalone_config/metadata/default.meta
を以下のように編集します。
[]
access = read : [ * ], write : [ admin ]
export = system
- Splunkを再起動します。
/app/splunk/bin/splunk restart
- Splunkのモニターコンソール等で正常にSmartStore機能が働いているか確認します。
Nginxのインストールと設定
- こちらの手順を参考にNginxをyumでインストールします。
-
/etc/nginx/conf.d/default.conf
を以下のように編集します。
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name {dnsName};
# plunkのファイルアップロードによる取り込み対応
client_max_body_size 1024M;
# SplunkのリダイレクトURLのプロトコルがhttpになることへの対応
if ($http_x_forwarded_proto != https) {
return 301 https://$host$request_uri;
}
location / {
proxy_pass http://127.0.0.1:8000;
}
}
- Nginxを起動します。
$ sudo systemctl start nginx
今回の構成はブラウザからLBまでがHTTPS、LBからEC2へのアクセスがHTTPとなる構成をとっています。
SplunkがHTTPモードで動作しているため、ログイン後のリダイレクトURLがHTTPになってしまいます。
常にHTTPSでアクセスさせたいため、LBからHTTPによるアクセスが来たら強制的にHTTPSでアクセスさせるように対応しています。
ACMの準備
- Certificate Managerダッシュボードを開きます。
- Request a certificateをクリックします。
-
Request a public certificate
が選択されていることを確認し、Request a certificateをクリックします。 -
Domain nameを入力します。ここでは
*.example.com
を例とします。 - Nextをクリックします。
- Route53でドメイン取得したことを前提としているので、
DNS validation
が選択されていることを確認し、Next
をクリックします。 - Reviewをクリックします。
- Confirm and requestをクリックします。
- Domainの情報を開いてCreate record in Route53をクリックします。
- Createをクリックします。
- Continueをクリックします。
AWS CLBの準備
- EC2ダッシュボードを開きます。
- 左ペインのメニューからLoad Balancersを選択します。
- Create Load Balancerを選択します。
- Classic Load BalancerのCreateをクリックします。
- Load Balancer nameを入力します。
- Create LB InsideをEC2が存在するVPCにします。
-
Listener Configurationで80番ポートと443番ポートをEC2インスタンスに流すように設定します。
- Load Balancer Protocol:80, Load Balancer Port:80, Instance Protocol:HTTP, Instance Port:80
- Load Balancer Protocol:443, Load Balancer Port:443, Instance Protocol:HTTP, Instance Port:443
- Select Subnetsで上記で選択したVPCのパブリックなサブネットを選択します。
- Next Assign Security Groupをクリックします。
- インターネットからのアクセスおよび、作成したEC2インスタンスへのアクセス(HTTP/HTTPS)が許可されたセキュリティグループを選択します。
- Next: Configure Security Settingsをクリックします。
-
Certificate typeを
Choose a certificate from ACM (recommended)
にします。 - CertificateをACMの手順で作成した証明書を選択します。
- Next: Configure Health Checkをクリックします。
-
Ping Protocolを
TCP
にします。 -
Ping Portを
80
にします。 - Next: Add EC2 Instanceをクリックします。
- 対象のEC2インスタンスをチェックします。
- Next: Add Tagsを選択します。
- Review and Createをクリックします。
- Createをクリックします。
Route53
既に必要なドメインが取得されている前提です。
- Route53ダッシュボードを開きます。
- 左ペインのメニューからHosted zonesを選択します。
- 対象のドメインを一覧から選択します。
- Create recordをクリックします。
-
Simple routing
を選択します。 - Nextをクリックします。
- Define simple recordをクリックします。
- Record nameを入力します。
-
Value/Route traffic toを
Alias to Application and Classic Load Balancer
とし、リージョンをEC2インスタンスが存在しているリージョンにします。 - Choose load balancerを作成したロードバランサーに設定します。
- Define simple recordをクリックします。
- Create recordsをクリックします。