Azure Arc 対応 PostgreSQL サーバーのセキュリティを構成する
このドキュメントでは、サーバー グループのセキュリティに関連するさまざまな側面について説明します。
- 保存時の暗号化
- Postgres ロールとユーザー管理
- 一般的なパースペクティブ
- postgres 管理ユーザーのパスワードを変更する
- Audit
Note
この記事で紹介しているテクノロジはプレビュー機能であり、「Microsoft Azure プレビューの追加利用規約」に従うことを条件として提供されます。
最新の更新プログラムについては、リリース ノートを参照してください。
保存時の暗号化
保存時の暗号化は、データベースを格納するディスクを暗号化するか、データベースの機能を使用して挿入または更新するデータを暗号化することで (あるいは両方を行うことで) 実装できます。
ハードウェア: Linux ホスト ボリュームの暗号化
Azure Arc 対応 Data Services のセットアップで使用されるディスク上に存在するデータをセキュリティで保護するには、システム データの暗号化を実装します。 このトピックの詳細については、次を参照してください。
- 一般的な Linux の「保存データの暗号化」
- 具体的に LUKS
cryptsetup
コマンド (Linux) (https://www.cyberciti.biz/security/howto-linux-hard-disk-encryption-with-luks-cryptsetup-command/) を使用したディスク暗号化。 Azure Arc 対応 Data Services は、お客様が提供する物理インフラストラクチャ上で実行されるため、インフラストラクチャをセキュリティで保護する責任はお客様にあります。
ソフトウェア: サーバー グループで PostgreSQL pgcrypto
拡張機能を使用する
Azure Arc のセットアップをホストするために使用されるディスクを暗号化するだけでなく、データベース内のデータを暗号化するためにアプリケーションで使用できるメカニズムが公開されるように、Azure Arc 対応 PostgreSQL サーバーを構成することもできます。 pgcrypto
拡張機能は、Postgres の contrib
拡張機能の一部であり、Azure Arc 対応 PostgreSQL サーバーで使用できます。 pgcrypto
拡張機能の詳細については、こちらを参照してください。
要約すると、次のコマンドを使用して拡張機能を有効にし、それを作成して使用します。
pgcrypto
拡張機能を作成する
任意のクライアント ツールを使用してサーバー グループに接続し、標準の PostgreSQL クエリを実行する:
CREATE EXTENSION pgcrypto;
接続方法の詳細については、こちらを参照してください。
サーバー グループですぐに使用できる拡張機能のリストを確認する
サーバー グループで使用できる拡張機能を一覧表示すると、pgcrypto
拡張機能をすぐに使用できることを確認できます。
任意のクライアント ツールを使用してサーバー グループに接続し、標準の PostgreSQL クエリを実行する:
select * from pg_extension;
上記のコマンドを使用して有効にして作成した場合は、pgcrypto
が表示されます。
pgcrypto
拡張機能を使用する
この時点で、pgcrypto
で提供された関数のいずれかが使用されるように、アプリケーションのコードを調整できます。
- 一般的なハッシュ関数
- パスワード ハッシュ関数
- PGP 暗号化関数
- RAW 暗号化関数
- ランダム データ関数
たとえば、ハッシュ値を生成します。 次のコマンドを実行します。
select crypt('Les sanglots longs des violons de l_automne', gen_salt('md5'));
次のハッシュが返されます。
crypt
------------------------------------
$1$/9ACBYOV$z52PAGjQ5WTU9xvEECBNv/
または、例:
select hmac('Les sanglots longs des violons de l_automne', 'md5', 'sha256');
次のハッシュが返されます。
hmac
--------------------------------------------------------------------
\xd4e4790b69d2cc8dbce3385ee63272bc7760f1603640bb211a7b864e695570c5
または、たとえば、パスワードなどの暗号化されたデータを格納します。
アプリケーションでは、シークレットは以下テーブルに格納されています。
create table mysecrets(USERid int, USERname char(255), USERpassword char(512));
以下のように、ユーザーの作成時にパスワードを暗号化します。
insert into mysecrets values (1, 'Me', crypt('MySecretPasswrod', gen_salt('md5')));
パスワードが暗号化されていることに注目します。
select * from mysecrets;
出力:
- USERid: 1
- USERname: Me
- USERpassword: $1$Uc7jzZOp$NTfcGo7F10zGOkXOwjHy31
アプリケーションに接続してパスワードを渡すと、mysecrets
テーブルで検索され、アプリケーションに渡されるパスワードとテーブルに格納されているパスワードが一致すれば、ユーザーの名前が返されます。 次に例を示します。
間違ったパスワードを渡します。
select USERname from mysecrets where (USERpassword = crypt('WrongPassword', USERpassword));
出力
USERname --------- (0 rows)
正しいパスワードを渡します。
select USERname from mysecrets where (USERpassword = crypt('MySecretPasswrod', USERpassword));
出力:
USERname --------- Me (1 row)
この簡単な例は、Postgres の pgcrypto
拡張機能を使用して、Azure Arc 対応 PostgreSQL サーバーで保存データを暗号化し (暗号化されたデータを格納し)、pgcrypto
で提供された関数をアプリケーションで使用して、その暗号化されたデータを操作できることを示しています。
Postgres ロールとユーザー管理
一般的なパースペクティブ
Azure Arc 対応 PostgreSQL サーバーでロールとユーザーを構成するには、標準の Postgres の方法を使用してロールとユーザーを管理します。 詳細については、こちらを参照してください。
Audit
監査シナリオの場合は、Postgres の pgaudit
拡張機能を使用するようにサーバー グループを構成してください。 pgaudit
の詳細については、pgAudit
GitHub プロジェクトに関するページを参照してください。 サーバー グループで pgaudit
拡張機能を有効にするには、PostgreSQL 拡張機能の使用に関するページを参照してください。
SSL 接続を使用する
クライアント接続には SSL が必要です。 接続文字列では、SSL モード パラメーターを無効にしないでください。 接続文字列を作成する。
関連するコンテンツ
pgcrypto
拡張機能に関するページを参照してください- PostgreSQL 拡張機能の使用に関するページを参照してください