次の方法で共有


Azure Arc 対応 PostgreSQL サーバーのセキュリティを構成する

このドキュメントでは、サーバー グループのセキュリティに関連するさまざまな側面について説明します。

  • 保存時の暗号化
  • Postgres ロールとユーザー管理
    • 一般的なパースペクティブ
    • postgres 管理ユーザーのパスワードを変更する
  • Audit

Note

この記事で紹介しているテクノロジはプレビュー機能であり、「Microsoft Azure プレビューの追加利用規約」に従うことを条件として提供されます。

最新の更新プログラムについては、リリース ノートを参照してください。

保存時の暗号化

保存時の暗号化は、データベースを格納するディスクを暗号化するか、データベースの機能を使用して挿入または更新するデータを暗号化することで (あるいは両方を行うことで) 実装できます。

ハードウェア: Linux ホスト ボリュームの暗号化

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 モード パラメーターを無効にしないでください。 接続文字列を作成する