Vue.js + axiosでLambdaのAPIを叩く方法

開発環境

  • Windows10
  • AWS Lambda
  • Vue.js

APIの作成

Lambda

[crayon-6175b98422a72053632140/]
[crayon-6175b98422a79216950495/]

九州の都道府県を返すサンプルです。
サーバーは別のサイト(オリジン)から送られてきたhttpリクエストをブロックすることができます。
CSR (Cross-site Request Forgery) などの対策のためです。
許可する場合はサンプルのようにレスポンスヘッダーでAccess-Control-Allow情報を返す必要があります。

Access-Control-Allow-Origin : 許可するオリジンを指定できます。上の例はワイルドカードですべてのオリジンからのリクエストを許可しています。
Access-Control-Allow-Headers : 許可するリクエストヘッダーを指定できます。上の例はワイルドカードですべてのリクエストヘッダーを許可しています。
Access-Control-Allow-Methods : 許可するリクエストメソッドを指定できます。上の例はGET,POST,OPTIONSを許可しています。
オリジンから別のオリジンにアクセス権を許可する仕組みをCORS(Cross-Origin Resource Sharing)といいます

OPTIONSについては後程説明します。

API Gatewayの設定

リソースの作成

image.png

GETおよびOPTIONSメソッドを作成

image.png
image.png
image.png

上の関数をAPI化しました。

OPTIONSメソッドとは

サーバーからクライアントに対してアクセス権を返します。
クライアントからサーバーに対してOPTIONSリクエストを送ることをPreflight requestといいます。

サンプルの例では
まず、クライアントがPreflight requestをサーバーに送る。
サーバーがOPTIONSレスポンス(アクセス権)を返す。
クライアントはアクセス権を確認し、アクセス可能であればGETメソッドリクエストを送る。
サーバー側はGETレスポンスを返す。
という流れになります。

AWSが用意しているのCORSを使用することもできるのですが、正しく動作させることができなかったため自作することにしました。

Preflight requestはブラウザが自動的に送信するためクライアントの実装では意識する必要はありません

APIキーの必要性の設定

image.png

※ OPTIONSはAPIキーの必要性をfalseのままにしておく

image.png

ブラウザがPreflight requestを送るときにリクエストヘッダを追加することができないため、falseにしておいてください。
GETメソッドにはAPIキーを設定することができます。

デプロイ

image.png

Vue

プロジェクトにaxiosをインストール

[crayon-6175b98422a7f558112248/]

サンプルコード

[crayon-6175b98422a83825677102/]

APIにGETリクエストを送ってレスポンスをitemsに保存。Viewでitemsの中身を表示しています。
OPTIONSリクエストは自動で送信されるため記述は必要ありません。

確認

image.png

APIから情報を取得するのに成功しています。

参考にさせていただいたサイト

CORSのプリフライトリクエスト(OPTIONメソッド)はAPI Keyの認証なしでOKにしておかないと失敗する話 | フューチャー技術ブロ...

 

オリジン間リソース共有 (CORS) - HTTP | MDN

https://developer.mozilla.org


【随時更新】AWS セキュリティ製品 まとめ

はじめに

AWSにはセキュリティを高めるためのサービスが豊富にあります。
それぞれがセキュリティを高める上でどんな役割を担っているのかについて、本記事では簡単に整理していきます。
過去に検証したことのあるサービスについては、[検証記事]のカラムにリンクを貼っております。

どんな人向け:
AWSってサービス多くて何がなんだか分からない って人。
AWSを使っている。 セキュリティを高めるために 何を使うか検討中 って人。

Identity & Access Management

サービス名 概要 検証記事
AWS Identity & Access Management (IAM) AWS のサービスやリソースへのアクセスを安全に管理する
AWS Single Sign-On AWS アカウントへの SSO アクセスを一元管理できる
Amazon Cognito ウェブ / モバイルアプリ の 「認証」・「許可」・「ユーザ管理」をサポートする
AWS Directory Service AWS のマネージド型 Microsoft Active Directory
AWS Resource Access Manager AWS のリソースを任意の AWS アカウントまたは AWS 組織内で簡単かつ安全に共有できる
AWS Organizations AWS リソースの増加やスケーリングに合わせて、環境を一元的に管理し統制する

検出

サービス名 概要 検証記事
AWS Security Hub セキュリティアラートを一元的に管理し、セキュリティチェックを自動化する あり
Amazon GuardDuty 脅威検出と継続的なモニタリングで AWSアカウント、ワークロード、データを保護する あり
Amazon Inspector 脆弱性を診断・自動でセキュリティ評価をする
AWS Config AWS リソースの設定を評価、監査、審査する
AWS CloudTrail ユーザーアクティビティと API 使用状況を追跡する
AWS IoT Device Defender IoT デバイスのセキュリティを管理する

インフラストラクチャの保護

サービス名 概要 検証記事
AWS ネットワークファイヤーウォール Amazon VPC に不可欠なネットワーク保護を簡単にデプロイする
AWS Shield マネージドでDDoS攻撃に対してアプリケーションを保護する
AWS Web Application Firewall (WAF) 一般的な攻撃やボットからアプリケーションや API を保護する あり
AWS Firewall Manager 多くのアカウント、アプリケーションにわたって一元的にファイアウォールのルールを設定、管理する

データ保護

サービス名 概要 検証記事
Amazon Macie 機械学習とパターンマッチングを使用して 大規模な機密データを検出して保護する
AWS Key Management Service (KMS) データの暗号化やデジタル署名に使用するキーを簡単に作成して管理する
AWS CloudHSM 暗号鍵の生成、保管、配布から廃棄までを管理し、サイバー攻撃から保護する
AWS Certificate Manager パブリックとプライベートの SSL/TLS 証明書を簡単にプロビジョニング、管理、デプロイする
AWS Secrets Manager データベース認証情報、API キー、その他機密情報を簡単にローテーション、管理、取得する

インシデントへの対応

サービス名 概要 検証記事
Amazon Detective セキュリティデータを分析および視覚化して、不審なアクティビティの根本原因を簡単に調査する あり
CloudEndure Disaster Recovery データセンターの障害やサーバーの破損、サイバー攻撃から物理・仮想・クラウドサーバーを保護する

コンプライアンス

サービス名 概要 検証記事
AWS Artifact AWS のコンプライアンスレポートにオンデマンドでアクセスできる
AWS Audit Manager AWS の使用状況を継続的に監査して、リスクとコンプライアンスの評価方法を簡素化する

まとめ

今回はAWSのセキュリティサービスの概要を整理してみました。
実際にサービスを触ってみないと分からないところもあるので、今後検証しては随時記事にしていきたいと思います。

参考

セキュリティ、アイデンティティ、およびコンプライアンス製品 – アマゾン ウェブ サービス (AWS)

https://aws.amazon.com


【AWS セキュリティ対策】Amazon Detective編

構成

こちらの記事は AWS セキュリティサービスを使ってみた シリーズの Part.3 の記事です。
他にも以下のサービスについてまとめております、ぜひご覧ください。

Part.1
AWS WAF
Part.2
Amazon GuardDuty
Part.3
AWS Detective (本記事)
Part.4
AWS Security Hub

【随時更新】 AWS セキュリティ製品一覧:
https://recipe.kc-cloud.jp/archives/17259

Amazon Detective とは

Amazon Detective では、潜在的なセキュリティ問題や不審なアクティビティの根本原因を簡単に分析、調査し、すばやく特定できます。Amazon Detective は、AWS リソースからログデータを自動的に収集し、機械学習、統計的分析、グラフ理論を使用して、リンクされたデータセットを構築します。これにより、より迅速かつ効率的なセキュリティ調査を簡単に行えます。

引用元:https://aws.amazon.com/jp/detective/

以下のタイプの AWS ログからデータを取得します。

  • Virtual Private Cloud (VPC) Flow Logs
  • AWS CloudTrail
  • Amazon GuardDuty

仕組み

ログイン試行、API コール、ネットワークトラフィックなどの時間ベースのイベントを自動的に抽出します。
また、GuardDuty によって検出された結果も取り込みます。

image.png

特徴

  • 異種のイベントをグラフモデルに統合
  • 効率的な調査のためのインタラクティブな視覚化
  • セキュリティに関する調査結果を調べるためのシームレスな統合
  • 事前にデータソースを統合したり、複雑な設定を維持したりする必要のないシンプルなデプロイ

料金

取り込まれたデータ 料金
最初の 1,000 GB/アカウント/リージョン/月 2.70USD/GB
次の 4,000 GB/アカウント/リージョン/月 1.35USD/GB
次の 5,000 GB/アカウント/リージョン/月 0.68USD/GB
10,000 GB 以上/アカウント/リージョン/月 0.34USD/GB

詳細:https://aws.amazon.com/jp/detective/pricing/

開始方法

ゴール

前提条件

  1. AWS にサインアップする
  2. Amazon GuardDuty が少なくとも 48 時間有効になっている
  3. アカウントデータボリュームは Detective クォータ内にある
  4. GuardDuty CloudWatch 通知の更新頻度は、デフォルトで6 時間です。GuardDuty 管理者アカウントはディテクターの設定を 15 分に変更することをお勧めします。
Amazon Detective の前提条件と推奨事項 - Amazon Detective

https://docs.aws.amazon.com

手順

手順はざっくり以下の通りです。

  1. Amazon Detective の有効化
  2. メンバーアカウントを招待
  3. データの抽出を確認
  4. Amazon Detective でのアクションと使用状況の追跡

1. Amazon Detective の有効化

Amazon Detective コンソールに移動→[開始方法]を選択します。

image.png

管理者アカウント向けの推奨事項が表示されます。

image.png

Detective 有効の前に、動作グラフ管理のために必要な IAM ポリシー を IAM プリンシパルにアタッチします。
このポリシーでは、Detective ですべての管理者アカウントアクションを実行できます。

IAM ポリシーをコピーします。

image.png

IAM ポリシー コンソールに移動 → [ポリシーの作成]を選択します。

image.png

[JSON]を選択 → コピーした IAM ポリシーをペースト → [次のステップ: タグ]を選択します。

image.png

今回はタグの設定をスキップします。
[次のステップ:確認]を選択します。

image.png

ポリシー名を入力して[ポリシーの作成]を選択すると、IAMポリシーが作成されます。

image.png

Detective のセットアップのページに戻り、[Amazon Detectiveを有効化]を選択します。

image.png

これで Detective が有効化されます。

image.png

Amazon Detective の有効化 - Amazon Detective

https://docs.aws.amazon.com

2. メンバーアカウントを招待

下図のような流れでメンバーアカウントを招待することができます。

image.png

[アクション]メニューから[アカウントを招待]を選択します。

image.png

招待したい AWS アカウント ID と E メールアドレスを入力します。

image.png

招待メールを編集することもできますが、今回は既定のままでいきます。

image.png

メンバーアカウント側でも メンバーアカウント用のIAMポリシーを設定する必要があります。
[招待]を選択します。

image.png

これで新しいメンバーが招待されました。

image.png

招待を受けたアカウントには以下のように通知が来ます。

image.png

[other notifications]タブ→[Detective member invitation]を選択します。

image.png

招待の詳細情報が表示されます。
招待を承認するには 以下の赤枠内のリンクをクリックします。

image.png

[招待を承諾]を選択します。

image.png

これで招待は承諾されました。

image.png

管理者アカウントでメンバーアカウントの有効化をします。
有効にしたいアカウントのチェックボックスにチェックを入れ、[アカウントの有効化]を選択します。

image.png

[有効化]を選択します。

image.png

3. データの抽出を確認

Detective を有効にすると、AWS アカウントのデータを動作グラフに取り込み、抽出し始めます。

ナビゲーションペインで[検索]を選択→[タイプを選択]メニューから項目の種類を選択します。
今回は[AWSアカウント]を見てみます。

image.png

下図のように、成功した呼び出しと失敗した呼び出しがグラフで確認できます。

image.png

下にスクロールしてアクティビティの詳細を確認します。
IPアドレスごとのAPIコールの種類や成功/失敗の数を見ることができます。

image.png

4. Amazon Detective でのアクションと使用状況の追跡

Detective アクティビティを追跡しやすくするために、[使用状況] ページには、取り込まれたデータ量と推定コストが表示されます。

image.png

管理者アカウントの場合は 動作グラフ全体のデータ量と推定コストが表示され、
メンバーアカウントの場合は 寄与する動作グラフ全体でアカウントのデータ量と予測コストが表示されます。

Amazon Detective でのアクションと使用状況の追跡 - Amazon Detective

https://docs.aws.amazon.com

動作グラフの使用状況とコストのモニタリング (管理者アカウント):https://docs.aws.amazon.com/ja_jp/detective/latest/adminguide/usage-tracking-admin.html

さいごに

Amazon Detectiveを使うと、AWS環境のセキュリティ問題を簡単に分析・調査できることが分かりました。
30日間の無料トライアル期間が設けられているのもいいですね。

参考ドキュメント

Amazon Detective のセットアップ - Amazon Detective

https://docs.aws.amazon.com


Amazon GuardDutyを使ってみた

構成

こちらの記事は AWS セキュリティサービスを使ってみた シリーズの Part. 2の記事です。
他にも以下のサービスについてまとめております、ぜひご覧ください。

Part.1
AWS WAF
Part.2
Amazon GuardDuty
Part.3
AWS Detective
Part.4
AWS Security Hub

【随時更新】 AWS セキュリティ製品一覧:
https://recipe.kc-cloud.jp/archives/17259

Amazon GuardDutyとは

Amazon GuardDutyは、セキュリティの観点から脅威リスクを検知するAWSマネージド・サービスです。悪意のある IP アドレスやドメインのリストなどの脅威インテリジェンスフィード1および Machine Learning を使用して、AWS 環境内の予期しない潜在的に未許可なアクティビティや悪意のあるアクティビティを識別します。

Amazon GuardDuty Intelligent Threat Detection in the AWS Cloud

要は、何らかの攻撃をAWSアカウントやAWS環境に検知した場合教えてくるサービスですね。

機能としては以下が挙げられます。

  • 機械学習による異常検知の仕組み
  • 難しい設定は不要。誰でも使えるサービス
  • 東京を含む、15のリージョンで使用が可能
  • EC2またはIAMにおける脅威を検出
  • 安価な料金体系で、30日間の無料体験有

料金も見ていきましょう。

    AWS CloudTrail 管理イベント分析   料金(100万イベント当たり)
 100 万イベント/月 4.72USD
  AWS CloudTrail S3 データイベント分析   料金(100万イベント当たり)
 最初の 5 億イベント/月 1.04USD
次の 45 億イベント/月 0.52USD
50 億を超えるイベント/月 0.26USD
  VPC フローログと DNS ログ分析     料金(GB当たり)
最初の 500 GB/月 1.18USD
次の 2000 GB/月 0.59USD
次の 7,500 GB/月 0.29USD
10,000 GB/月を超えた場合 0.17USD

※1 脅威インテリジョン:攻撃者の意図や能力・設備などに関す津情報を整理及び分析することで有益な知識を導き出し、使用可能な物に変えたもの

開始方法

開始方法は以下の通りになっております。

2021-04-08_15h04_05.png
「Amazon GuardDuty の開始方法」

なんだか簡単そうですね。

ゴール!

今回は、GuardDuty コンソールまたは API を使用したサンプル結果の生成をするところまでやります。

前提条件

  • AWSアカウントが必要になります

手順

手順はざっくり以下の3つです。

  1. AWSアカウントからAmazon GuardDutyを開く
  2. サンプル結果を表示する
  3. 結果を評価する

1. AWSアカウントからAmazon GuardDutyを開く

それではAWSアカウントにログインして、Amazon GuardDutyを開いていきましょう。
AWSマネジメントコンソール画面で「Amazon GuardDuty」と検索すると以下の画面が出てきます。

2021-04-08_14h50_47.png

今すぐ始めるをクリック!

サービスのアクセス権限画面になりました。

2021-04-08_15h01_47.png

「GuardDutyを有効化2」して行きましょう。
※2 GuardDutyを有効化すると、GuardDutyの30日間無料トライアルに自動的に登録されます。

image.png

このような画面が表示されます。

ここまでは難しくありませんね。

2. サンプル結果を表示する

GuardDutyは、開くと同時に結果が表示されます。
今回は何もサービスを利用していないIAMユーザーを利用してのデモになりますので、まだ画面には結果が表示されません。

それでは、サンプル結果を表示していきましょう。
画面左側のナビゲーションペインで [設定] を選択して下さい。

2021-04-08_17h50_26.png

クリックをしたら画面をスクロール。一番下ら辺に「結果のサンプル」といった項目が確認できます。こちらをクリック。

2021-04-08_17h51_02.png

これで完了です。
コンソール画面に戻りましょう。

3. 結果を評価する

不信なアクティビティのサンプルが表示されるようになりました。

2021-04-08_17h50_06.png

左側のアイコン「丸、四角、三角」は重要度を表しているそうです。

丸:L
四角:Medium
三角:High

表示されている結果では重要度の高いものが多く見受けられますので、優先的に対応していく必要がありますね。

さいごに

今回はAmazon GuardDutyの解説及びサンプル結果の表示までを行ってみました。
AWSでのセキュリティ対策に不安がある人にも使えるのは、流石AWSといったところでしょうか。

手間もかからず、安価な料金で使用できるのは嬉しいポイントですね。


【AWS セキュリティ対策】AWS Security Hub

構成

こちらの記事は AWS セキュリティサービスを使ってみた シリーズの Part.4の記事です。
他にも以下のサービスについてまとめております、ぜひご覧ください。

Part.1
AWS WAF
Part.2
Amazon GuardDuty
Part.3
AWS Detective

【随時更新】 AWS セキュリティ製品一覧:
https://recipe.kc-cloud.jp/archives/17259

はじめに

AWS Security Hubについてまとめてみました。
AWS Security Hubの概念から実際どのように使用するのか?といったところまで今回はまとめてみたいと思います。

概要

AWS Security Hubとは、
AWSサービスのセキュリティアラートを一元管理し、コンプライアンスチェックを自動化するサービスです。

複数のAWSサービスで発生するセキュリティアラートをそれぞれのサービスで管理するのは煩雑なので、AWS Security Hubを利用し、複数のAWSサービスで発生するセキュリティアラートを集約・管理、優先順位付けを行い、1つの管理画面で分かりやすく確認することができます。

AWS Security Hubを導入することで、複数のサービスにまたがって届く大量のセキュリティアラートをひとつづつ確認して処理する手間や時間を省略することができます。

機能

AWS Security Hubの主要なサービスは以下の3つになります。

  • 使用しているセキュリティサービスを一元管理
  • AWS パートナーネットワーク (APN) が提供するセキュリティソリューションと連携
  • CIS AWS Foundations Benchmarkコンプライアンスチェック

使用しているセキュリティサービスを一元管理

複数のAWSサービスで検知された優先度の高いセキュリティアラート、コンプライアンスの状態を集約された管理画面で分かりやすく確認することができます。

AWS Security Hubの一元管理の対象にできるAWSサービスは以下になります。

  • Amazon GuardDuty
  • Amazon Inspector
  • IAM Access Analyzer
  • Amazon Macie
  • AWS Firewall Manager

image.png

AWS パートナーネットワーク (APN) が提供するセキュリティソリューションと連携

AWS Security Hubでは、AWSのセキュリティサービスだけでなく、DeepsecurityといったAWS Security Hubが対応しているAWS パートナーネットワーク(APN)が提供するセキュリティソリューションが検出したセキュリティアラートも自動的に集約、一元管理してくれます。

AWS パートナーネットワーク(APN)は以下のリンクをご確認ください。
https://aws.amazon.com/jp/security-hub/partners/

CIS AWS Foundations Benchmarkコンプライアンスチェック

CIS(Center for Internet Security)は、インターネット・セキュリティ標準化に取り組むアメリカの非営利団体です。
CISがAWSのセキュリティ基準として発表したものが、CIS AWS Foundations Benchmarkになります。
CIS AWS Foundations Benchmarkを利用し、AWS環境がセキュリティ上の問題がないかチェック、修正すべき設定に優先順位を付けて監査結果を1つの画面に分かりやすく表示します。
監査結果から、修正すべき設定の数と現在のセキュリティ状態が把握できます。

定期的に必要なモニタリングを自動化できるのが便利ですね。

ただし、モニタリングは自動化できますがAWS Security Hubには自動修復機能はないのでセキュリティ上の問題が発生したときは管理者自身で対応する必要があります。

実際のAWS Security Hub管理画面

image.png

料金(USD)

コンプライアンスチェックの回数

※1アカウント、1リージョン、1か月あたりの料金

セキュリティアラート数 1チェック当たりの料金
最初の 100,000 0.0010 USD / 1チェックあたり
100,001~500,000 0.0008 USD / 1チェックあたり
500,001 以上 0.0005 USD / 1チェックあたり

検出結果の取り込みイベント

検出結果の取り込みイベント数 1イベント当たりの料金
Security Hub のセキュリティチェックに関連する、検出結果の取り込みイベント 無料
イベント/アカウント/リージョン/月あたり最初の 1 万回 無料
イベント/アカウント/リージョン/月あたり 1 万回を超える場合 0.00003USD/イベント

ゴール

今回はAWS Security Hubを有効化するところまでやっていきます。

手順

手順はざっくり以下の3つです。

  1. AWS コンソールにログインして AWS Security Hub を選択する
  2. AWS Config の有効化
  3. セキュリティ警告の管理を開始する

1. AWS コンソールにログインして AWS Security Hub を選択する

AWS Security Hubを有効化するために、AWSコンソールにログインします。
今回はIAMユーザでログインします。
image.png
AWSコンソールにサインインしたら、AWS Security Hubをクリックします。
image.png

2. AWS Config の有効化

AWS Security Hubコンソールに移動し、設定をしていきます。
2021-04-09_16h54_48.png
AWS Security Hubを有効化するために、AWS Configでリソースの記録を有効化する必要があります。
AWS Configコンソールの有効化は以下のリンクをご確認ください。
https://aws.amazon.com/jp/config/

AWS Configコンソールを有効化したら、ページ下のSecurity Hubの有効化をクリックします。

3. セキュリティ警告の管理を開始する

AWS Security Hubの有効化が完了すると以下のページに移動します。
こちらから各AWSセキュリティサービスのアラートを確認したり、
CIS AWS Foundations Benchmarkを基にしてAWS環境がセキュリティ上の問題がないかチェック、修正すべき設定に優先順位を付けて監査結果を1つの画面に表示できるようになります。
2021-04-09_17h02_02.png

これでAWS Security Hubの有効化が完了です。

AWS Security Hubを使ってみた感想

たったの3ステップでAWS Security Hubの有効化が完了しました。
今までの大量のセキュリティアラートを一括管理できるのはとっても便利だと思います。
必ず有効化すべきサービスの1つですね!

最後まで見ていただき、ありがとうございました!

参考資料

AWS Security Hub公式ドキュメント
https://docs.aws.amazon.com/securityhub/index.html


【AWS セキュリティ対策】AWS WAF編

構成

こちらの記事は AWS セキュリティサービスを使ってみた シリーズの Part.1 の記事です。
他にも以下のサービスについてまとめております、ぜひご覧ください。

Part.1
AWS WAF (本記事)
Part.2
Amazon GuardDuty
Part.3
AWS Detective
Part.4
AWS Security Hub

【随時更新】 AWS セキュリティ製品一覧:
https://recipe.kc-cloud.jp/archives/17259

AWS WAFとは

AWS WAF は、Amazon CloudFront ディストリビューション、Amazon API Gateway REST API、Application Load Balancer、AWS AppSync GraphQL API のいずれか に転送される HTTP および HTTPS リクエストのモニタリング可能にするウェブアプリケーションファイアウォールです。

引用元:https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/what-is-aws-waf.html

web ACLとは

AWS WAF では web ACL(ウェブアクセスコントロールリスト) を作成し、web ACL にルールを追加することで、紐づけたAWSリソースを保護します。
web ACL に適用するルールにより、ウェブリクエストへの処理方法が指定されます。

マネージド ルールグループとは

AWS WAF では マネージド ルールグループ といって、事前定義されたすぐに使用できる ルールのコレクション が用意されております。
web ACL にワンクリックで追加して 適用することができます。

マネージド ルールグループ一覧:https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/waf-managed-rule-groups.html

できること

基本的に、AWS WAF では以下のいずれかの動作を選択できます。

  • 指定したリクエスト以外のすべてのリクエストを許可する
  • 指定したリクエスト以外のすべてのリクエストをブロックする
  • 指定したプロパティに一致するリクエストをカウントする

保護条件のプロパティ

AWS WAF では、AWSより提供されるマネージド ルールグループの適用のほか、独自でルールを定義して適用することも可能です。
保護条件のプロパティは以下の通りです。

  • リクエストの発生元の IP アドレス
  • リクエスト送信元の国
  • リクエストヘッダーの値
  • リクエストに表示される文字列
  • リクエストの長さ
  • 悪意のある可能性がある SQL コードの有無
  • 悪意のある可能性があるスクリプトの有無

あわせて使いたいサービス

AWS Firewall Manager や AWS Shield を組み合わせて使用することで、包括的なセキュリティソリューションを作成できます。

AWS Firewall Manager:AWS WAF の管理を簡素化できます。
アカウント間で AWS WAF を使用したり、AWS WAF 設定を高速化したり、新しいリソースの保護を自動化したりします。

Shield Advanced:AWS WAF の専用サポートや高度なレポート機能・DDoS Response Team (DRT)の機能を追加します。
視性の高いウェブサイトを所有している場合やDDoS、頻繁に攻撃を受けやすい場合に有効です。

料金

作成する各 web ACL および web ACL ごとに作成する各ルールに対して請求されます。
さらに、web ACL によって処理された web リクエストの数に対して請求されます。

リソースタイプ 料金
Web ACL 5.00USD、月あたり (時間で案分)
ルール 1.00USD、月あたり (時間で案分)
リクエスト 0.60USD 100 万リクエストあたり

また、AWS Marketplace にて有料で提供されるマネージドルールグループを購入する場合は、出品者による料金設定に基づいて追加料金が請求されます。

詳細:https://aws.amazon.com/jp/waf/pricing/
こちらのリンク先に埋め込まれている料金計算ツールを使って、概算を見積もることも可能です。

開始方法

ゴール

今回は、web ACLの作成をするところまでやります。
独自のルール作成と、マネージド ルールグループの適用を行います。

前提条件

  1. AWS アカウントにサインアップする
  2. IAM ユーザーを作成する
セットアップ - AWS WAF、AWS Firewall Manager、AWS Shield Advanced

https://docs.aws.amazon.com

手順

手順はざっくり以下の通りです。

  1. web ACL を作成する
  2. 文字列一致ルールの追加
  3. AWS マネージド ルールグループ の追加
  4. web ACL の設定を完了する
  5. リソースのクリーンアップ

1. web ACL を作成する

AWS マネジメントコンソールにサインインし、AWS WAF を開きます。

[Create web ACL] から web ACLの作成に入ります。

image.png

web ACLの作成とAWS リソースへの関連付け

Name:web ACLの名前を入力します。
Description:web ACLの説明を入力します。(オプション)
CloudWatch metric name:必要に応じて CloudWatch 名を変更します。
Resource type:CloudFront ディストリビューションを選択します。
Region:Resource typeでCloudFront ディストリビューションを選択したことにより、自動でグローバルが選択されます。
Associated AWS resources:紐づける AWS リソースを追加します。今回は割愛します。

上記の設定が完了したら [Next] を選択します。

image.png

2. 文字列一致ルールの追加

独自のルールを作成する

[Add rules] → [Add my own rules and rule groups]の順に選択します。

image.png

Rule type で Rule builderを選択 → Rule visual editor を選択します。
※Rule visual editor のほかに Rule JSON editor も用意されております。
web ACLs 間で設定をコピーする際に便利です。

image.png

Name:ルール名を入力します。
Type:Regular ruleを選択します。

image.png

値 User-Agent のウェブリクエストの BadBot ヘッダーを検査するように設定していきます。

If a request:matches the statement(リクエストの場合ステートメントに一致)を選択します。
Inspect(検査):Headerを選択します。
Header field name(検査するヘッダー):User-Agentを入力します。この値では大文字と小文字は区別されません。
Match type(指定した文字列が User-Agent ヘッダーに表示される場所):Exactly matches string(文字列に完全一致)を選択します。
String to match(検索する文字列を指定):BadBotを入力します。
Text transformation(テキスト変換):Noneを選択します。

image.png

Action:Countを選択します。これにより、ルールに一致するウェブリクエストのメトリクスが作成されます。ルールが許可されるか、ブロックされるかどうかには影響しません。

[Add rule]を選択します。

image.png

3. AWS マネージド ルールグループ の追加

Add rules → Add managed rule groups の順に選択します。

image.png

AWS managed rule groupsの一覧を展開します。
追加するルールグループの [Action] 列の [Add to web ACL] の切り替えをオンにします。
今回は Core rule set をオンにします。

Core rule set とは

コアルールセット (CRS) ルールグループには、ウェブアプリケーションに一般的に適用可能なルールが含まれています。これにより、OWASP の出版物に記載されている高リスクの脆弱性や一般的な脆弱性など、幅広い脆弱性の悪用から保護されます。すべての AWS WAF ユースケースでこのルールグループを使用することを検討してください。

引用元:https://docs.aws.amazon.com/ja_jp/waf/latest/developerguide/aws-managed-rule-groups-list.html

image.png

[Add rules] を選択します。

image.png

4. ウェブ ACL の設定を完了する

更に追加したいルールがある場合は先程と同様の手順で追加します。
無い場合、 [Next] で次に進みます。

image.png

Set rule priority(ルールの優先順位の設定)

web ACL 内のルールおよびルールグループの処理順序を確認できます。

[Next] で次に進みます。

image.png

Configure metrics(メトリクスの設定)]

Amazon CloudWatch metrics:Amazon CloudWatch metrics で、ルールおよびルールグループに計画されたメトリクスを確認できます。
必要に応じて選択を解除したり、メトリクス名を変更したりします。

[Next] を選択します。

image.png

Review and create web ACL(web ACLの作成と確認)

設定内容に問題が無いか確認します。

image.png

[Create web ACL] で web ACL が作成されます。

image.png

web ACL が作成され、web ACL の一覧に表示されたことを確認します。

image.png

5. リソースのクリーンアップ

削除対象の web ACL を選択 → [Delete] を選択します。

image.png

確認の画面が出るので「delete」と入力して削除します。

image.png

さいごに

AWS WAF ではルールセットが多数用意されており、使いたいものをオンにするだけで簡単に使えることが分かりました。
次は 今回作成した web ACL を 他 AWS リソースに紐づけてみて、そのパフォーマンスを見ていきたいと思います。

参考ドキュメント

AWS WAF の開始方法 - AWS WAF、AWS Firewall Manager、AWS Shield Advanced

https://docs.aws.amazon.com


AWS Redshift 活用術 ③ テーブル作成/モデル作成/推論

はじめに

こちらの記事でAmazon Redshift MLの機械学習モデル構築のためのインフラ関連などの準備をしました。
本記事では、実際に機械学習モデルをAmazon RedshiftMLで作成したいと思います。

RedshiftMLについて概要を知りたい方はこちら:

ローデータテーブル作成

以下 SQL クライアントでクエリをたたいています。
モデル作成の権限をユーザーに付与します。

[crayon-6175b98422eb4989779498/]

作成するデータベースやモデルを保持するスキーマを作成します。

[crayon-6175b98422eba637590122/]

ローデータ用のテーブルを作成します。

[crayon-6175b98422ebc828394687/]

S3 から CSV データをインポートします。CSV data S3 URI と iam-role-arn はリソース作成時に拾ったパラメータです。

[crayon-6175b98422ebe446432745/]

ローデータテーブルのプレビュー

[crayon-6175b98422ec0926458728/]

out
image.png

学習用テーブル作成

モデル学習しやすいようにテーブルを作成します。

  • segment (受け取ったキャンペーンメールの種類。Mens E-mail, Womens E-mail, No E-mail) を 1/0 で表現 (w 列)
  • Spend (過去2週間の購入金額) を目的変数として利用 (y 列)
  • 通し番号を unique_id として付与
  • unique_id ベースで TRAIN データと TEST データに分割 (assigm 列)
[crayon-6175b98422ec3046808611/]

学習用テーブルのプレビュー

[crayon-6175b98422ec5045690261/]

out
image.png

モデル構築

TRAIN データに割り振ったユーザーから (assign = 'TRAIN')、男性向けメールを送るを送ったユーザーを抽出し (w = 1) 、指標値を MSE とした回帰モデルを作成します。

  • MSE (平均二乗誤差)
    • 成果位地と予測値の差を事情し、平均値をとったもの
    • 実際と予測値の誤差が大きいほどモデルの精度が悪いと判断
    • 外れ値にも過剰適合(=過学習)してしまう可能性も

今回のケースだとこのようになります。

[crayon-6175b98422ec7571628958/]

以下クエリでモデルの概要を取得できます。

[crayon-6175b98422ec9181323154/]

今回のデータセットではモデル構築の完了に一時間ほど要しました。
完了次第、SageMaker > ハイパーパラメータの調整ジョブからジョブの実行にかかった時間などを見ることができます。
未完了の状態で推論するクエリを投げてもモデルの準備ができていないとエラーが返ってきます。
のんびり待ちましょう。

2021-03-12_02h44_34.png

推論実行

推論結果の参照を Redshift の別ユーザーが行う場合は、権限を付与します。

[crayon-6175b98422ecc160113334/]

以下で Redshift 経由で推論結果を取得できます。uplift_treatment の数値が高いユーザーに対して優先的に販促キャンペーンを打てそうです。

[crayon-6175b98422ece984291148/]

out
image.png

CREATE MODEL構文

AUTO_ML を利用する場合

上記では AUTOML 機能を用いました。 (AUTO ON)
もっともシンプルに実装する場合の基本構文は以下の通りです。

[crayon-6175b98422ed0445390637/]

備考

メトリクス

機械学習モデルの品質を測定するための指標として5種から選択できます。
データセットや予測対象の属性、予測結果の用途に応じてどのメトリクスが適当かどうか変わってきます。

  • Accuracy
    • 他項分類のデフォルトメトリクス
  • MSE
    • 回帰のデフォルトメトリクス
    • 利用されるデータに外れ値が多い場合精度が低くなりやすいので注意
  • F1
    • 二項分類のデフォルト
    • 適合率と再現率を等しく重視する
    • 回帰でMSEだと精度が上がりにくい場合にも
  • F1macro
    • 他項分類で利用
    • F1 スコアの他項分類版
  • AUC
    • 確率を返すロジスティクス回帰などの二項分類で利用

ハイパーパラメータ調整ジョブの実行時間

モデル学習がいつ終わるか把握したいものですが、SQL クライアントからはこの情報をパッシブに取得できません。以下迂回策です。

CloudWatch を利用

先述の通り、RedshiftML の学習データは指定の S3 バケットに保存され、学習完了時に削除されます。これをトリガーにして CloudWatch で通知を受け取るように設定します。
なお、S3_GARBAGE_COLLECT オプションを明示する際は ON にする必要があります (デフォルトはON)

CloudWatch イベント ルールの削除または無効化 - Amazon CloudWatch Events

https://docs.aws.amazon.com

MAX_RUNTIME を設定

トレーニングの最大時間を指定するオプションです。
デフォルト値は 90分 (5,400秒) で、データセットが小さい場合は指定値よりも早く完了します。
ジョブ完了通知ではありませんが、短時間でトライアンドエラーして進めたい時に使えそうです。

参考クエリ

使うクエリを乗せておきます。

[crayon-6175b98422ed3182127181/]

まとめ

SQL だけで機械学習モデルのデプロイ、Redshift 経由で推論結果の取得までできるのは便利だと思いました。
バックエンドでは SageMaker Autopilot が動作しているので、SageMaker のコンソールからモデルをデプロイすればエンドポイント経由での推論も可能です。
そうなればドリフト値を SageMaker Model Monitor でトラッキング出来るので MLOPS 環境の構築のハードルも下がるのではないでしょうか?
Redshift上にある顧客データを活用できる便利なサービスなので、Redshift ユーザーは是非触ってみてください。

参考リンク

モデリング部分のSQLスクリプトはこちらの記事からお借りしたものをベースにしています

Redshift MLでUplift Modeling分析|Dentsu Digital Tech Blog|note

https://note.com

Amazon Redshift ML の紹介記事です。

Create, train, and deploy machine learning models in Amazon Redshift u...

https://aws.amazon.com

公式ドキュメント

Getting started with Amazon Redshift - Amazon Redshift

https://docs.aws.amazon.com

Demo of Preview of Amazon Redshift ML

https://youtu.be

AutoMLJobObjective - Amazon SageMaker Service

https://docs.aws.amazon.com


AWS Redshift 活用術 ② インフラ構築

はじめに

RedshiftMLを実際に触ってみた手順を書きたいと思います。
大まかな手順は、

  1. サンプルデータをAWS Redshiftにインポート
  2. Amazon RedshiftMLで機械学習モデルを構築
  3. 機械学習の結果を見る

RedshiftMLで機械学習モデルを構築していきたいと思います。
RedshiftMLって何?という方はAWS Redshift 活用術 ①をご覧ください。

この記事ではAWS環境の構築、後半では機械学習モデルを構築するまでの手順をまとめました。

RedshiftML第3回 機械学習モデル構築の記事URL:

メインターゲット

  • SQLをメインで使用しているデータベース開発者、アナリスト
  • Amazon Redshiftを普段から利用している方

利用するAWSサービス

Amazon Sagemaker Autopilot

  • 自動機械学習(AutoML)のタスクを自動化
  • 最適な機械学習アルゴリズムを自動的に選択してくれる
  • モデルのトレーニング、チューニングが簡単にできる
  • 初期費用¥0からスタートできる
  • 回帰、二項分類、複数クラスの分類をサポートしてくれる

詳しくはこのページをご覧ください。
image.png
Amazon Redshift ML

  • SQLを使ってRedshift内のデータから機械学習モデルを構築・デプロイ
  • 予測結果もSQLを叩いて取得
  • Redshift ML のバックエンドでは Amazon Sagemaker Autopilot が動いている
Terms and concepts for Amazon Redshift ML - Amazon Redshift

https://docs.aws.amazon.com

image.png

データセット

本記事ではこちらのウェブサイトの情報とデータを利用します。
イーコマースのログデータが基になっているCSVデータです。

The MineThatData E-Mail Analytics And Data Mining Challenge

https://blog.minethatdata.com

データセットの詳細

  • 顧客をランダムに3つに分類して、販促キャンペーンのメールを配信します。
    • メンズ商品のキャンペーン
    • レディース商品のキャンペーン
    • 配信なし
  • ウェブサイトの訪問履歴・購入金額をトラッキング
  • トラッキングの期間はキャンペーンメール配信から2週間

目的
やみくもにキャンペーンをするのは販促費などの無駄になります。よって、

  • 普段は商品購入意欲が高くない
  • キャンペーンを行うと商品購入する可能性が大幅に上がる

といったユーザーに絞って販促費を投入できればROI(Return On Investment、その投資でどれだけ利益が上げられたかを知る指標)が最大化できるはずです。

ROI最大化の手法の一つに、Uplift Modeling というものがあります。

Python で Uplift modeling - Qiita

https://qiita.com

本記事では Uplift Modeling のロジックへの組み込みを想定し、特定のキャンペーンを打つべきユーザーを予測する機械学習モデルを作成します。
モデル作成には2020年12月にパブリックプレビューになった Amazon Redshift ML を利用します。

データセット

  • 過去12か月以内に物品を購入した64,000人の顧客情報
  • ダウンロードURL
    • Windows であれば、リンクを右クリック > リンク先を保存

スキーマ

カラム名 データ型 概要
Recency int4 前回の購入から経過した月数
History_Segment varchar(256) 過去1年間の購入金額の区分
History float (8) 過去1年間の購入金額
Mens boolean 過去に男性向け製品を購入したかどうか
Womens boolean 過去に女性向け製品を購入したかどうか
Zip_Code varchar(256) 顧客の居住カテゴリ。Urban, Sunurban, Rural
Newbie boolean 過去1年で新規顧客になったかどうか
Channel varchar(256) 過去に顧客が購買した経路
Segment varchar(256) 受け取ったキャンペーンメールの種類。Mens E-mail, Womens E-mail, No E-mail
Visit boolean 過去2週間にウェブサイトを訪問したかどうか
Conversion boolean 過去2週間に購買に至ったかどうか
Spend float (8) 過去2週間の購入金額

AWS環境構築

IAMロール

Redshift ML 経由で SageMaker Autopilot を操作できるようにするため、対応する権限を設定します。

IAM > ロール > ロールの作成
image.png
AWS サービス > Redshift と進み、
image.png
画面下部の Reedshift - Customiable を選択
image.png
ロール名を任意で設定、ロールの作成をクリック
image.png
作成したロールを開き、アクセス権限のタブで

  • AmazonS3ReadOnlyAccess(Amazon S3 バケットに読み取り専用アクセスを付与します)
  • AmazonSageMakerFullAccess(Amazon Sagemakerのフルアクセル権限をふよします)

のポリシーをアタッチします。
上記のポリシーは実行権限が大きいので、本番デプロイ時には以下の公式ドキュメントをご覧いただき、権限を絞ることをおすすめします。

Amazon S3 からデータを読み込むための Amazon ML アクセス許可の取得 - Amazon Machine Learning

https://docs.aws.amazon.com

Amazon S3 に予測を出力するために Amazon ML のアクセス許可を得る - Amazon Machine Learning

https://docs.aws.amazon.com

信頼関係のタブで、redshift と sagemaker を追加
image.png

TrustedEntity

[crayon-6175b984231c5146908017/]

これでRedshiftとSagemakerのサービスを信頼します。
最後に iam role arn をコピーします。(Redshiftクラスタの構築で必要になります)
image.png

S3

今回はシンプルな構築にするため、以下の条件を満たす単一S3バケットを構築します。

  • Redshift テーブル用データの保存
  • Redshiftml Amazon S3 からデータを読み込むための Amazon ML アクセス許可の取得
  • Amazon S3 に予測を出力するために Amazon ML のアクセス許可を得る

S3バケットをデフォルト値で構築、S3 ARN をコピーします。(こちらもRedshiftクラスタの構築で必要になります)
image.png
アクセス許可 > バケットポリシーと進み、Amazon Redshift と SageMaker Autopilot が利用できるように以下の通りバケットポリシーを変更します。
先ほど作成したロールをプリンシパルに設定します。

[crayon-6175b984231cc603173521/]

Redshiftクラスタ

Redshiftクラスタの構築に iam role arn と S3 ARN が必要です。

設定 > サブネットグループと進み、任意で名称を設定、VPC のすべてのサブネットを追加、クラスターサブネットグループの作成をクリックします。
image.png
クラスタ > クラスタの作成
image.png
クラスタ識別子を任意で入力。dc2.large が最も安価なクラスタだが Redshift ML は対応していないので注意してください。 (2021年5月11日時点)
image.png
Database Name、Port、Master User Name はデフォルト値でOKです。
Password を任意で入力します。Master USer Name と Password を控えておいてください。(Redshiftにデータセットをアップロードするときに必要になります)
image.png
クラスタのアクセス許可から先ほど作成した IAM ロールの iam role arn を選択、「IAM ロールを追加」を選択します。
image.png
今回ローカルの SQL クライアントからクエリをたたく。追加設定のデフォルトを使用を解除し、ネットワークとセキュリティの項目で、パブリックアクセスの有効化にチェックを入れます。
image.png
メンテナンスタブ > メンテナンストラックでプレビューの sql_preview を選択。ここまで設定が完了したらクラスタの作成へと進みます。
image.png
デプロイが完了したら、JDBC URL を控えておきます。
image.png

VPC

Redshift クラスタをインターネット経由で操作できるよう、ネットワークを構成します。
先ほど作成したクラスタのプロパティから、VPC セキュリティグループと進みます。
image.png
デフォルトだと下記の状態。インバウンドルール > インバウンドルールを編集
image.png
ルールの追加 > タイプを Redshift に選択 > マイIP と進み、ルールを保存をクリック。この作業でローカル環境から Redshift への接続が通るようになる。
image.png
アウトバウンドルールが以下の状態になっていることを確認します。
image.png
備考:Redshift クラスタの VPC サブネットのルートテーブルで、送信先 0.0.0.0/0 が blackhole になっている場合、SQL クライアントから接続する際、Connection Timeout が発生する。ルートの編集と進み、該当設定を再設定する
image.png

【AWS】ルートテーブル(route table)のステータスが blackhole の状態になる原因【VPC】

https://go-journey.club

IGW(インターネットゲートウェイ)

インターネットに接続するためのゲートウェイがない場合は以下手順で構築します。
Redshift クラスタのプロパティから VPC と進み、別タブで開いておく
image.png
VPC ダッシュボード > インターネットゲートウェイ > インターネットゲートウェイの作成
image.png
任意でゲートウェイの名称を入力、作成をクリックします。
image.png
作成したインターネットゲートウェイを Redshift クラスタが稼働しているVPCにアタッチします。
image.png

データセット アップロード

ダウンロードした CSV データを S3 にアップロード、S3 URI をコピーしておきます。
image.png
今回は SQL クライアントに DBeaver を用いる。

DBeaver Community | Free Universal Database Tool

https://dbeaver.io

DBeaber をインストールしたら、新しい接続を選択、Redshift へと進む
image.png
JDBC ホスト、Master USer Name 、 Password を入力し、終了をクリックします。
JDBC ホスト名は、JDBC URL から dbc:redshift:// と :5439/devを除いた文字列となるので注意!
image.png

まとめ

次の記事はこちらになります。
次の記事でRedshiftMLモデルの構築をやっていきたいと思います。

参考リンク

Amazon RedshiftMLの紹介記事です。

Create, train, and deploy machine learning models in Amazon Redshift u...

https://aws.amazon.com

公式ドキュメント

Amazon Redshift のプライベートクラスターをパブリックアクセス可能にする

https://aws.amazon.com

Amazon S3 からデータを読み込むための Amazon ML アクセス許可の取得 - Amazon Machine Learning

https://docs.aws.amazon.com


データ分析プロジェクトで考えておきたいポイント ① ツール選定の指針

はじめに

データ分析プロジェクトを進めていくうえでまず考えたいことを整理します。
ビジネスドメインのメンバーにも伝わるよう、できるだけ技術用語は使わないよう留意しました。

やっぱり銀の弾丸はない

最初から身もふたもないですが、やっぱり銀の弾丸(=これをやれば万事解決する)はありません。
AI モデルはあくまで「ツール」であり、「目的」を設定して価値を見出すのは「ユーザー」です。
とはいえある程度は指針が欲しいので、まずはここを抑えるべきというポイントを2点あげます。

ツール選定の指針

AI 関連ツールはざっくりと以下3種に大別できます。

  • 特化アプリケーション組み込み型
    • 特定の目的のために開発されたAIを搭載したアプリケーション
    • デファクトスタンダードになっているアプリは除く
      • 利用者が段違いに多くどんどん平準化/最適化されていく
      • ex. Office365、Google Workspace
  • API 連携型
    • いわゆる「マネージドAI」と呼ばれるクラウド型のサービス
    • API で連携してモデルの結果を取得
    • 従量課金型が多い
    • 自社で管理しているアプリケーションがある場合、すぐに組み込み可能
  • 自社開発
    • データ分析基盤を利用し自社でモデルを開発
    • プラットフォームによっては従量課金型
    • 各社基盤を用意していて、データ回りのサービスとの連携に優れる

それぞれのツールにメリット/デメリットがあります。
要件定義の重要性はどのツールを利用しても変わりません

AIツール種別 モデル
実装難易度
アーキテクチャ設計
/システム導入難易度
ナレッジの蓄積 汎用性
(ex.モデルを別のシステムから利用)
拡張性
(ex. 外部システムと連携)
#1 特化アプリケーション組み込み型 - - ベンダーに依存 ベンダーに依存
#2 API 連携型 (マネージドAI利用) - ★★ ★★ ★★★ 周辺アーキテクチャの拡張性次第
#3 自社開発 (データ分析基盤利用) ★★★ ★★★ ★★★ ★★ 実装者の能力とアーキテクチャの拡張性次第

個人的に重要視している点は以下の通りです。

  • ナレッジ蓄積
    • 変化への対応可否に直結
    • 人材育成にも直結
    • 中長期的な組織活性には不可欠
  • 拡張性
    • 拡張性や汎用性が自社の要件に沿うか = クラウド上の基盤を強くお勧め (別記事で解説します)
    • 将来的に自社の優先度高い要件がベンダーのそれに合致するとは限らないことは留意
  • 開発コスト/運用コスト

技術難易度が非常に高い課題かつ業界で確立された手法がある場合は、#1 特化アプリケーション組み込み型の課題解決がいいと思いますが、個人的には、

  • #2 API 連携型と #3 自社開発 の併用
    • モデルの開発工数次第でスイッチ
    • 便利な API はどんどん使う
  • 過度にパートナーやベンダーに依存しない
    • 足りないところだけうまく補う
    • 補った分はうまく自社に取り入れる (うまく盗む)

が最もバランスが良いと考えてます。

データ分析のパターン

データ分析のパターンで分類します。
大枠ではこちらも 3 つです。

テーマ 主な利用主体 仮定は必須? 技術難易度 備考
#1 省人化 営利企業 ★★★ プロセスの改善が進むことでコストの低下が見込めるようなケース
・ex.発注業務の一部を代替可能な AIモデル
・ex.有人で検知していた異常を一定の精度で検出するAIモデル
業務設計や組織的な課題が関係してくる
#2 付加価値向上 営利企業 ★★★ ・ユーザーへの付加価値が向上することで売上向上が見込めるようなケース
・LVT(生涯顧客価値)など手法が確立されている分野も多い
#3 データマイニング 研究開発 × ★★★★★ ・集めたデータから何らかの傾向を発見する=データマイニング
・アカデミックな研究やそもそも仮説設定ができないケースが該当
・「データがあれば何かできそう」もこれに該当
目的が不明瞭なまま進行した場合、実証検証が失敗することが多い

ビジネスの場で成功している実証検証のほぼ 100% が #1 省人化 もしくは #2 付加価値向上 に該当します。
具体的な経営課題の解消をテーマに掲げる以上は、目的の明確化が必須です。
そのうえで仮設立案と検証のサイクルを回し、データ分析の結果をビジネス成果にに紐づけていきます。

注意しなくてはいけないのは、精度指標の類はモデルの状態を表すものであるという点です。
実際にモデルが活用される業務フローを踏まえたうえで、プロジェクト全体を評価する指標は別途設ける必要があります。
よってプロジェクトを進める前に以下をしっかり検討すべきでしょう。

  • 自社で取り組もうとしている課題は 1-3 どれに該当するのか?
  • 1 or 2 であれば AI モデルは自社の業務のどの部分に組み込まれるか?
  • 3 であれば仮説を立てて、1-2 の課題に昇華できないか?
  • モデルが業務に組み込まれた結果、業務プロセスはどのように変化するか?
  • モデルの出力結果は、何らかの形で既存 KPI と紐づけ可能か?

まとめ

私もそうですが、データ分析やAIのプロジェクトはどうしても手法に焦点が当たりがちです。
折に触れてこれらの点は見直すようにしたいところです。


これだけは知っておきたい!ビジネス層のためのデータ分析超入門 ③ 二項分類のユースケース

はじめに

エンジニア歴1年目の私が、機械学習について調べたことをまとめていきたいと思います。

今回は、以前記述した「これだけは知っておきたい!ビジネス層のためのデータ分析超入門 ② 評価指標」を踏まえたユースケースについて確認していきます。

分類問題で重要なのは、望まれる状況がどのような状態で望まない状況がどのようなものであるかをとらえることです。

どの評価指標を最適化するべきかのひとつの考え方として偽陽性・偽陰性に分類されたクラスの影響度合いを考えるというものがあります。これによって再現率/適合率のどちらを最適化すべきかの判断ができます。

「どの場合にどの指標をみるのか」がざっくり把握できれば幸いです!

ゴール

今回は以下のユースケースについて考えていきたいと思います。

ユースケース一覧

  1. 緊急のドキュメント探索
  2. 画像プライバシー保護システム
  3. スパムフィルタ
  4. キーワードによるフォト検索

1. 緊急のドキュメント探索

緊急性の高いドキュメントを他よりも優先するシステムを構築したいとします。
ケースとしては、ファイルフォルダーに蓄積されているドキュメントの仕分けなどで、NDAのような重要書類と過去に行われた定例会議の議事録のような緊急性の低い書類の探索とします。

  • 偽陽性(FP)
    緊急でないドキュメントを緊急であるドキュメントとして分類されること。
  • 偽陰性(FN)
    緊急であるドキュメントを緊急でないドキュメントとして分類されること。

無題のプレゼンテーション (25).png

このようなケースでは、偽陽性(FP)であれば誤って分類されたものは緊急でないと判断して、無視して良いのですが、偽陰性だと重大な問題を見落とすケースにつながってしまう恐れがあります。

そのため、「再現率」を最適化する方が好ましいです。
(取りこぼしなく緊急なドキュメントを緊急なドキュメントと判断するモデル)

2. 画像プライバシー保護システム

登録された画像内の機密情報(クレジットカードの番号など)を検出し、それをぼかすシステムを構築するとします。

  • 偽陽性(FP)
    ぼかす必要のないものをぼかしてしまう。(画像内のなんらかの数字など)
  • 偽陰性(FN)
    クレジットカード番号がぼかされずに残ってしまう。

無題のプレゼンテーション (22).png

このようなケースでは、偽陽性の場合は気になるところはありますがシステム上の弊害はありません。しかし、偽陰性であると、個人情報が盗まれてしまう恐れがあり重大な問題につながってしまいます。

そのため、「再現率」を最適化する方が好ましいと言うことができます。
(取りこぼしなく機密情報をぼかすようにするモデル)

3. スパムフィルタ

スパムメッセージとそうでないものをフィルタリングし、スパムメールを受信フォルダから削除するシステムを構築するとします。

  • 偽陽性(FP)
    スパムでないメールが誤ってスパム認定され、受信フォルダから削除される。
  • 偽陰性(FN)
    スパムメールがフィルタリングされずに受信フォルダに残る。

無題のプレゼンテーション (24).png

今回のケースでは、これまでのケースの反対になります。
偽陽性の場合、正常なメールがスパムメールと認定され削除されてしまうと、もし削除されてしまったメールが重要であった場合に問題が発生してしまう可能性があります。しかし、偽陰性の場合、多少の不快感は残るものの、ビジネス上の損失には直結しません。

そのため、「適合率」を最適化するのが好ましいです。
(スパムをスパムと正しく認定する割合を高くするモデル)

4.キーワードによるフォト検索

特定のキーワードに対応する最適なストックフォトを見つけるシステムを構築するとします。
例えば、「犬の画像」と検索した際に表示された画像に実際に犬が含まれていれば正常に分類されていると判断します。

偽陽性(FP)
キーワードと無関係な画像(車の画像など)が表示されている。

偽陰性(FN)
画像内に犬が写っているが、検索結果に表示されなかった画像が存在する。

無題のプレゼンテーション (27).png

偽陽性については、検索キーワードと関連しない画像が表示されているため好ましい状態ではありません。偽陰性については、キーワードと関連する画像が表示されているため、取りこぼしの画像があったとしても検索システムとしては問題にはなりません。

そのため、「適合率」を最適化する方が好ましいです。
(実施される画像検出が正しく行われるモデル)

さいごに

簡単ではありますが、データ分析評価指標でのユースケースについて解説しました。

ぜひ、参考になれば幸いです。