

# Amazon RDS for PostgreSQL で Kerberos 認証を使用する
<a name="postgresql-kerberos"></a>

ユーザーが PostgreSQL が実行されている DB インスタンスに接続する場合、Kerberos を使用してそのユーザーを認証できます。そのためには、Kerberos 認証に AWS Directory Service for Microsoft Active Directory を使用するように DB インスタンスを設定します。AWS Directory Service for Microsoft Active Directory は AWS Managed Microsoft AD とも呼ばれます。これは、Directory Service で利用できる機能です。詳細については、「*AWS Directory Service 管理ガイド*」の「[Directory Service とは](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/what_is.html)」を参照してください。

まず、ユーザー認証情報を格納する AWS Managed Microsoft AD ディレクトリを作成します。次に、Active Directory のドメインおよびその他の情報を PostgreSQL DB インスタンスに提供します。ユーザーが PostgreSQL DB インスタンスを使用して認証を実行すると、認証要求は AWS Managed Microsoft AD ディレクトリに転送されます。

同じディレクトリにすべての認証情報を保持することで時間と労力を節約できます。複数の DB インスタンスの認証情報を一元的に保存および管理できます。また、ディレクトリを使用することで、セキュリティプロファイル全体を向上できます。

また、独自のオンプレミスの Microsoft Active Directory から認証情報にアクセスできます。そのためには、信頼するドメイン関係を作成して、AWS Managed Microsoft AD ディレクトリがオンプレミスの Microsoft Active Directory を信頼するようにします。これにより、ユーザーは、オンプレミスネットワークのワークロードにアクセスするときと同じ Windows シングルサインオン (SSO) の使い方で、PostgreSQL インスタンスにアクセスできます。

データベースは、パスワード認証または、Kerberos 認証または AWS Identity and Access Management (IAM) 認証のいずれかによるパスワード認証を使用できます。IAM 認証の詳細については、「[MariaDB、MySQL、および PostgreSQL の IAM データベース認証](UsingWithRDS.IAMDBAuth.md)」を参照してください。

**注記**  
RDS for PostgreSQL は、Active Directory グループの Kerberos 認証をサポートしていません。

**Topics**
+ [利用可能なリージョンとバージョン](#postgresql-kerberos.RegionVersionAvailability)
+ [PostgreSQL DB インスタンスの Kerberos 認証の概要](#postgresql-kerberos-overview)
+ [PostgreSQL DB インスタンスの Kerberos 認証のセットアップ](postgresql-kerberos-setting-up.md)
+ [Active Directory ドメインの RDS for PostgreSQL DB インスタンスの管理](postgresql-kerberos-managing.md)
+ [PostgreSQL を Kerberos 認証と接続する](postgresql-kerberos-connecting.md)

## 利用可能なリージョンとバージョン
<a name="postgresql-kerberos.RegionVersionAvailability"></a>

機能の可用性とサポートは、各データベースエンジンの特定のバージョン、および AWS リージョン によって異なります。Kerberos 認証を使用した RDS for PostgreSQL のバージョンとリージョンの可用性の詳細については、「[Amazon RDS での Kerberos データベース認証でサポートされているリージョンと DB エンジン](Concepts.RDS_Fea_Regions_DB-eng.Feature.KerberosAuthentication.md)」を参照してください。

## PostgreSQL DB インスタンスの Kerberos 認証の概要
<a name="postgresql-kerberos-overview"></a>

PostgreSQL DB インスタンスに Kerberos 認証を設定するには、以下で説明するステップを実行します。

1. AWS Managed Microsoft AD を使用して AWS Managed Microsoft AD ディレクトリを作成します。AWS マネジメントコンソール、AWS CLI、Directory Service API を使用して、ディレクトリを作成できます。ディレクトリがインスタンスと通信できるように、ディレクトリセキュリティグループで関連するアウトバウンドポートを必ず開いてください。

1. AWS Managed Microsoft AD ディレクトリを呼び出すためのアクセスを Amazon RDS に許可するロールを作成します。これにより、マネージド IAM ポリシー `AmazonRDSDirectoryServiceAccess` を使用する AWS Identity and Access Management (IAM) ロールが作成されます。

   IAM ロールによるアクセスを許可するには、AWS Security Token Service (AWS STS) エンドポイントを AWS アカウントの AWS リージョンでアクティベートする必要があります。AWS STS エンドポイントはすべての AWS リージョン でデフォルトでアクティブになっているため、他のアクションを実行せずに、エンドポイントを使用することができます。詳細については、*IAM ユーザーガイド*の「[AWS STS リージョンでの AWS のアクティブ化と非アクティブ化](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-activate-deactivate)」を参照してください。

1. Microsoft Active Directory のツールを使用して、AWS Managed Microsoft AD ディレクトリでユーザーとグループを作成し、設定します。Active Directory にユーザーを作成する方法の詳細については、*AWS 管理ガイド*の「[Directory Service マネージド Microsoft AD でユーザーとグループを管理する](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups.html)」を参照してください。

1. 異なる AWS アカウントまたは Virtual Private Cloud (VPC) 内にディレクトリおよび DB インスタンスを配置する場合は、VPC ピア接続を設定します。詳細については、*Amazon VPC Peering Guide*の「[VPC ピア機能とは](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html)」を参照してください。

1. 以下のいずれかの方法を使用して、コンソール、CLI、RDS API から PostgreSQL DB インスタンスを作成または変更します。
   + [Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md) 
   + [Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md) 
   + [DB インスタンスへの復元](USER_RestoreFromSnapshot.md)
   + [Amazon RDS の DB インスタンスを特定の時点に復元する](USER_PIT.md)

   インスタンスは、ディレクトリと同じ Amazon Virtual Private Cloud (VPC)、または別の AWS アカウントまたは VPC にあります。PostgreSQL DB インスタンスの作成または変更時に、次のステップを行います。
   + ディレクトリの作成時に、生成されたドメイン識別子 (`d-*` 識別子) を指定します。
   + 作成した IAM ロール名を指定します。
   + DB インスタンスのセキュリティグループが、ディレクトリのセキュリティグループからインバウンドトラフィックを受信できることを確認します。

1. RDS マスターユーザー認証情報を使用して、PostgreSQL DB インスタンスインスタンスに接続します。外部で識別されるように PostgreSQL でユーザーを作成します。外部で識別されたユーザーは、Kerberos 認証を使用して PostgreSQL DB インスタンスにログインできます。

# PostgreSQL DB インスタンスの Kerberos 認証のセットアップ
<a name="postgresql-kerberos-setting-up"></a>

AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) を使用して、PostgreSQL DB インスタンスに Kerberos 認証をセットアップします。Kerberos 認証をセットアップするには、次のステップに従います。

**Topics**
+ [ステップ 1: AWS Managed Microsoft AD を使用してディレクトリを作成する](#postgresql-kerberos-setting-up.create-directory)
+ [ステップ 2: (オプション) オンプレミスの Active Directory と Directory Service との間の信頼関係を作成する](#postgresql-kerberos-setting-up.create-trust)
+ [ステップ 3: Amazon RDS が Directory Service にアクセスするための IAM ロールを作成する](#postgresql-kerberos-setting-up.CreateIAMRole)
+ [ステップ 4: ユーザーを作成して設定する](#postgresql-kerberos-setting-up.create-users)
+ [ステップ 5: ディレクトリと DB インスタンスの間のクロス VPC トラフィックを有効にする](#postgresql-kerberos-setting-up.vpc-peering)
+ [ステップ 6: PostgreSQL DB インスタンスを作成または変更する](#postgresql-kerberos-setting-up.create-modify)
+ [ステップ 7: Kerberos プリンシパル用の PostgreSQL ユーザーを作成する](#postgresql-kerberos-setting-up.create-logins)
+ [ステップ 8: PostgreSQL クライアントを設定する](#postgresql-kerberos-setting-up.configure-client)

## ステップ 1: AWS Managed Microsoft AD を使用してディレクトリを作成する
<a name="postgresql-kerberos-setting-up.create-directory"></a>

Directory Service はフルマネージド型の Active Directory を AWS クラウド内に作成します。AWS Managed Microsoft AD ディレクトリを作成すると、Directory Service が 2 つのドメインコントローラーと DNS サーバーを作成します。ディレクトリサーバーは、VPC 内の異なるサブネットで作成されます。この冗長性によって、障害が発生してもディレクトリにアクセス可能な状態を維持できます。

 AWS Managed Microsoft AD ディレクトリを作成すると、AWS Directory Service がユーザーに代わって次のタスクを実行します。
+ VPC 内に Active Directory を設定します。
+ ユーザー名 `Admin` と指定されたパスワードを使用してディレクトリ管理者アカウントを作成します。このアカウントを使用してディレクトリを管理します。
**重要**  
このパスワードは必ず保管してください。Directory Service にはこのパスワードは保存されず、復元やリセットもできません。
+ ディレクトリコントローラー用セキュリティグループを作成します。セキュリティグループは、PostgreSQL DB インスタンスとの通信を許可する必要があります。

AWS Directory Service for Microsoft Active Directory を起動すると、AWS は組織単位 (OU) を作成します。OU にはディレクトリのオブジェクトがすべて含まれています。この OU はドメインルートにあります。OU にはディレクトリを作成する際に入力した NetBIOS 名があります。ドメインルートは AWS が所有し、管理します。

 `Admin` ディレクトリに作成された AWS Managed Microsoft AD アカウントには、OU に対して頻繁に実行される管理行為の権限が含まれています。
+ ユーザーを作成、更新、削除する
+ ファイルやプリントサーバーなどのドメインにリソースを追加して、追加したリソースへのアクセス許可を OU のユーザーとグループに割り当てる 
+ 追加の OU やコンテナを作成する 
+ 権限を委譲する 
+ 削除されたオブジェクトを Active Directory のごみ箱から元に戻す 
+ Active Directory Web Service で Windows PowerShell 用の Active Directory と Domain Name Service (DNS) モジュールを実行する。

`Admin` アカウントには、ドメイン全体に関係するアクティビティを実行する権限もあります。
+ DNS 設定 (レコード、ゾーン、フォワーダーの追加、削除、更新) を管理する 
+ DNS イベントログを参照する 
+ セキュリティイベントログを参照する 

**AWS Managed Microsoft AD でディレクトリを作成するには**

1.  [Directory Serviceコンソール](https://console.aws.amazon.com/directoryservicev2/)のナビゲーションペインで、[**ディレクトリ**]、[**ディレクトリのセットアップ**] の順に選択します。

1. **AWS Managed Microsoft AD** を選択します。現在、 Amazon RDS での使用では AWS Managed Microsoft AD のオプションのみがサポートされています。

1. [**次へ**] を選択します。

1. [**ディレクトリ情報の入力**] ページに、以下の情報を指定します。  
**エディション**  
 目的の要件を満たすエディションを選択します。  
**ディレクトリの DNS 名**  
 ディレクトリの完全修飾名 (例: **corp.example.com**)。  
**ディレクトリの NetBIOS 名**  
 ディレクトリの短縮名 (例: `CORP`)。  
**ディレクトリの説明**  
 必要に応じて、ディレクトリの説明。  
**Admin パスワード**  
 ディレクトリ管理者のパスワードです。ディレクトリの作成プロセスでは、ユーザー名 `Admin` とこのパスワードを使用して管理者アカウントが作成されます。  
 ディレクトリ管理者のパスワードには、「admin」の単語を含めることはできません。パスワードは大文字と小文字を区別し、8-64 文字にします。また、以下の 4 つのカテゴリうち 3 つから少なくとも 1 文字を含める必要があります。  
   +  小文字 (a～z) 
   +  大文字 (A～Z) 
   +  数字 (0～9) 
   +  英数字以外の文字 (\$1\$1@\$1\$1%^&\$1\$1-\$1=`\$1\$1()\$1\$1[]:;"'<>,.?/)   
**パスワードを確認**  
 管理者のパスワードをもう一度入力します。  
このパスワードは必ず保管してください。Directory Service にはこのパスワードは保存されず、復元やリセットもできません。

1. [**Next (次へ)**] を選択します。

1. [**VPC とサブネットの選択**] ページで、以下の情報を指定します。  
**VPC**  
ディレクトリ用の VPC を選択します。PostgreSQL DB インスタンスは、この同じ VPC または異なる VPC で作成できます。  
**Subnets**  
 ディレクトリサーバーのサブネットを選択します。2 つのサブネットは、異なるアベイラビリティーゾーンに存在している必要があります。

1. [**Next (次へ)**] を選択します。

1.  ディレクトリの情報を確認します。変更が必要な場合は、[**戻る**] を選択し、変更を行います。情報が正しい場合は、[**Create directory (ディレクトリの作成)**] を選択します。  
![\[ディレクトリの詳細ページ\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/WinAuth2.png)

 ディレクトリが作成されるまで、数分かかります。正常に作成されると、[**Status**] 値が [**Active**] に変わります。

 ディレクトリに関する情報を表示するには、ディレクトリの一覧で、そのディレクトリ ID を選択します。**ディレクトリ ID** 値を書き留めます。PostgreSQL DB インスタンスを作成または変更する場合は、この値が必要です。

![\[詳細ページの画像\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/WinAuth3.png)


## ステップ 2: (オプション) オンプレミスの Active Directory と Directory Service との間の信頼関係を作成する
<a name="postgresql-kerberos-setting-up.create-trust"></a>

独自のオンプレミスの Microsoft Active Directory を使用する予定がない場合は、[ステップ 3: Amazon RDS が Directory Service にアクセスするための IAM ロールを作成する](#postgresql-kerberos-setting-up.CreateIAMRole) に進みます。

オンプレミスの Active Directory を使用して Kerberos 認証を取得するには、オンプレミスの Microsoft Active Directory と (AWS Managed Microsoft AD で作成された) [ステップ 1: AWS Managed Microsoft AD を使用してディレクトリを作成する](#postgresql-kerberos-setting-up.create-directory) ディレクトリとの間に、フォレストの信頼を使用して、信頼するドメイン関係を作成する必要があります。信頼は一方向にすることができます。この場合、AWS Managed Microsoft AD ディレクトリはオンプレミスの Microsoft Active Directory を信頼します。信頼は、両方の Active Directory が相互に信頼する双方向にすることもできます。Directory Service を使用して信頼関係を設定する方法の詳細については、「*AWS Directory Service 管理ガイド*」の「[信頼関係を作成する場合](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_setup_trust.html)」を参照してください。

**注記**  
オンプレミスの Microsoft Active Directory を使用している場合、Windows クライアントは rds.amazonaws.com の代わりにエンドポイント内の Directory Service のドメイン名を使用して接続します。詳細については[PostgreSQL を Kerberos 認証と接続する](postgresql-kerberos-connecting.md)を参照してください。

オンプレミスの Microsoft Active Directory ドメイン名に、新しく作成された信頼関係に対応する DNS サフィックスルーティングが含まれていることを確認してください。次のスクリーンショットは、例を示しています。

![\[作成された信頼に対応している DNS ルーティング\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/kerberos-auth-trust.png)


## ステップ 3: Amazon RDS が Directory Service にアクセスするための IAM ロールを作成する
<a name="postgresql-kerberos-setting-up.CreateIAMRole"></a>

 Amazon RDS が Directory Service を呼び出すには、AWS アカウントにマネージド IAM ポリシー `AmazonRDSDirectoryServiceAccess` を使用する IAM ロールが必要です。このロールにより、Amazon RDS は Directory Service を呼び出すことが可能になります。

AWS マネジメントコンソール を使用して DB インスタンスを作成し、コンソールユーザーが `iam:CreateRole` アクセス許可を持っている場合、コンソールは必要な IAM ロールを自動的に作成します。この場合、ロール名は `rds-directoryservice-kerberos-access-role` です。それ以外の場合は、IAM ロールを手動で作成する必要があります。IAM ロールを作成する場合、[`Directory Service`] を選択し、それに AWS マネージドポリシー `AmazonRDSDirectoryServiceAccess` をアタッチします。

サービス用の IAM ロールを作成する方法の詳細については、「*IAM ユーザーガイド*」の「[AWS のサービスにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)」を参照してください。

**注記**  
RDS for Microsoft SQL Server の Windows 認証に使用される IAM ロールは、Amazon RDS for PostgreSQL に使用できません。

`AmazonRDSDirectoryServiceAccess` マネージドポリシーを使用する代わりに、必要なアクセス許可を使用してポリシーを作成することもできます。これを行うには、IAM ロールに次の IAM 信頼ポリシーが必要です。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "directoryservice.rds.amazonaws.com",
          "rds.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

また、ロールには、以下の IAM ロールポリシーも必要です。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "ds:DescribeDirectories",
        "ds:AuthorizeApplication",
        "ds:UnauthorizeApplication",
        "ds:GetAuthorizedApplicationDetails"
      ],
    "Effect": "Allow",
    "Resource": "*"
    }
  ]
}
```

------

オプトインの AWS リージョンの場合は、IAM ロールの信頼ポリシーでリージョン固有のサービスプリンシパルを使用します。これらのリージョンでサービスの信頼ポリシーを作成するときは、サービスプリンシパルでリージョンコードを指定します。

次の例では、リージョン固有のサービスプリンシパルを含む信頼ポリシーを示します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "directoryservice.rds.REGION-CODE.amazonaws.com",
          "rds.REGION-CODE.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

REGION-CODE を、特定のリージョンのコードに置き換えます。例えば、アジアパシフィック (メルボルン) リージョンでは、次のサービスプリンシパルを使用します。

```
"Service": [
  "directoryservice.rds.ap-southeast-4.amazonaws.com",
  "rds.ap-southeast-4.amazonaws.com"
]
```

## ステップ 4: ユーザーを作成して設定する
<a name="postgresql-kerberos-setting-up.create-users"></a>

 Active Directory ユーザーとコンピューターツールを使用してユーザーを作成できます。これは Active Directory Domain Services ツールおよび Active Directory Lightweight Directory Services ツールの 1 つです。詳細については、Microsoft のドキュメントの「[ユーザーとコンピュータを Active Directory ドメインに追加する](https://learn.microsoft.com/en-us/troubleshoot/windows-server/identity/create-an-active-directory-server#add-users-and-computers-to-the-active-directory-domain)」を参照してください。この場合、ユーザーは個人またはその他のエンティティです。例えば、ドメインの一部であり、その ID がディレクトリで管理されているコンピュータなどです。

Directory Service ディレクトリにユーザーを作成するには、Directory Service ディレクトリのメンバーである Windows ベースの Amazon EC2 インスタンスに接続している必要があります。同時に、ユーザーを作成する権限を持つユーザーとしてログインしていなければなりません。詳細については、*AWS Directory Service 管理ガイド*の「[ユーザーの作成](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_manage_users_groups_create_user.html)」を参照してください。

## ステップ 5: ディレクトリと DB インスタンスの間のクロス VPC トラフィックを有効にする
<a name="postgresql-kerberos-setting-up.vpc-peering"></a>

同じ VPC 内にディレクトリおよび DB インスタンスを配置する場合は、このステップをスキップして [ステップ 6: PostgreSQL DB インスタンスを作成または変更する](#postgresql-kerberos-setting-up.create-modify) に進みます。

ディレクトリと DB インスタンスを別の VPC に配置する場合は、VPC ピア接続または [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html) を使用してクロス VPC トラフィックを設定します。

次の手順では、VPC ピア接続を使用して VPC 間のトラフィックを有効にします。*Amazon Virtual Private Cloud ピアリング接続ガイド*の「[VPC ピア機能とは](https://docs.aws.amazon.com/vpc/latest/peering/Welcome.html)」の手順に従います。

**VPC ピア接続を使用してクロス VPC トラフィックを有効にするには**

1. 適切な VPC ルーティングを設定し、ネットワークトラフィックが双方向にフローするようにします。

1. DB インスタンスのセキュリティグループが、ディレクトリのセキュリティグループからインバウンドトラフィックを受信できることを確認します。

1. トラフィックをブロックするネットワークのアクセス制御リスト (ACL) ルールがないことを確認します。

別の AWS アカウントがディレクトリを所有している場合は、ディレクトリを共有する必要があります。

**AWS アカウント間でディレクトリを共有するには**

1. DB インスタンスを作成する AWS アカウントとの間でディレクトリの共有をスタートするには、*AWS 管理ガイド*の「[チュートリアル: Directory Service マネージド Microsoft AD ディレクトリを共有して、シームレスに EC2 ドメインを結合する](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/ms_ad_tutorial_directory_sharing.html)」の手順を実行します。

1. DB インスタンスのアカウントを使用して、Directory Service コンソールにサインインし、続行する前にドメインが必ず `SHARED` ステータスであることを確認します。

1. DB インスタンスのアカウントを使用して Directory Service コンソールにサインインしている間に、[**ディレクトリ ID**] の値を書き留めておきます。このディレクトリ ID は、DB インスタンスをドメインに結合するために使用します。

## ステップ 6: PostgreSQL DB インスタンスを作成または変更する
<a name="postgresql-kerberos-setting-up.create-modify"></a>

ディレクトリで使用する PostgreSQL DB インスタンスを作成または変更します。コンソール、CLI、RDS API を使用して DB インスタンスとディレクトリを関連付けることができます。これには以下の 2 つの方法があります。
+  コンソール、[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) CLI コマンド、または [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) RDS API オペレーションを使用して新しい PostgreSQL DB インスタンスを作成します。手順については、「[Amazon RDS DB インスタンスの作成](USER_CreateDBInstance.md)」を参照してください。
+  コンソール、[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI コマンド、または [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API オペレーションを使用して、既存の PostgreSQL DB インスタンスを変更します。手順については、「[Amazon RDS DB インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。
+  コンソール、[DB スナップショットから DB インスタンスを復元する](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) CLI コマンド、または [RestoreDBInstanceFromDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html) RDS API オペレーションを使用して、DB スナップショットから PostgreSQL DB インスタンスを復元します。手順については、「[DB インスタンスへの復元](USER_RestoreFromSnapshot.md)」を参照してください。
+  コンソール、[restore-db-instance-to-point-in-time](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) CLI コマンド、または [RestoreDBInstanceToPointInTime](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html) RDS API オペレーションを使用して、PostgreSQL インスタンスをポイントインタイムに復元します。手順については、「[Amazon RDS の DB インスタンスを特定の時点に復元する](USER_PIT.md)」を参照してください。

Kerberos 認証は、VPC 内の PostgreSQL DB インスタンスでのみサポートされています。DB インスタンスは、ディレクトリと同じ VPC または異なる VPC 内にあります。DB インスタンスがディレクトリと通信する場合、そのインスタンスは、ディレクトリの VPC 内での送受信を許可するセキュリティグループを使用する必要があります。

### コンソール
<a name="postgresql-kerberos-setting-up.create-modify.Console"></a>

DB インスタンスを作成、変更、復元するためにコンソールを使用する場合は、**データベースの認証**セクションの [**パスワードと Kerberos 認証**] を選択します。次に、[**ディレクトリのブラウジング**] を選択します。Directory Service を使用するには、ディレクトリを選択するか、[**新しいディレクトリの作成**] を選択します。

![\[認証に Kerberos を選択し、使用するディレクトリを特定します。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/rpg-authentication-use-kerberos.png)


### AWS CLI
<a name="postgresql-kerberos-setting-up.create-modify.CLI"></a>

AWS CLI を使用する場合は、DB インスタンスが、作成したディレクトリを使用できるように、以下のパラメータが必要です。
+ `--domain` パラメータには、ディレクトリの作成時に生成されたドメイン識別子 ("d-\$1" 識別子) を使用します。
+ `--domain-iam-role-name` パラメータには、マネージド IAM ポリシー `AmazonRDSDirectoryServiceAccess` を使用する作成済みのロールを使用します。

例えば、以下の CLI コマンドはディレクトリを使用するように DB インスタンスを変更します。

```
aws rds modify-db-instance --db-instance-identifier mydbinstance --domain d-Directory-ID --domain-iam-role-name role-name 
```

**重要**  
DB インスタンスを変更して Kerberos 認証を有効にした場合、変更後、その DB インスタンスを再起動します。

## ステップ 7: Kerberos プリンシパル用の PostgreSQL ユーザーを作成する
<a name="postgresql-kerberos-setting-up.create-logins"></a>

この時点で、 RDS for PostgreSQL DB インスタンスが AWS Managed Microsoft AD ドメインに参加しました。[ステップ 4: ユーザーを作成して設定する](#postgresql-kerberos-setting-up.create-users) のディレクトリに作成したユーザーを PostgreSQL データベースユーザーとして設定し、データベースにログインする権限を付与する必要があります。そのためには、`rds_superuser` 権限を持つデータベースユーザーとしてサインインします。例えば、RDS for PostgreSQL DB インスタンス、の作成時にデフォルト値を受け入れた場合は、次のステップに示すように `postgres` を使用します。

**Kerberos プリンシパル用の PostgreSQL データベースユーザーを作成するには**

1. `psql` を使用して、の RDS for PostgreSQL DB インスタンスのエンドポイントに `psql` を使用して接続します。次の例では、`postgres` ロールにデフォルトの `rds_superuser` アカウントを使用しています。

   ```
   psql --host=cluster-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
   ```

1. データベースにアクセスする Kerberos プリンシパル (Active Directory ユーザー名) ごとにデータベースユーザー名を作成します。Active Directory インスタンスで定義されている正規のユーザー名 (ID) を使用します。つまり、そのユーザー名には、小文字 `alias` (Active Directory 内のユーザー名) と Active Directory ドメインの大文字の名前を使用します。Active Directory ユーザー名は外部認証されたユーザーなので、次に示すように名前を引用符で囲んでください。

   ```
   postgres=> CREATE USER "username@CORP.EXAMPLE.COM" WITH LOGIN;
   CREATE ROLE
   ```

1. データベースユーザーに `rds_ad` ロールを付与します。

   ```
   postgres=> GRANT rds_ad TO "username@CORP.EXAMPLE.COM";
   GRANT ROLE
   ```

Active Directory ユーザー ID のすべての PostgreSQL ユーザーの作成が完了すると、ユーザーは Kerberos 認証情報を使用して RDS for PostgreSQL DB インスタンス にアクセスできます。

Kerberos を使用して認証するデータベースユーザーは、Active Directory ドメインのメンバーであるクライアントマシンから認証を行う必要があります。

`rds_ad` ロールを付与されたデータベースユーザーもその `rds_iam` ロールを持つことはできません。これは、ネストされたメンバーシップにも適用されます。詳細については、「[MariaDB、MySQL、および PostgreSQL の IAM データベース認証](UsingWithRDS.IAMDBAuth.md)」を参照してください。

## ステップ 8: PostgreSQL クライアントを設定する
<a name="postgresql-kerberos-setting-up.configure-client"></a>

PostgreSQL クライアントを設定するには、次のステップを実行します。
+ ドメインを指す krb5.conf ファイル (または同等) を作成します。
+ クライアントホストと Directory Service 間でトラフィックが流れることを確認します。次の目的で Netcat などのネットワークユーティリティを使用します。
  + ポート 53 の DNS 経由のトラフィックを確認します。
  + ポート 53 および Kerberos の TCP/UDP 上のトラフィックを確認します。これには、Directory Service の場合ポート 88 および 464 が含まれます。
+ データベースポートを介してクライアントホストと DB インスタンス間でトラフィックが流れることを確認します。例えば、psql を使用してデータベースに接続し、アクセスします。

以下は、AWS Managed Microsoft AD 向けの krb5.conf の内容のサンプルです 。

```
[libdefaults]
 default_realm = EXAMPLE.COM
[realms]
 EXAMPLE.COM = {
  kdc = example.com
  admin_server = example.com
 }
[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM
```

以下は、オンプレミスの Microsoft Active Directory 向けの krb5.conf の内容のサンプルです。

```
[libdefaults]
 default_realm = EXAMPLE.COM
[realms]
 EXAMPLE.COM = {
  kdc = example.com
  admin_server = example.com
 }
 ONPREM.COM = {
  kdc = onprem.com
  admin_server = onprem.com
 }
[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM
 .onprem.com = ONPREM.COM
 onprem.com = ONPREM.COM  
 .rds.amazonaws.com = EXAMPLE.COM
 .amazonaws.com.rproxy.goskope.com.cn = EXAMPLE.COM
 .amazon.com = EXAMPLE.COM
```

# Active Directory ドメインの RDS for PostgreSQL DB インスタンスの管理
<a name="postgresql-kerberos-managing"></a>

コンソール、CLI、RDS API を使用して、 DB インスタンスと Microsoft Active Directory との関係を管理できます。例えば、Kerberos 認証を有効化するために、Microsoft Active Directory を関連付けることができます。また、Microsoft Active Directory の関連付けを解除して、Kerberos 認証を無効化することもできます。さらに、1 つの Microsoft Active Directory によって外部に認証される DB インスタンスをもう 1 つの Microsoft Active Directory に移動することもできます。

例えば、CLI を使用して次を実行できます。
+ メンバーシップが失敗した Kerberos 認証を再度有効化するには、[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI コマンドを使用します。`--domain` オプションに現在のメンバーシップのディレクトリ ID を指定します。
+ DB インスタンスの Kerberos 認証を無効にするには、[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI コマンドを使用します。`none` オプションで、`--domain` を指定します。
+ DB インスタンスをあるドメインから別のドメインに移動するには、[modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) CLI コマンドを使用します。`--domain` オプションの新しいドメインのドメイン識別子を指定します。

## ドメインのメンバーシップを理解する
<a name="postgresql-kerberos-managing.understanding"></a>

DB インスタンスを作成または変更すると、ドメインのそれがメンバーになります。DB インスタンスのドメインメンバーシップのステータスは、コンソールで表示したり、[describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) CLI コマンドを実行して表示したりすることができます。DB インスタンスのステータスは、以下のいずれかです。
+ `kerberos-enabled` - DB インスタンスは Kerberos 認証を有効化しました。
+ `enabling-kerberos` - AWS は、この DB インスタンスで Kerberos 認証を有効化中です。
+ `pending-enable-kerberos` - この DB インスタンスでは、Kerberos 認証の有効化が保留中になっています。
+ `pending-maintenance-enable-kerberos` - AWS は、次にスケジュールされたメンテナンスウィンドウで、DB インスタンスでの Kerberos 認証の有効化を試みます。
+ `pending-disable-kerberos` - この DB インスタンスでは、Kerberos 認証の無効化が保留中になっています。
+ `pending-maintenance-disable-kerberos` - AWS は、次にスケジュールされたメンテナンスウィンドウで、DB インスタンスでの Kerberos 認証の無効化を試みます。
+ `enable-kerberos-failed` - 設定の問題により、AWS が DB インスタンスで Kerberos 認証を有効化できませんでした。DB インスタンスを変更するコマンドを再発行する前に、設定の問題を修正します。
+ `disabling-kerberos` - AWS は、この DB インスタンスで Kerberos 認証を無効化中です。

ネットワーク接続の問題や正しくない IAM ロールのために、Kerberos 認証を有効化するリクエストは失敗する可能性があります。場合によっては、DB インスタンスを作成または変更するときに、Kerberos 認証を有効にしようとすると失敗する可能性があります。その場合、正しい IAM ロールを使用していることを確認してから、DB インスタンスを変更し、ドメインに接続します。

**注記**  
PostgreSQL で RDS を使用する Kerberos 認証でのみ、ドメインの DNS サーバーにトラフィックが送信されます。他のすべての DNS リクエストは、PostgreSQL を実行している DB インスタンスでアウトバウンドのネットワークアクセスとして扱われます。RDS for PostgreSQL を使用したアウトバウンドネットワークアクセスの詳細については、「[アウトバウンドネットワークアクセスでカスタム DNS サーバーを使用する](Appendix.PostgreSQL.CommonDBATasks.CustomDNS.md)」を参照してください。

# PostgreSQL を Kerberos 認証と接続する
<a name="postgresql-kerberos-connecting"></a>

pgAdmin インターフェイスまたは psql などのコマンドラインインターフェイスを使用して、Kerberos 認証で PostgreSQL に接続できます。接続の詳細については、「[PostgreSQL データベースエンジンを実行する DB インスタンスへの接続](USER_ConnectToPostgreSQLInstance.md) 」を参照してください。エンドポイント、ポート番号、および接続に必要なその他の詳細情報を取得する方法について詳細は、「[PostgreSQL DB インスタンスへの接続](CHAP_GettingStarted.CreatingConnecting.PostgreSQL.md#CHAP_GettingStarted.Connecting.PostgreSQL)」を参照してください。

**注記**  
PostgreSQL の GSSAPI 認証と暗号化は、Kerberos ライブラリ `libkrb5.so` によって実装されます。`postgres_fdw` や `dblink` などの機能は、Kerberos 認証または暗号化によるアウトバウンド接続についても同じライブラリに依存します。

## pgAdmin
<a name="collapsible-section-pgAdmin"></a>

pgAdmin を使用して、PostgreSQL を Kerberos 認証に接続するには、以下のステップを実行します。

1. クライアントコンピュータの pgAdmin アプリケーションを起動します。

1. [**Dashboard**] (ダッシュボード) タブで、[**Add New Server**] (新しいサーバーの追加) を選択します。

1. [**Create - Server (作成 - サーバー)**] ダイアログボックスで、[**General (全般)**] タブに名前を入力し、pgAdmin のサーバーを特定します。

1. **[Connection]** (接続) タブで、 RDS for PostgreSQL データベースから次の情報を入力します。
   + **[Host]** (ホスト) では、のエンドポイントを入力します。RDS for PostgreSQL DB インスタンス。エンドポイントは次のようになります。

     ```
     RDS-DB-instance.111122223333.aws-region.rds.amazonaws.com
     ```

     Windows クライアントからオンプレミスの Microsoft Active Directory に接続するには、ホストエンドポイントで `rds.amazonaws.com` の代わりに AWS Managed Active Directory のドメイン名を使用します。例えば、AWS Managed Active Directory のドメイン名が `corp.example.com` であるとします。この場合、**[Host]** (ホスト) では、エンドポイントは次のように指定されます。

     ```
     RDS-DB-instance.111122223333.aws-region.corp.example.com
     ```
   + [**Port (ポート)**] に、割り当てられたポートを入力します。
   + [**Maintenance database (メンテナンスデータベース)**] に、クライアントが接続する初期データベースの名前を入力します。
   + [**ユーザーネーム**] に、「[ステップ 7: Kerberos プリンシパル用の PostgreSQL ユーザーを作成する](postgresql-kerberos-setting-up.md#postgresql-kerberos-setting-up.create-logins)」で Kerberos 認証用に入力したユーザーネームを入力します。

1. [**保存**] を選択します。

## Psql
<a name="collapsible-section-psql"></a>

psql を使用して、PostgreSQL を Kerberos 認証に接続するには、以下のステップを実行します。

1. コマンドプロンプトで、次のコマンドを実行します。

   ```
   kinit username                
   ```

   *`username`* をユーザー名で置き換えます。プロンプトで Microsoft Active Directory に保存されているユーザーのパスワードを入力します。

1. PostgreSQL DB インスタンスがパブリックにアクセス可能な VPC を使用している場合は、EC2 クライアントの `/etc/hosts` ファイルに、DB インスタンスエンドポイントの IP アドレスを記述します。例えば、次のコマンドは IP アドレスを取得し、それを `/etc/hosts` ファイルに入れます。

   ```
   % dig +short PostgreSQL-endpoint.AWS-Region.rds.amazonaws.com  
   ;; Truncated, retrying in TCP mode.
   ec2-34-210-197-118.AWS-Region.compute.amazonaws.com.
   34.210.197.118 
   
   % echo " 34.210.197.118  PostgreSQL-endpoint.AWS-Region.rds.amazonaws.com" >> /etc/hosts
   ```

   Windows クライアントからオンプレミスの Microsoft Active Directory を使用している場合は、特別なエンドポイントを使用して接続する必要があります。ホストエンドポイントで Amazon ドメイン `rds.amazonaws.com` を使用する代わりに、AWS Managed Active Directory のドメイン名を使用します。

   例えば、AWS Managed Active Directory のドメイン名が `corp.example.com` であるとします。次に、エンドポイントの形式 `PostgreSQL-endpoint.AWS-Region.corp.example.com` を使用して、これを `/etc/hosts` ファイルに配置します。

   ```
   % echo " 34.210.197.118  PostgreSQL-endpoint.AWS-Region.corp.example.com" >> /etc/hosts
   ```

1. 次の psql コマンドを使用して、Active Directory と統合されている PostgreSQL DB インスタンスにログインします。

   ```
   psql -U username@CORP.EXAMPLE.COM -p 5432 -h PostgreSQL-endpoint.AWS-Region.rds.amazonaws.com postgres
   ```

   オンプレミスの Active Directory を使用して、Windows クライアントから PostgreSQL DB クラスターにログインするには、前のステップ (`corp.example.com`) のドメイン名を指定して次の psql コマンドを使用します。

   ```
   psql -U username@CORP.EXAMPLE.COM -p 5432 -h PostgreSQL-endpoint.AWS-Region.corp.example.com postgres
   ```