- 概要
- 実践
- エラー
- Error running query: failed communicating with server. Please check your Internet connection and try again.
- Connection Test Failed:Access denied when writing output to url: s3://athena-redash-results/redash-waf/3e952317-fed6-44ea-bf92-6973b2d1da24.csv . Please ensure you are allowed to access the S3 bucket. If you are encrypting query results with KMS key, please ensure you are allowed to access your KMS key
- 参考
概要
やりたいこと
以前 GuardDuty ログを Athena で検索できるようにした。この GuardDuty ログを可視化したい。
QuickSight が使いにくかったので Redash で可視化する。
Redash
Redash はクエリ発行、可視化、ダッシュボード・アラート作成を行うツール。
ダッシュボードツールや BI ツールの一種。
実践
Redash 用 EC2 インスタンス作成
AMI が配布されている。Redash のバージョンは 8.0。
アクセスしたいデータソース(S3バケット)と同じ region の AMI を選択する(今回は ap-northeast-1 )。
EC2 コンソールより、新規インスタンスを作成する。
- AMI : ami-060741a96307668be
- インスタンスタイプ : t2.small以上
- セキュリティグループ : 22 (SSH), 80 (HTTP), 443 (HTTPS) のインバウンドを許可
- 自動割り当てパブリック IP : 有効
インスタンスが起動したら、パブリックDNSにアクセスし、Redashが起動していることを確認。
クエリ結果保存用 S3 バケット作成
クエリ結果保存用バケットを、以下の名前で作成する。S3 Staging Path と呼ばれている。
- athena-redash-results
IAM Policy 作成
公式を参考に、Athena で検索するバケットへのアクセス権ポリシーを作成する。
前回 GuardDuty をエクスポートした guardduty-alert バケットに対して読み込み可能な権限をつける。
さらに上で作成したクエリ結果保存用バケット( athena-redash-results )に対してもアクセス権を付けておく。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::guardduty-alert/*",
"arn:aws:s3:::athena-redash-results/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::guardduty-alert",
"arn:aws:s3:::athena-redash-results"
]
}
]
}
IAM User 作成
以下の権限で IAM を作成する。アクセスキーとシークレットキーをメモしておく。
- プログラムからのみアクセス許可
- 以下2つのポリシーをアタッチ
- AWSQuicksightAthenaAccess
- 上で作ったポリシー
Redash と Athena を連携
Redash のデータソースに Athena を追加する。
「S3 Staging (Query Results) Bucket Path」は Redashが実行した結果を出力する場所。
- 右上の Setting のアイコン
- Data Sources
- New Data Source
- Amazon Athena
- Name : 好きな名前
- AWS Region : ap-northeast-
- AWS Access Key
- AWS Secret Key
- S3 Staging (Query Results) Bucket Path : s3://athena-redash-results
- Save
Test Connection で OK がでればOK。
Redash からクエリを発行
試しに Redash からクエリを打ってみる。
SELECT
type,
COUNT(*) AS COUNT
FROM
gd_logs
GROUP BY type
ORDER BY COUNT DESC;
結果が返却され、ページ下部に Table が作成されることを確認。
Redash で可視化
クエリ結果が返ってきている状態で
- New Visualization
- Chart Type : Bar
- X Column : type
- Y Column : COUNT
以下のようにグラフが表示されれば大丈夫。
Terraform にしたい。
エラー
Error running query: failed communicating with server. Please check your Internet connection and try again.
巨大なクエリを実施するとこのエラーが起きる。
SELECT するカラムを絞る、パーティションを絞るなどする。
SELECT count でやるのもいい。
Parquet 形式に変換するとデータ量がかなり減るのでこちらもオススメ。
Connection Test Failed:Access denied when writing output to url: s3://athena-redash-results/redash-waf/3e952317-fed6-44ea-bf92-6973b2d1da24.csv . Please ensure you are allowed to access the S3 bucket. If you are encrypting query results with KMS key, please ensure you are allowed to access your KMS key
IAM User の権限に、クエリ結果保存バケット(S3 Staging (Query Results) Bucket Path)へのアクセス権がないと、Test Connection で表示される。
コメント