🔐 STEP 48: セキュリティとアクセス管理
データを守りながら、必要な人に必要な情報を届けよう!
📋 このステップで学ぶこと
- BIツールにおけるセキュリティの重要性
- ユーザー権限設定の基本
- 行レベルセキュリティ(RLS)の実装
- コンテンツの共有と公開設定
- コンプライアンス対応
- 監査ログの活用
ゴール:適切なセキュリティ設計で、安全かつ効率的なデータ共有環境を構築できるようになる
🔐 1. BIツールにおけるセキュリティの重要性
なぜセキュリティが重要なのか
BIツールは企業の重要なデータを扱います。適切なセキュリティ設計がなければ、情報漏洩や不正アクセスのリスクが高まります。「見せたい人に見せたい情報だけ」を届けることが、BIセキュリティの基本です。
| リスク | 具体例 | 影響 |
|---|---|---|
| 情報漏洩 | 顧客データ、売上情報の流出 | 信用失墜、損害賠償 |
| 不正アクセス | 権限外のデータ閲覧 | コンプライアンス違反 |
| データ改ざん | レポートの不正編集 | 意思決定の誤り |
| 内部不正 | 退職者によるデータ持ち出し | 競合への情報流出 |
【BIセキュリティの3つの柱】 1. 認証(Authentication) └─ 「誰がアクセスしているか」を確認 ├─ ユーザーID/パスワード ├─ シングルサインオン(SSO) ├─ 多要素認証(MFA) └─ Active Directory連携 2. 認可(Authorization) └─ 「何にアクセスできるか」を制御 ├─ ロール(役割)ベースの権限 ├─ コンテンツレベルの権限 ├─ 行レベルセキュリティ(RLS) └─ 列レベルセキュリティ 3. 監査(Audit) └─ 「誰が何をしたか」を記録 ├─ アクセスログ ├─ 操作履歴 ├─ ダウンロード記録 └─ 変更履歴
| 機能 | Tableau | Power BI |
|---|---|---|
| 認証 | Tableau認証、AD、SAML、OpenID | Azure AD、Microsoft 365 |
| 行レベルセキュリティ | ユーザーフィルター、計算フィールド | DAXによるRLS |
| 権限レベル | サイト、プロジェクト、ワークブック | ワークスペース、アプリ、レポート |
| 監査ログ | 管理ビュー、監査ログ | アクティビティログ、監査ログ |
| データ暗号化 | 転送中・保存時暗号化 | 転送中・保存時暗号化 |
👥 2. ユーザー権限設定の基本
権限設計の考え方
権限設計は「最小権限の原則」に基づいて行います。必要最小限の権限だけを付与し、業務に必要ない情報へのアクセスは制限しましょう。
Principle of Least Privilege(PoLP)
ユーザーには、業務遂行に必要な最小限の権限のみを付与します。
「見せる必要がないものは見せない」がセキュリティの基本です。
【Tableau Serverの権限階層】 サイトレベル(最上位) ├─ サイト管理者 │ └─ サイト全体の管理権限 │ ├─ プロジェクトレベル │ ├─ プロジェクトリーダー │ │ └─ プロジェクト内の管理権限 │ └─ パブリッシャー │ └─ コンテンツの公開権限 │ └─ コンテンツレベル(最下位) ├─ ワークブック ├─ データソース └─ ビュー 【サイトロール一覧】 ┌────────────────────────────────────────┐ │ ロール │ 権限 │ ├────────────────────────────────────────┤ │ サイト管理者 │ すべての管理機能 │ │ Creator │ 作成・公開・閲覧 │ │ Explorer │ 編集・閲覧 │ │ Viewer │ 閲覧のみ │ │ Unlicensed │ アクセス不可 │ └────────────────────────────────────────┘ 【権限設定手順】 ステップ1: プロジェクト作成 ├─ コンテンツ > プロジェクト > 新しいプロジェクト ├─ 名前: 営業部ダッシュボード └─ 説明: 営業部門専用 ステップ2: 権限設定 ├─ プロジェクト > ・・・ > 権限 ├─ グループ/ユーザーを追加 └─ 権限テンプレートを選択 ├─ プロジェクトリーダー ├─ パブリッシャー ├─ インタラクター └─ ビューア ステップ3: 権限のロック ├─ プロジェクト権限をロック └─ 子コンテンツに継承
【Power BIの権限階層】 テナントレベル(最上位) ├─ Power BI管理者 │ └─ テナント全体の設定 │ ├─ ワークスペースレベル │ ├─ 管理者 │ ├─ メンバー │ ├─ 共同作成者 │ └─ 閲覧者 │ └─ コンテンツレベル(最下位) ├─ レポート ├─ ダッシュボード └─ データセット 【ワークスペースロール一覧】 ┌────────────────────────────────────────────┐ │ ロール │ できること │ ├────────────────────────────────────────────┤ │ 管理者 │ すべて + メンバー管理 │ │ メンバー │ 作成・編集・削除・共有 │ │ 共同作成者 │ 作成・編集(削除・共有不可) │ │ 閲覧者 │ 閲覧のみ │ └────────────────────────────────────────────┘ 【権限設定手順】 ステップ1: ワークスペース作成 ├─ ワークスペース > 新しいワークスペース ├─ 名前: 営業部レポート └─ 説明: 営業部門専用ワークスペース ステップ2: メンバー追加 ├─ ワークスペース > アクセス ├─ メールアドレスまたはグループを入力 └─ ロールを選択 ├─ 管理者 ├─ メンバー ├─ 共同作成者 └─ 閲覧者 ステップ3: コンテンツ共有 ├─ レポート > 共有 ├─ 相手を指定 └─ 権限を設定 ├─ □ 受信者に再共有を許可 ├─ □ 基になるデータセットの使用許可 └─ □ レポートのコピー作成を許可
| 役割 | Tableau | Power BI | 権限内容 |
|---|---|---|---|
| システム管理者 | サイト管理者 | Power BI管理者 | 全体設定、ユーザー管理 |
| BI開発者 | Creator | メンバー | レポート作成・公開 |
| パワーユーザー | Explorer | 共同作成者 | レポート編集・分析 |
| 一般ユーザー | Viewer | 閲覧者 | 閲覧・フィルター操作 |
| 経営層 | Viewer | 閲覧者 | ダッシュボード閲覧 |
🔒 3. 行レベルセキュリティ(RLS)の実装
RLSとは
行レベルセキュリティ(Row-Level Security)は、同じレポートでもユーザーごとに表示されるデータを制限する機能です。例えば、営業担当者が自分の担当地域のデータだけを見られるようにできます。
【同じレポートでも見えるデータが異なる】 売上レポート ┌──────────────────────────────────────────┐ │ │ │ [地域] [売上] [利益] │ │ │ └──────────────────────────────────────────┘ 東京営業部の田中さんがアクセス: ┌──────────────────────────────────────────┐ │ 東京 ¥100M ¥20M │ │ (東京のデータのみ表示) │ └──────────────────────────────────────────┘ 大阪営業部の佐藤さんがアクセス: ┌──────────────────────────────────────────┐ │ 大阪 ¥80M ¥15M │ │ (大阪のデータのみ表示) │ └──────────────────────────────────────────┘ 営業本部長の鈴木さんがアクセス: ┌──────────────────────────────────────────┐ │ 東京 ¥100M ¥20M │ │ 大阪 ¥80M ¥15M │ │ 名古屋 ¥60M ¥10M │ │ (全地域のデータが表示) │ └──────────────────────────────────────────┘
【方法1: ユーザーフィルター】
ステップ1: 権限テーブル作成
┌────────────────────────────────┐
│ ユーザー名 │ 地域 │
├────────────────────────────────┤
│ tanaka │ 東京 │
│ sato │ 大阪 │
│ suzuki │ 東京,大阪,名古屋 │
└────────────────────────────────┘
ステップ2: データソースに結合
├─ 売上データと権限テーブルを結合
└─ 地域フィールドで結合
ステップ3: ユーザーフィルター作成
├─ サーバー > ユーザーフィルターの作成
├─ フィールド: 地域
├─ ユーザーごとに値を選択
└─ すべてのユーザーに適用
─────────────────────────────
【方法2: 計算フィールド(推奨)】
ステップ1: 権限テーブル作成(同上)
ステップ2: 計算フィールド作成
名前: アクセス許可
計算式:
IF CONTAINS([許可地域], [地域])
OR USERNAME() = "suzuki" // 管理者
THEN TRUE
ELSE FALSE
END
ステップ3: データソースフィルター設定
├─ データ > データソースフィルター
├─ アクセス許可 = TRUE
└─ すべてのシートに適用
─────────────────────────────
【方法3: ISMEMBEROF関数(グループベース)】
計算フィールド:
地域フィルター =
IF ISMEMBEROF("東京営業部") THEN [地域] = "東京"
ELSEIF ISMEMBEROF("大阪営業部") THEN [地域] = "大阪"
ELSEIF ISMEMBEROF("営業本部") THEN TRUE
ELSE FALSE
END
メリット:
├─ グループ単位で管理
├─ AD連携で自動化
└─ メンテナンスが容易
【基本的なRLS設定】 ステップ1: ロールの作成 ├─ Power BI Desktop ├─ モデリング > ロールの管理 ├─ 「新規」をクリック └─ ロール名: 東京営業部 ステップ2: DAXフィルター定義 テーブル: 売上 DAXフィルター: [地域] = "東京" ステップ3: 追加ロール作成 ├─ 大阪営業部: [地域] = "大阪" ├─ 名古屋営業部: [地域] = "名古屋" └─ 営業本部: (フィルターなし=全データ) ───────────────────────────── 【動的RLS(ユーザー名ベース)】 ステップ1: 権限テーブル作成 UserPermissions テーブル: ┌────────────────────────────────────────┐ │ UserEmail │ Region │ ├────────────────────────────────────────┤ │ tanaka@company.com │ 東京 │ │ sato@company.com │ 大阪 │ │ suzuki@company.com │ ALL │ └────────────────────────────────────────┘ ステップ2: リレーションシップ作成 ├─ UserPermissions[Region] → Sales[Region] └─ クロスフィルター方向: 両方向 ステップ3: DAXフィルター定義 ロール名: DynamicRLS テーブル: UserPermissions DAXフィルター: [UserEmail] = USERPRINCIPALNAME() || [Region] = "ALL" ───────────────────────────── 【Power BI Serviceでの設定】 ステップ1: レポートを公開 ステップ2: データセットの設定 ├─ ワークスペース > データセット ├─ ・・・ > セキュリティ └─ ロールにメンバーを追加 ステップ3: メンバー割り当て ├─ 東京営業部ロール │ └─ tanaka@company.com ├─ 大阪営業部ロール │ └─ sato@company.com └─ 営業本部ロール └─ suzuki@company.com ステップ4: テスト ├─ 「ロールとしてテスト」 ├─ ロールを選択 └─ データが正しくフィルターされるか確認
| ポイント | 推奨 | 避けるべき |
|---|---|---|
| 権限テーブル | 別テーブルで管理 | ハードコード |
| グループ活用 | ADグループで管理 | 個人単位で設定 |
| テスト | 各ロールで動作確認 | 本番公開後に確認 |
| パフォーマンス | シンプルなフィルター | 複雑なDAX計算 |
| 管理者権限 | 明示的に設定 | 暗黙の全権限 |
📤 4. コンテンツの共有と公開設定
共有方法の選択
レポートの共有方法は複数あります。セキュリティ要件と利便性のバランスを考えて、適切な方法を選択しましょう。
| 共有方法 | セキュリティ | 利便性 | 用途 |
|---|---|---|---|
| ワークスペース | 🟢 高 | 🟡 中 | チーム内での共同作業 |
| アプリ | 🟢 高 | 🟢 高 | 部門への配布 |
| 直接共有 | 🟡 中 | 🟢 高 | 個別ユーザーへの共有 |
| 埋め込み | 🟡 中 | 🟢 高 | 社内ポータルへの組み込み |
| Web公開 | 🔴 低 | 🟢 高 | 一般公開(機密データNG) |
【Tableau Serverでの共有】 方法1: プロジェクト権限 ├─ プロジェクト > 権限 ├─ グループ/ユーザーを追加 ├─ 権限テンプレートを選択 └─ 保存 方法2: 個別コンテンツ共有 ├─ ワークブック > 共有 ├─ リンクをコピー └─ メールで送信 方法3: サブスクリプション(自動配信) ├─ ビュー > サブスクリプション ├─ 受信者を追加 ├─ スケジュール設定(毎日、毎週等) └─ 形式選択(PDF、画像、CSV) ───────────────────────────── 【Tableau Publicでの公開】 ステップ1: Tableau Publicにサインイン ステップ2: サーバー > Tableau Publicに保存 ステップ3: ビジュアライゼーションを公開 ステップ4: 埋め込みコードを取得 ⚠️ 注意: 機密データは絶対に公開しない! └─ Tableau Publicは誰でも閲覧可能
【Power BI Serviceでの共有】 方法1: ワークスペースアクセス ├─ ワークスペース > アクセス ├─ ユーザー/グループを追加 ├─ ロールを選択 └─ 保存 方法2: 直接共有 ├─ レポート > 共有 ├─ 受信者のメールアドレス入力 ├─ 権限オプション設定 │ ├─ □ 受信者に再共有を許可 │ ├─ □ 基になるデータセットの使用許可 │ └─ □ レポートのコピー作成を許可 └─ 送信 方法3: アプリとして配布 ├─ ワークスペース > アプリを作成 ├─ 含めるコンテンツを選択 ├─ アクセス許可を設定 ├─ 対象者を指定 │ ├─ 組織全体 │ ├─ 特定のユーザー/グループ │ └─ セキュリティグループ └─ アプリを発行 方法4: サブスクリプション(自動配信) ├─ レポート > サブスクライブ ├─ サブスクリプション名入力 ├─ 受信者を追加 ├─ 頻度設定(毎日、毎週、データ更新時) ├─ 時間を指定 └─ 保存 ───────────────────────────── 【Webに公開(注意!)】 ステップ1: レポート > ファイル > Webに公開 ステップ2: 埋め込みコードを生成 ステップ3: Webサイトに埋め込み ⚠️ 警告: ├─ 認証なしで誰でもアクセス可能 ├─ 機密データは絶対に使用禁止 ├─ 管理者がテナント設定で無効化可能 └─ 社内ポリシーを必ず確認
| チェック項目 | 確認内容 |
|---|---|
| □ データの機密性 | 個人情報、財務情報、営業秘密が含まれていないか |
| □ 共有先の確認 | 必要な人だけに共有されているか |
| □ 再共有の制限 | 受信者が他者に共有できない設定か |
| □ ダウンロード制限 | データのエクスポートが制限されているか |
| □ 有効期限 | アクセス期限が設定されているか |
| □ RLSの適用 | 行レベルセキュリティが正しく機能しているか |
📋 5. コンプライアンス対応
主要な規制・ガイドライン
BIツールで扱うデータは、様々な法規制やガイドラインの対象となる可能性があります。特に個人情報を扱う場合は、適切な対策が必要です。
| 規制 | 対象 | BIでの対応 |
|---|---|---|
| 個人情報保護法 | 日本国内の個人情報 | アクセス制限、匿名化、ログ管理 |
| GDPR | EU域内の個人データ | 同意管理、データ削除対応、移転制限 |
| SOX法 | 上場企業の財務データ | アクセスログ、変更履歴、監査対応 |
| HIPAA | 米国の医療情報 | 暗号化、アクセス制御、監査証跡 |
| PCI DSS | クレジットカード情報 | マスキング、暗号化、アクセス制限 |
【データマスキング】
目的: 機密データを隠蔽しながら分析可能に
例1: クレジットカード番号
元データ: 4111-2222-3333-4444
マスク後: ****-****-****-4444
例2: 電話番号
元データ: 090-1234-5678
マスク後: 090-****-****
例3: メールアドレス
元データ: tanaka@company.com
マスク後: t*****@c*****.com
─────────────────────────────
【Tableauでのマスキング】
計算フィールド:
マスク電話番号 =
LEFT([電話番号], 4) + "****-****"
マスクメール =
LEFT([メール], 1) + "*****@" +
RIGHT([メール], LEN([メール]) - FIND("@", [メール]))
─────────────────────────────
【Power BIでのマスキング】
DAX計算列:
マスク電話番号 =
LEFT([電話番号], 4) & "****-****"
マスクメール =
LEFT([メール], 1) & "*****@" &
RIGHT([メール], LEN([メール]) - SEARCH("@", [メール]))
─────────────────────────────
【データ匿名化】
方法1: 一般化
├─ 年齢: 35歳 → 30-39歳
├─ 住所: 東京都渋谷区 → 東京都
└─ 日付: 2025/01/15 → 2025年1月
方法2: 仮名化
├─ 氏名: 田中太郎 → User001
├─ ID: 12345 → ハッシュ値
└─ 可逆的な変換(復元可能)
方法3: 匿名化
├─ 個人を特定できないように加工
├─ 不可逆的な変換
└─ 統計的な分析のみ可能
📊 6. 監査ログの活用
監査ログの重要性
監査ログは「誰が、いつ、何をしたか」を記録します。セキュリティインシデントの調査、コンプライアンス対応、利用状況の把握に不可欠です。
| カテゴリ | 記録内容 |
|---|---|
| アクセス | ログイン/ログアウト、レポート閲覧、ダッシュボードアクセス |
| コンテンツ操作 | 作成、編集、削除、公開、共有 |
| データ操作 | データセット更新、エクスポート、ダウンロード |
| 管理操作 | ユーザー追加/削除、権限変更、設定変更 |
【管理ビューの活用】 アクセス方法: ├─ Tableau Server/Cloud ├─ サイト > 状態 └─ 管理ビューを選択 主要な管理ビュー: 1. ユーザーごとのトラフィック └─ 誰が何回アクセスしたか 2. ビューごとのトラフィック └─ どのレポートが人気か 3. データソースの使用状況 └─ どのデータが使われているか 4. サーバーの使用状況 └─ 負荷状況の確認 ───────────────────────────── 【詳細監査ログの取得】 Tableau Server: ├─ tabadmin get logs └─ PostgreSQLリポジトリから抽出 Tableau Cloud: ├─ 管理 > 監査 └─ アクティビティログをダウンロード ログの内容: ├─ タイムスタンプ ├─ ユーザー名 ├─ アクション種類 ├─ 対象コンテンツ ├─ IPアドレス └─ 結果(成功/失敗)
【アクティビティログの確認】
方法1: Power BI管理ポータル
├─ 管理ポータル > 監査ログ
├─ Microsoft 365コンプライアンスセンターへリンク
└─ Power BIアクティビティを検索
方法2: Microsoft 365監査ログ
├─ compliance.microsoft.com
├─ 監査 > 監査ログの検索
├─ アクティビティ: Power BI
├─ 日付範囲を指定
└─ 検索実行
─────────────────────────────
【記録されるアクティビティ例】
ViewReport: レポート閲覧
ExportReport: レポートエクスポート
ShareReport: レポート共有
CreateDashboard: ダッシュボード作成
DeleteReport: レポート削除
RefreshDataset: データセット更新
AddGroupMembers: グループメンバー追加
ChangeGatewayCreds: ゲートウェイ資格情報変更
─────────────────────────────
【PowerShellでのログ取得】
# Power BI管理モジュールのインストール
Install-Module -Name MicrosoftPowerBIMgmt
# ログイン
Login-PowerBI
# アクティビティログの取得
Get-PowerBIActivityEvents `
-StartDateTime "2025-01-01T00:00:00" `
-EndDateTime "2025-01-31T23:59:59" `
| Export-Csv "ActivityLog.csv"
─────────────────────────────
【利用状況メトリック】
Power BI Premium/Pro機能:
├─ ワークスペース > 利用状況メトリックレポート
├─ 閲覧者数、閲覧回数
├─ 人気のレポート
├─ 利用トレンド
└─ ユーザー別利用状況
| 活用目的 | 確認すべきポイント |
|---|---|
| セキュリティ監視 | 不審なアクセス、大量ダウンロード、営業時間外のアクセス |
| コンプライアンス | 機密データへのアクセス履歴、権限変更の記録 |
| 利用状況把握 | 人気コンテンツ、未使用レポート、アクティブユーザー |
| トラブルシューティング | エラー発生時の操作履歴、問題の再現 |
📝 STEP 48 のまとめ
- セキュリティの3本柱:認証、認可、監査の重要性
- ユーザー権限:最小権限の原則に基づく設計
- 行レベルセキュリティ:ユーザーごとにデータを制限
- 共有設定:セキュリティと利便性のバランス
- コンプライアンス:法規制に対応したデータ保護
- 監査ログ:アクセス履歴の記録と活用
| カテゴリ | チェック項目 |
|---|---|
| 認証 | □ SSO設定 □ MFA有効化 □ パスワードポリシー |
| 認可 | □ ロール設計 □ RLS設定 □ 共有制限 |
| データ保護 | □ マスキング □ 暗号化 □ バックアップ |
| 監査 | □ ログ有効化 □ 定期レビュー □ アラート設定 |
セキュリティは「後付け」では不十分です。設計段階から「誰に何を見せるか」を明確にし、最小権限の原則に基づいて権限を付与しましょう。
特に行レベルセキュリティ(RLS)は、同じレポートでユーザーごとに表示データを制限できる強力な機能です。適切に設計することで、セキュリティを確保しながら効率的なデータ共有が可能になります!
📝 実践演習
営業部門向けのレポートで、各営業担当者が自分の担当地域のデータのみ閲覧できるようにRLSを設定してください。
ステップ1: 権限テーブルの作成
UserPermissions テーブル: ┌────────────────────────────────────────┐ │ UserEmail │ Region │ ├────────────────────────────────────────┤ │ tanaka@company.com │ 東京 │ │ sato@company.com │ 大阪 │ │ yamada@company.com │ 名古屋 │ │ manager@company.com │ ALL │ └────────────────────────────────────────┘
ステップ2: リレーションシップの設定
- UserPermissions[Region] と Sales[Region] を結合
- クロスフィルター方向: 両方向
ステップ3: ロールの作成
モデリング > ロールの管理 > 新規 ロール名: SalesRLS テーブル: UserPermissions DAXフィルター: [UserEmail] = USERPRINCIPALNAME() || [Region] = "ALL"
ステップ4: テスト
- モデリング > ロールとして表示
- SalesRLSロールを選択
- 「他のユーザー」に tanaka@company.com を入力
- 東京のデータのみ表示されることを確認
ステップ5: メンバーの割り当て(Service)
- Power BI Serviceでデータセットを開く
- セキュリティをクリック
- SalesRLSロールにメンバーを追加
- 全営業担当者を追加
以下の要件を満たすセキュリティ設計を行ってください:経営層は全データ、部長は自部門のデータ、一般社員は自チームのデータのみ閲覧可能
ステップ1: 権限階層テーブルの作成
UserHierarchy テーブル: ┌─────────────────────────────────────────────────────┐ │ UserEmail │ Role │ Dept │ Team │ ├─────────────────────────────────────────────────────┤ │ ceo@company.com │ Exec │ ALL │ ALL │ │ cfo@company.com │ Exec │ ALL │ ALL │ │ sales_mgr@co.com │ Manager │ 営業部 │ ALL │ │ dev_mgr@company.com │ Manager │ 開発部 │ ALL │ │ tanaka@company.com │ Staff │ 営業部 │ 東京チーム│ │ sato@company.com │ Staff │ 営業部 │ 大阪チーム│ └─────────────────────────────────────────────────────┘
ステップ2: DAXフィルターの作成
ロール名: HierarchyRLS テーブル: UserHierarchy DAXフィルター: [UserEmail] = USERPRINCIPALNAME()
ステップ3: データテーブルへのフィルター適用
テーブル: Sales
DAXフィルター:
VAR CurrentUser =
LOOKUPVALUE(
UserHierarchy[Role],
UserHierarchy[UserEmail],
USERPRINCIPALNAME()
)
VAR CurrentDept =
LOOKUPVALUE(
UserHierarchy[Dept],
UserHierarchy[UserEmail],
USERPRINCIPALNAME()
)
VAR CurrentTeam =
LOOKUPVALUE(
UserHierarchy[Team],
UserHierarchy[UserEmail],
USERPRINCIPALNAME()
)
RETURN
CurrentUser = "Exec"
|| (CurrentUser = "Manager" &&
(CurrentDept = "ALL" || [Department] = CurrentDept))
|| (CurrentUser = "Staff" &&
(CurrentTeam = "ALL" || [Team] = CurrentTeam))
結果
| ユーザー | 閲覧可能範囲 |
|---|---|
| CEO | 全データ |
| 営業部長 | 営業部の全データ |
| 田中(東京チーム) | 東京チームのデータのみ |
個人情報を含むデータを扱うBIシステムのセキュリティ設計書を作成してください。認証、認可、データ保護、監査の各観点を含めてください。
1. 概要
システム名: 顧客分析ダッシュボード 対象データ: 顧客情報(氏名、住所、購買履歴) ユーザー数: 約100名 規制対応: 個人情報保護法
2. 認証設計
【認証方式】 ├─ Azure AD SSO(シングルサインオン) ├─ 多要素認証(MFA)必須 └─ 条件付きアクセス ├─ 社内ネットワーク: MFAスキップ └─ 社外アクセス: MFA必須 【パスワードポリシー】 ├─ 最小文字数: 12文字 ├─ 複雑性: 英大小・数字・記号必須 ├─ 有効期限: 90日 └─ 履歴: 過去10回分は再利用禁止 【セッション管理】 ├─ タイムアウト: 30分 ├─ 同時ログイン: 禁止 └─ 強制ログアウト: 可能
3. 認可設計
【ロール定義】 ┌────────────────────────────────────────────┐ │ ロール │ 権限 │ ├────────────────────────────────────────────┤ │ 管理者 │ 全権限 │ │ 分析者 │ 全データ閲覧(個人情報除く) │ │ 営業担当 │ 担当顧客のみ │ │ 経営層 │ 集計データのみ │ └────────────────────────────────────────────┘ 【行レベルセキュリティ】 ├─ 営業担当: 担当顧客フィルター ├─ 地域別: 担当地域フィルター └─ 経営層: 集計ビューのみアクセス 【列レベルセキュリティ】 ├─ 氏名: 分析者以上のみ ├─ 住所: 営業担当・管理者のみ ├─ 電話番号: 営業担当・管理者のみ └─ 購買履歴: 全員(匿名化後)
4. データ保護設計
【暗号化】 ├─ 保存時: AES-256暗号化 ├─ 転送時: TLS 1.2以上 └─ キー管理: Azure Key Vault 【データマスキング】 ├─ 氏名: 山田**(姓のみ表示) ├─ 住所: 東京都***(都道府県のみ) ├─ 電話番号: 090-****-**** └─ メール: y****@***.com 【データ匿名化】 ├─ 分析用ビュー: 個人特定不可 ├─ 年齢: 年代表示(30代等) └─ 地域: 都道府県レベル 【バックアップ】 ├─ 頻度: 日次 ├─ 保持期間: 30日 └─ 保管場所: 別リージョン
5. 監査設計
【ログ取得】 ├─ アクセスログ: 全アクセス記録 ├─ 操作ログ: 全操作記録 ├─ エクスポートログ: ダウンロード記録 └─ 管理ログ: 設定変更記録 【ログ保持期間】 ├─ オンライン: 90日 ├─ アーカイブ: 7年 └─ 法的要件対応 【監視・アラート】 ├─ 大量ダウンロード: 即時アラート ├─ 営業時間外アクセス: 日次レポート ├─ 権限変更: 即時アラート └─ ログイン失敗: 5回でロック 【定期レビュー】 ├─ 週次: アクセス状況確認 ├─ 月次: 権限棚卸し ├─ 四半期: セキュリティ監査 └─ 年次: 外部監査
6. インシデント対応
【対応フロー】 1. 検知: 監視システムまたは報告 2. 初動: アクセス遮断、証拠保全 3. 調査: 影響範囲の特定 4. 報告: 経営層・法務・広報 5. 対応: 是正措置の実施 6. 再発防止: 原因分析、対策実施 【連絡体制】 ├─ 第一報: 15分以内 ├─ 状況報告: 1時間ごと └─ 完了報告: 対応完了後24時間以内
❓ よくある質問
影響を最小化するコツ:
✓ シンプルなフィルター条件を使用
✓ 権限テーブルは小さく保つ
✓ インデックスを活用
✓ 複雑なDAX計算を避ける
パフォーマンステスト:
本番適用前に、各ロールでパフォーマンスをテストしましょう。
Power BI:
– Azure AD B2Bで外部ユーザーを招待
– 管理者がテナント設定で許可必要
– Premium Per Userライセンスが必要な場合あり
Tableau:
– ゲストユーザーライセンスを付与
– サイト管理者が許可設定
– コンテンツごとに権限設定
注意:機密データは外部共有を避けましょう。
Power BI:
– テナント設定 > エクスポート設定
– ワークスペース単位で制限可能
– Excel/CSV/PDFエクスポートを個別に制御
Tableau:
– サイト設定 > ダウンロード許可
– プロジェクト/ワークブック単位で制限
– 画像のみ許可等の細かい設定可能
注意:スクリーンショットは防げないため、機密データは表示自体を制限しましょう。
一般的な目安:
– 通常業務: 90日〜1年
– コンプライアンス対応: 3〜7年
– 金融業界: 7〜10年
Power BI:
– 標準: 90日
– 長期保存: Azure Log Analyticsに転送
Tableau:
– 標準: 設定による
– 長期保存: 外部SIEMに転送
セキュリティ面:
✓ 一元的なユーザー管理
✓ パスワードポリシーの統一
✓ 退職者の即時アクセス停止
✓ MFAの一括適用
利便性面:
✓ 1つのID/パスワードで全システムアクセス
✓ パスワード忘れの削減
✓ ログイン手間の軽減
導入推奨:Azure AD/Okta/OneLoginなどと連携しましょう。
学習メモ
BIツール入門 - Step 48