データベースに必要とされるセキュリティ（Couchbase Serverの機能を通じた考察）① 概観：何が必要かつ実現されているか？

# はじめに

本記事では、Couchbase Serverのセキュリティ機能を紹介しながら、適宜他のデータベースについても触れながら、データベースに必要とされるセキュリティについて考察していきます。

# Couchbaseにおけるセキュリティ

## 認証 (Authentication)

Couchbase Serverへのユーザ（理者、アプリケーションを含む）アクセスは、認証を介してのみ行うことができます。
ユーザーは、ローカルまたは外部のパスワードレジストリを使用して認証されます（ネイティブLDAP、saslauthd、およびPAM）。
認証には、資格情報をサーバーに直接渡すか、資格情報が埋め込まれているクライアント証明書を使用する方法があります。接続は、SCRAMとTLSを使用して保護できます。


## 承認 (Authorization)
Couchbase Serverは、ロールベースのアクセス制御（RBAC）によって、ユーザーを、個別に割り当てられた役割に関連付けます。ロールは、特定のシステムリソースへのアクセスの程度を許可する権利（の集合）です。
これにより、アクセスしようとしているシステムリソースのタイプ、および実行したい操作に基づいて、アクセスを許可または拒否できます。
ロールは、ユーザーおよびグループに割り当てることができます。
ユーザ認証を介して、ユーザーにロールが割り当てられます。

## 監査 (Auditing)
Couchbase Serverで実行されるアクションを監査することを可能にします。
アクションのレビューにより、管理者はシステム管理タスクが適切に実行されていることを確認できます。

## 暗号化 (Encription)
Couchbase Serverが管理するデータは、適切な復号化手段を所有する許可された関係者による場合を除き、読み取り不可能になるようにエンコードされます。そのため、データを安全に保存または送信できます。
これにより、ユーザーデータのプライバシー、およびサーバーとそのクライアントの整合性が保証されます。

### On the Wire / in motion
TLSが利用できます（クライアント・サーバー、管理者アクセス、およびセキュアXDCR）。
また、TLSのためのX.509 certificatesの利用をサポートしています。

### At Rest

サードパーティーベンダー(Vormetric, Protegrity, SafeNet)によって提供されます。

### フィールド暗号化
SDKを用いた暗号化により、FIPS-140-2コンプライアンスをサポートしています。

# システム領域

管理可能なシステム領域は次のとおりです。

## ネットワークアクセス
ネットワークアクセスを、TLSで保護できます。
暗号スイート、TLSレベル、およびコンソールアクセスを、個別に管理することが可能です。
クラスターに対するアクセスのみではなく、クラスタを構成するノード間のネットワーク通信の保護も可能です。

## 証明書
証明書を、クラスターに対して定義・登録できます。
加えて、クライアントによって提示された証明書を許可することができます。

## ログ
ログ中に、個人情報が含まれないように設定することが可能です。

## セッション
ユーザーが一定期間非アクティブな状態が続いた後にセッションを終了するように構成することが可能です。

## ポート
（全てではありませんが）多くのポートのマッピングを変更することが可能です。
適切なファイヤーウォール設定のために、Couchbaseが利用する必要のある全てのポート番号の情報が公開されています。

# 他のデータベース

### バインドIP設定

MongoDBには、[バインドIP](https://docs.mongodb.com/manual/reference/configuration-options/#net.bindIp)の設定があり、どのIPアドレスで待ち受けるか（自サーバーをどのIPアドレスにバインドするか）を設定することができます。

>The hostnames and/or IP addresses and/or full Unix domain socket paths on which mongos or mongod should listen for client connections. You may attach mongos or mongod to any interface. To bind to multiple addresses, enter a list of comma-separated values.

「MongoDB解体新書」という書籍では、、接続元（例えばAPサーバー）のIPを制限する機能として紹介されていますが、[参考情報に引いた記事](https://teratail.com/questions/245221)のように、上記の理解が正しいと思われます。同記事の中では、「postgresql.confで言うところのlisten_addresses」という表現も見られます。

# 最後に

本稿では、Couchbase Serverにおける、セキュリティの概観を整理しました。

今後は、ここで概観した要素を個別に扱っていきたいと思います。
その際には、Couchbase Serverの具体的な機能の解説に加え、適宜他のデータベースとの違いについても触れながら、データベースにとって必要とされるセキュリティについて整理できれば、と考えています。

## 参考情報


[Couchbase Server公式ドキュメント / Learn / Security](https://docs.couchbase.com/server/current/learn/security/security-overview.html)

[Couchbase Server公式ドキュメント / Manage / Manage Security](https://docs.couchbase.com/server/current/manage/manage-security/security-management-overview.html)


[Couchbase Server公式ドキュメント Install & Upgrade / System Requirements / Network and Firewall Requirements](https://docs.couchbase.com/server/current/install/install-ports.html)

[Data encryption in Couchbase Server](https://blog.couchbase.com/data-encryption-in-couchbase-server/)


[Couchbase should not listen by default on all server IPs #452](https://github.com/GluuFederation/community-edition-setup/issues/452#issuecomment-402791618)


[MongoDBに対して複数のセグメントからの接続を許容したい](https://teratail.com/questions/245221)