アクセス制御と暗号化
保存データを保護します
「アクセス制御と暗号化」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
保存データを保護する
データベースには最も重要な資産が保管されているため、特に重要な対策は2つあります。アクセス制御(誰がデータに触れられるか)と暗号化(盗まれてもデータを役に立たなくすること)です。
この2つを組み合わせることで、システムの稼働中だけでなく、ディスクやバックアップが持ち出された場合にもデータを保護できます。
認証と認可
この2つの概念は区別してください。
- 認証は、本人が誰であるかを証明します(ログイン、証明書、IAMトークン)。
- 認可は、識別された後に何を実行できるかを決定します。
強固なデータベースセキュリティには、検証済みのIDと、厳密に範囲を限定した権限の両方が必要です。
最小権限の原則
各アカウントには必要な権限だけを付与し、それ以上は何も与えないでください。レポートサービスは読み取り専用にし、アプリケーションの書き込み用アカウントでDROPテーブルを実行できないようにします。
CREATE ROLE report_reader;
GRANT SELECT ON sales.* TO report_reader;
GRANT report_reader TO 'analytics_svc'@'%';ロールベースアクセス制御
RBACは権限をロールにまとめ、ユーザーにロールを割り当てます。ユーザーごとに権限を付与するよりも拡張しやすく、監査も明確になります。
- ロールを定義します。
read_only、app_writer、dba。 - ユーザーをロールに割り当てます。
- ロールのメンバー構成を定期的に確認します。
行レベルと列レベルのセキュリティ
きめ細かな制御によって、テーブル内のアクセスを制限できます。
- 列レベル: 一部のロールから給与やSSNの列を隠します。
- 行レベルセキュリティ(RLS): テナントが自分自身の行だけを参照できるようにします。
-- PostgreSQL row-level security
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON orders
USING (tenant_id = current_setting('app.tenant')::int);保存時の暗号化
保存時の暗号化は、ディスク上のデータを保護します。ドライブやバックアップファイルが盗まれても、キーがなければ内容を読み取れません。
選択肢には、フルディスク暗号化、ファイルシステム暗号化、データベース標準の透過的データ暗号化(TDE)があります。
透過的データ暗号化
TDEはデータベースファイルを自動的に暗号化します。アプリケーションを変更する必要はありません。エンジンが書き込み時に暗号化し、読み取り時に復号します。盗まれたファイルからは保護できますが、すでに有効なDBセッションを持つ攻撃者からは保護できません。
-- SQL Server example concept
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE tde_cert;
ALTER DATABASE appdb SET ENCRYPTION ON;列レベルの暗号化
カード番号や医療データなど、特に機密性の高いフィールドでは、個々の列を暗号化してください。DBAであっても、データベース内に平文が保存されることはありません。
トレードオフとして、暗号化された列はインデックス作成や検索が難しいため、対象を選んで適用してください。
通信中の暗号化
通信中のデータも保護する必要があります。すべてのクライアントとデータベース間の接続でTLSを必須にし、認証情報や結果セットを盗聴されないようにしてください。
-- PostgreSQL: force SSL in pg_hba.conf
hostssl appdb webapp 0.0.0.0/0 scram-sha-256
-- reject non-TLS:
hostnossl appdb all 0.0.0.0/0 rejectキー管理
暗号化の強度は、キーの扱い方に左右されます。保護対象のデータの近くにキーを保存してはいけません。
- キー管理サービス(KMS)またはHSMを使用します。
- スケジュールに従ってキーをローテーションします。
- 職務を分離します。DBAがマスターキーも保持することのないようにします。
全体を組み合わせる
保存データを保護する多層モデルは次のとおりです。
- すべての接続を認証します(TLSと強力な認証情報)。
- RBACと最小権限によって認可します。
- きめ細かな制御が必要な場合は、RLSや列レベルのセキュリティを適用します。
- 保存時の暗号化(TDE)を適用し、機密性の高い列は個別に暗号化します。
- データベースとは分離したKMSでキーを管理します。
簡単な確認
それぞれの対策が何から保護するのかを考えてみましょう。
まとめ
保存データは、アクセス制御と暗号化を組み合わせて保護します。
- 認証と認可を区別します。
- 最小権限とRBACを適用し、必要に応じて行レベルや列レベルのセキュリティも適用します。
- 保存時(TDE、列レベル)と通信中(TLS)のデータを暗号化します。
- KMSでキーを分離して管理し、ローテーションします。
よくある質問
「アクセス制御と暗号化」レッスンは無料ですか?
はい。「アクセス制御と暗号化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「アクセス制御と暗号化」で何を学びますか?
保存データを保護します ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「アクセス制御と暗号化」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- SQLインジェクション対策
- アクセス制御と暗号化
- 監査とモニタリング
- バックアップと復旧のセキュリティ