

# Babelfish を使用した Kerberos 認証
<a name="babelfish-active-directory"></a>

Babelfish for Aurora PostgreSQL 15.2 バージョンでは、Kerberos を使用した DB クラスターへの認証をサポートしています。この方法により、Babelfish データベースに接続する際に、Microsoft Windows 認証を使用してユーザーを認証できます。そのためには、まず、Kerberos 認証に AWS Directory Service for Microsoft Active Directory を使用するように DB クラスターを設定する必要があります。詳細については、*AWS Directory Service 管理ガイド*の「[Directory Service とは](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)」を参照してください。

## Kerberos 認証の設定
<a name="babelfish-active-directory-setup"></a>

 Babelfish for Aurora PostgreSQL DB クラスターは 2 つの異なるポートを使用して接続できますが、Kerberos 認証の設定は 1 回限りのプロセスです。そのため、まず DB クラスターに Kerberos 認証を設定する必要があります。詳細については、「[Kerberos 認証のセットアップ](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-kerberos-setting-up.html)」を参照してください。設定が完了したら、Kerberos を使用して PostgreSQL クライアントに接続できることを確認します。詳細については、「[Kerberos 認証に接続する](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-kerberos-connecting.html)」を参照してください。

## Babelfish でのログインとユーザーのプロビジョニング
<a name="babelfish-active-directory-login"></a>

 テーブル形式データストリーム (TDS) ポートから作成された Windows ログインは、TDS ポートまたは PostgreSQL ポートのどちらでも使用できます。まず、認証に Kerberos を使用できるログインは、T-SQL ユーザーやアプリケーションが Babelfish データベースの接続に使用する前に TDS ポートからプロビジョニングする必要があります。Windows ログインを作成する場合、管理者は DNS ドメイン名または NetBIOS ドメイン名のいずれかを使用してログインを提供できます。通常、NetBIOS ドメインは DNS ドメイン名のサブドメインです。例えば、DNS ドメイン名が `CORP.EXAMPLE.COM` の場合、NetBIOS ドメイン名は通常 `CORP` かもしれません。ログインに NetBIOS ドメイン名形式を指定する場合は、DNS ドメイン名へのマッピングが存在する必要があります。

### NetBIOS ドメイン名と DNS ドメイン名マッピングの管理
<a name="babelfish-active-directory-login-netbios"></a>

NetBIOS ドメイン名と DNS ドメイン名の間のマッピングを管理するため、Babelfish はマッピングを追加、削除、切り捨てるためのシステムストアドプロシージャを提供しています。これらのプロシージャを実行できるのは、`sysadmin` ロールを持つユーザーだけです。

NetBIOS と DNS ドメイン名の間のマッピングを作成するには、Babelfish が提供するシステムストアドプロシージャ `babelfish_add_domain_mapping_entry` を使用します。どちらの引数も NULL ではなく、有効な値を持つ必要があります。

**Example**  

```
EXEC babelfish_add_domain_mapping_entry 'netbios_domain_name', 'fully_qualified_domain_name'
```

次の例は、NetBIOS 名の CORP と DNS ドメイン名 CORP.EXAMPLE.COM の間のマッピングを作成する方法を示しています。

**Example**  

```
EXEC babelfish_add_domain_mapping_entry 'corp', 'corp.example.com'
```

既存のマッピングエントリを削除するには、システムストアドプロシージャ babelfish\$1remove\$1domain\$1mapping\$1entry を使用します。

**Example**  

```
EXEC babelfish_remove_domain_mapping_entry 'netbios_domain_name'
```

次の例は、NetBIOS 名が CORP という名前のマッピングを削除する方法を示しています。

**Example**  

```
EXEC babelfish_remove_domain_mapping_entry 'corp'
```

既存のマッピングエントリをすべて削除するには、システムストアドプロシージャ babelfish\$1truncate\$1domain\$1mapping\$1table を使用します。

**Example**  

```
EXEC babelfish_truncate_domain_mapping_table
```

NetBIOS と DNS ドメイン名の間のマッピングをすべて表示するには、次のクエリを使用します。

**Example**  

```
SELECT netbios_domain_name, fq_domain_name FROM babelfish_domain_mapping;
```

### ログインの管理
<a name="babelfish-active-directory-login-managing"></a>

**ログインの作成**  
正しい権限を持つログインを使用して、TDS エンドポイント経由で DB に接続します。ログインに対するデータベースユーザーが作成されていない場合、そのログインはゲストユーザーにマッピングされます。ゲストユーザーが有効ではない場合、ログイン試行は失敗します。

次のクエリを使用して Windows ログインを作成します。`FROM WINDOWS` オプションでは、Active Directory を使用した認証が可能になります。

```
CREATE LOGIN login_name FROM WINDOWS [WITH DEFAULT_DATABASE=database]
```

**Example**  
次の例では、db1 のデフォルトデータベースを使用して Active Directory ユーザー [corp\$1test1] のログインを作成しています。

```
CREATE LOGIN [corp\test1] FROM WINDOWS WITH DEFAULT_DATABASE=db1
```

この例では、NetBIOS ドメイン CORP と DNS ドメイン名 CORP.EXAMPLE.COM の間にマッピングがあることを前提としています。マッピングがない場合は、DNS ドメイン名 [CORP.EXAMPLE.COM\$1 test1] を指定する必要があります。

**注記**  
Active Directory ユーザーに基づくログインは、21 文字未満の名前に制限されています。

**ログインの削除**  
ログインを削除するには、次の例に示すように、他のログインと同じ構文を使用します。

```
DROP LOGIN [DNS domain name\login]
```

**ログインの変更**  
ログインを変更するには、次の例のように、他のログインと同じ構文を使用します。

```
ALTER LOGIN [DNS domain name\login] { ENABLE|DISABLE|WITH DEFAULT_DATABASE=[master] }
```

ALTER LOGIN コマンドは、Windows ログインについて、次のような限定的なオプションをサポートしています。
+ DISABLE — ログインを無効にします。無効になったログインを認証に使用することはできません。
+ ENABLE — 無効になったログインを有効にします。
+ DEFAULT\$1DATABASE — ログインのデフォルトデータベースを変更します。

**注記**  
パスワード管理はすべて Directory Service を介して行われるため、データベース管理者は、ALTER LOGIN コマンドでは Windows ログインのパスワードを変更または設定できません。

### Kerberos 認証を使用して Babelfish for Aurora PostgreSQL に接続する
<a name="babelfish-active-directory-kerberos"></a>

通常、Kerberos を使用して認証するデータベースユーザーは、クライアントマシンから認証します。これらのマシンは、Active Directory ドメインのメンバーです。クライアントアプリケーションから Windows 認証を使用して、TDS ポート上の Babelfish for Aurora PostgreSQL サーバーにアクセスします。

### Kerberos 認証を使用して PostgreSQL ポートの Babelfish for Aurora PostgreSQL に接続する
<a name="babelfish-active-directory-kerberos-pgport"></a>

 TDS ポートから作成されたログインは、TDS ポートまたは PostgreSQL ポートのどちらでも使用できます。ただし、PostgreSQL は、デフォルトでユーザー名の大文字と小文字を区別して比較します。Aurora PostgreSQL によって 大文字と小文字を区別せずに Kerberos ユーザー名を解釈するためには、カスタム Babelfish クラスターパラメータグループで `krb_caseins_users` パラメータを `true` に設定する必要があります。このパラメータはデフォルトで `false` に設定されています。詳細については、「[大文字と小文字を区別しないユーザー名を設定する](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-kerberos-setting-up.html#postgresql-kerberos-setting-up.create-logins.set-case-insentive)」を参照してください。また、PostgreSQL クライアントアプリケーションから、ログインユーザー名を <login@DNS ドメイン名> の形式で指定する必要があります。<DNS ドメイン名\$1ログイン> の形式は使用できません。

### 頻繁に発生するエラー
<a name="babelfish-active-directory-errors"></a>

オンプレミスの Microsoft Active Directory と AWS Managed Microsoft AD との間にフォレスト信頼関係を確立できます。詳細については、「[信頼関係を作成する](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-kerberos-setting-up.html#postgresql-kerberos-setting-up.create-trust)」を参照してください。次に、ホストエンドポイントで Amazon ドメイン `rds.amazonaws.com` を使用する代わりに、専用のドメイン固有のエンドポイントを使用して接続する必要があります。正しいドメイン固有のエンドポイントを使用しない場合、次のエラーが発生する場合があります。

```
Error: “Authentication method "NTLMSSP" not supported (Microsoft SQL Server, Error: 514)"
```

 このエラーは、TDS クライアントが指定されたエンドポイント URL のサービスチケットをキャッシュできない場合に発生します。詳細については、「[Kerberos 認証に接続する](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/postgresql-kerberos-connecting.html)」を参照してください。