Oracle DB インスタンス用に Kerberos を設定する
AWS Directory Service for Microsoft Active Directory とも呼ばれる AWS Managed Microsoft AD を使用し、Oracle DB インスタンスに Kerberos 認証をセットアップします。Kerberos 認証をセットアップするには、以下のステップを完了します。
注記
セットアップ中、RDS は、managed_service_user
@example.com
という名前の Oracle データベースユーザーを作成し、CREATE SESSION
権限を付与します (example.com
はドメイン名です)。このユーザーは、Directory Service が管理されたアクティブディレクトリ内に作成するユーザーに対応します。RDS は定期的に、Directory Service によって提供される認証情報を使用して Oracle データベースにログインします。その後、RDS はすぐにチケットキャッシュを破棄します。
ステップ 1: AWS Managed Microsoft AD を使用してディレクトリを作成する
AWS Directory Service はフルマネージド型の Active Directory を AWS クラウド内に作成します。AWS Managed Microsoft AD ディレクトリを作成すると、AWS Directory Service がユーザーに代わって 2 つのドメインコントローラーと 2 つのドメインネームシステム (DNS) サーバーを作成します。ディレクトリサーバーは、VPC 内の異なるサブネットで作成されます。この冗長性によって、障害が発生してもディレクトリにアクセス可能な状態を維持できます。
AWS Managed Microsoft AD ディレクトリを作成すると、AWS Directory Service がユーザーに代わって自動的に以下のタスクを実行します。
-
VPC 内に Active Directory を設定します。
-
「Admin」のユーザー名と指定されたパスワードを使用して、ディレクトリ管理者アカウントを作成します。このアカウントを使用してディレクトリを管理します。
注記
このパスワードは必ず保存してください。AWS Directory Service は保存しません。パスワードはリセットできますが、取得することはできません。
-
ディレクトリコントローラー用セキュリティグループを作成します。
AWS Managed Microsoft AD を起動すると、AWS は組織単位 (OU) を作成します。OU にはディレクトリのオブジェクトがすべて含まれています。この OU には、ディレクトリの作成時に入力した NetBIOS 名がドメインルートにあります。ドメインルートは AWS が所有し、管理します。
AWS Managed Microsoft AD ディレクトリに作成した管理者アカウントには、OU に関する以下の代表的な管理業務用のアクセス権限があります。
-
ユーザーを作成、更新、削除する
-
ファイルやプリントサーバーなどのドメインにリソースを追加して、追加したリソースへのアクセス許可を OU のユーザーとグループに割り当てる
-
追加の OU やコンテナを作成する
-
権限を委譲する
-
削除されたオブジェクトを Active Directory のごみ箱から元に戻す
-
Active Directory Web Service で AD と DNS Windows PowerShell モジュールを実行する
管理者アカウントには、ドメイン全体に関する以下のアクティビティを実行する権限もあります。
-
DNS 設定 (レコード、ゾーン、フォワーダーの追加、削除、更新) を管理する
-
DNS イベントログを参照する
-
セキュリティイベントログを参照する
AWS Management Console、AWS CLI、AWS Directory Service API を使用して、ディレクトリを作成します。ディレクトリが Oracle DB インスタンスと通信できるように、ディレクトリセキュリティグループで関連するアウトバウンドポートを必ず開いてください。
AWS Managed Microsoft AD でディレクトリを作成するには
AWS Management Console にサインインし、AWS Directory Service コンソール (https://console.aws.amazon.com/directoryservicev2/
)を開きます。 -
ナビゲーションペインで、[Directories]、[Set up Directory] の順に選択します。
-
[AWS Managed Microsoft AD] を選択します。現状では、AWS Managed Microsoft AD が Amazon RDS で使用できる唯一のオプションです。
-
次の情報を入力します。
- ディレクトリの DNS 名
-
ディレクトリの完全修飾名 (例:
corp.example.com
)。 - [Directory NetBIOS name] (ディレクトリの NetBIOS 名)
-
ディレクトリの短縮名 (例:
CORP
)。 - ディレクトリの説明
-
(オプション) ディレクトリの説明。
- Admin パスワード
-
ディレクトリ管理者のパスワードです。ディレクトリの作成プロセスでは、ユーザー名「Admin」とこのパスワードを使用して管理者アカウントが作成されます。
ディレクトリ管理者のパスワードに「admin」の単語を含めることはできません。パスワードは大文字と小文字を区別し、8-64 文字にします。また、以下の 4 つのカテゴリうち 3 つから少なくとも 1 文字を含める必要があります。
-
小文字 (a~z)
-
大文字 (A~Z)
-
数字 (0~9)
-
アルファベット以外の文字 (~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)
-
- パスワードを確認
-
管理者のパスワードをもう一度入力します。
-
[Next] を選択します。
-
[Networking ] セクションに次の情報を入力し、[Next] を選択します。
- VPC
-
ディレクトリ用の VPC。この同じ VPC 内に Oracle DB インスタンスを作成します。
- Subnets
-
ディレクトリサーバーのサブネット。2 つのサブネットは、異なるアベイラビリティーゾーンに存在している必要があります。
-
ディレクトリ情報を確認し、必要な変更を加えます。情報が正しい場合は、[Create directory (ディレクトリの作成)] を選択します。
ディレクトリが作成されるまで、数分かかります。正常に作成されると、[Status] 値が [Active] に変わります。
ディレクトリに関する情報を表示するには、ディレクトリの一覧で、ディレクトリ名を選択します。[Directory ID] の値を書き留めます。この値は、Oracle DB インスタンスを作成または変更するときに必要になります。
ステップ 2: 信頼関係を作成する
AWS Managed Microsoft AD のみを使用する予定の場合は、ステップ 3: Amazon RDS の IAM のアクセス許可を設定する に進みます。
セルフマネージド Active Directory を使用して Kerberos 認証を有効にするには、セルフマネージド Active Directory と前の手順で作成した AWS Managed Microsoft AD との間にフォレスト信頼関係を作成する必要があります。信頼は一方向で、AWS Managed Microsoft AD はセルフマネージド Active Directory を信頼します。信頼は、両方の Active Directory が相互に信頼する双方向にすることもできます。AWS Directory Service を使用してフォレストの信頼関係を設定する方法の詳細については、AWS Directory Service 管理ガイドの「信頼関係を作成する場合」を参照してください。
ステップ 3: Amazon RDS の IAM のアクセス許可を設定する
AWS Directory Service を呼び出すには、Amazon RDS にマネージド IAM ポリシー AmazonRDSDirectoryServiceAccess
を使用する IAM ロールが必要です。このロールにより、Amazon RDS は AWS Directory Service への呼び出しを行うことができます。
注記
ロールによるアクセスを許可するには、AWS Security Token Service (AWS STS) エンドポイントを AWS アカウント の AWS リージョン でアクティベートする必要があります。AWS STS エンドポイントはすべての AWS リージョン でデフォルトでアクティブになっているため、他のアクションを実行せずに、エンドポイントを使用することができます。詳細については、「IAM ユーザーガイド」の「AWS リージョン での AWS STS のアクティブ化と非アクティブ化」を参照してください。
IAM ロールの作成
AWS Management Console を使用して DB インスタンスを作成し、コンソールユーザーが iam:CreateRole
アクセス許可を持っている場合、コンソールは rds-directoryservice-kerberos-access-role
を自動的に作成します。それ以外の場合は、IAM ロールを手動で作成する必要があります。IAM ロールを手動で作成する場合、[Directory Service
] を選択し、それに AWS マネージドポリシー AmazonRDSDirectoryServiceAccess
をアタッチします。
サービス用の IAM ロールを作成する方法の詳細については、IAM ユーザーガイドの「AWS のサービスにアクセス許可を委任するロールの作成」を参照してください。
注記
RDS for Microsoft SQL Server の RDS 用の Windows 認証に使用される IAM ロールは、Oracle 用の RDS には使用できません。
IAM 信頼ポリシーを手動で作成する
マネージド IAM ポリシー AmazonRDSDirectoryServiceAccess
を使用する代わりに、必要なアクセス許可を使用してリソースポリシーを作成することもできます。プリンシパルとして directoryservice.rds.amazonaws.com
と rds.amazonaws.com
の両方を指定します。
特定のリソースへのアクセスについて、Amazon RDS が別のサービスに付与する許可を制限する場合は、リソースポリシー内で aws:SourceArn
および aws:SourceAccount
のグローバル条件コンテキストキーを使用することをお勧めします。混乱した代理問題から保護するための最も効果的な方法は、Amazon RDS リソースの完全な ARN を指定しながら、aws:SourceArn
グローバル条件コンテキストキーを使用することです。詳細については、「サービス間での混乱した代理問題の防止」を参照してください。
次の例では、Amazon RDS で aws:SourceArn
および aws:SourceAccount
グローバル条件コンテキストキーを使用して、「混乱した代理」問題を回避する方法を示します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "directoryservice.rds.amazonaws.com", "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:rds:
us-east-1
:123456789012
:db:mydbinstance
" }, "StringEquals": { "aws:SourceAccount": "123456789012
" } } } ] }
オプトインリージョンの場合は、リージョンのサービスプリンシパルを directoryservice.rds.
の形式で含める必要もあります。例えば、アフリカ (ケープタウン) リージョンの場合、次の信頼ポリシーを使用します。region_name
.amazonaws.com
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "directoryservice.rds.amazonaws.com", "directoryservice.rds.af-south-1.amazonaws.com", "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:rds:
af-south-1
:123456789012
:db:mydbinstance
" }, "StringEquals": { "aws:SourceAccount": "123456789012
" } } } ] }
また、ロールには、以下の IAM ポリシーも必要です。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ds:DescribeDirectories", "ds:AuthorizeApplication", "ds:UnauthorizeApplication", "ds:GetAuthorizedApplicationDetails" ], "Effect": "Allow", "Resource": "*" } ] }
ステップ 4: ユーザーを作成して設定する
アクティブディレクトリドメインサービスおよびアクティブディレクトリライトウェイトディレクトリサービスのツールの一部である「アクティブディレクトリユーザーとコンピュータ」ツールを使用して、ユーザーを作成できます。この場合、ユーザーは、ディレクトリにアクセスできる個別の人またはエンティティを表します。
AWS Directory Service ディレクトリにユーザーを作成するには、AWS Directory Service ディレクトリのメンバーである Windows ベースの Amazon EC2 インスタンスに接続している必要があります。同時に、ユーザーを作成する権限を持つユーザーとしてログインしていなければなりません。Active Directory にユーザーを作成する方法の詳細については、 AWS Managed Microsoft AD管理ガイドの「AWS Directory Serviceでユーザーとグループを管理する」を参照してください。
ステップ 5: ディレクトリと DB インスタンスの間のクロス VPC トラフィックを有効にする
同じ VPC 内にディレクトリおよび DB インスタンスを配置する場合は、このステップをスキップして ステップ 6: Oracle DB インスタンスを作成または変更する に進みます。
ディレクトリと DB インスタンスを別の AWS アカウントまたは VPC に配置する場合は、VPC ピア接続または AWS Transit Gateway を使用してクロス VPC トラフィックを設定します。次の手順では、VPC ピア接続を使用して VPC 間のトラフィックを有効にします。Amazon Virtual Private Cloud ピアリング接続ガイドの「VPC ピア機能とは」の手順に従います。
VPC ピア接続を使用してクロス VPC トラフィックを有効にするには
-
適切な VPC ルーティングを設定し、ネットワークトラフィックが双方向にフローするようにします。
-
DB インスタンスのセキュリティグループが、ディレクトリのセキュリティグループからのインバウンドトラフィックを受信できることを確認します。詳細については、AWS Managed Microsoft AD 管理ガイドの「AWS Directory Service のベストプラクティス」を参照してください。
-
トラフィックをブロックするネットワークのアクセスコントロールリスト (ACL) ルールがないことを確認します。
別の AWS アカウントがディレクトリを所有している場合は、ディレクトリを共有する必要があります。
AWS アカウント間でディレクトリを共有するには
-
DB インスタンスを作成する AWS アカウントとの間でディレクトリの共有を開始するには、AWS Managed Microsoft AD 管理ガイドの「チュートリアル: AWS Directory Service ディレクトリを共有して、シームレスに EC2 ドメインを結合する」の手順を実行します。
-
DB インスタンスのアカウントを使用して、AWS Directory Service コンソールにサインインし、続行する前にドメインが必ず
SHARED
ステータスであることを確認します。 -
DB インスタンスのアカウントを使用して AWS Directory Service コンソールにサインインしている間に、[ディレクトリ ID] の値を書き留めておきます。このディレクトリ ID は、DB インスタンスをドメインに結合するために使用します。
ステップ 6: Oracle DB インスタンスを作成または変更する
ディレクトリで使用する Oracle DB インスタンスを作成または変更します。コンソール、CLI、RDS API を使用して DB インスタンスとディレクトリを関連付けることができます。これには以下の 2 つの方法があります。
-
コンソール、create-db-instance CLI コマンド、CreateDBInstance RDS API オペレーションを使用して新しい Oracle DB インスタンスを作成します。
手順については、「Amazon RDS DB インスタンスの作成」を参照してください。
-
コンソール、modify-db-instance CLI コマンド、ModifyDBInstance RDS API オペレーションを使用して、既存の Oracle DB インスタンスを変更します。
手順については、「Amazon RDS DB インスタンスを変更する」を参照してください。
-
コンソール、restore-db-instance-from-db-snapshot CLI コマンド、RestoreDBInstanceFromDBSnapshot RDS API オペレーションを使用して、DB スナップショットから Oracle DB インスタンスを復元します。
手順については、「DB インスタンスへの復元」を参照してください。
-
コンソール、restore-db-instance-to-point-in-time CLI コマンド、RestoreDBInstanceToPointInTime RDS API オペレーションを使用して、Oracle DB インスタンスをポイントインタイムに復元します。
手順については、「Amazon RDS の DB インスタンスを特定の時点に復元する」を参照してください。
Kerberos 認証は、VPC 内の Oracle DB インスタンスにのみサポートされています。DB インスタンスは、ディレクトリと同じ VPC または異なる VPC 内にあります。DB インスタンスの作成または変更時に、次の手順を行います。
-
ディレクトリの作成時に、生成されたドメイン識別子 (
d-*
識別子) を指定します。 -
作成した IAM ロール名を指定します。
-
DB インスタンスセキュリティグループがディレクトリセキュリティグループからインバウンドトラフィックを受信し、ディレクトリへのアウトバウンドトラフィックを送信できることを確認してください。
DB インスタンスを作成するためにコンソールを使用する場合は、データベースの認証 セクションの [パスワードと Kerberos 認証] を選択します。[ディレクトリの参照] を選択してディレクトリを選択するか、[新しいディレクトリの作成] を選択します。
コンソールを使用して DB インスタンスを変更または復元する場合は、[Kerberos 認証] セクションでディレクトリを選択するか、[Create a new directory (新しいディレクトリの作成)] を選択します。
AWS CLI を使用する場合は、DB インスタンスが、作成したディレクトリを使用できるように、以下のパラメータが必要です。
-
--domain
パラメータには、ディレクトリの作成時に生成されたドメイン識別子 ("d-*" 識別子) を使用します。 -
--domain-iam-role-name
パラメータには、マネージド IAM ポリシーAmazonRDSDirectoryServiceAccess
を使用する作成済みのロールを使用します。
例えば、以下の CLI コマンドはディレクトリを使用するように DB インスタンスを変更します。
Linux、macOS、Unix の場合:
aws rds modify-db-instance \ --db-instance-identifier
mydbinstance
\ --domain d-ID
\ --domain-iam-role-namerole-name
Windows の場合:
aws rds modify-db-instance ^ --db-instance-identifier
mydbinstance
^ --domain d-ID
^ --domain-iam-role-namerole-name
重要
Kerberos 認証を有効化するために DB インスタンスを変更する場合、変更後 DB インスタンスを再起動します。
注記
MANAGED_SERVICE_USER
は、RDS の Directory Service によってランダムに生成される名前を持つサービスアカウントです。Kerberos 認証のセットアップ時に、RDS for Oracle は同じ名前のユーザーを作成し、そのユーザーに CREATE
SESSION
権限を割り当てます。Oracle DB ユーザーは、外部で MANAGED_SERVICE_USER@EXAMPLE.COM
と識別されます。EXAMPLE.COM
はドメインの名前です。RDS は定期的に、Directory Service によって提供される認証情報を使用して Oracle データベースにログインします。その後、RDS はすぐにチケットキャッシュを破棄します。
ステップ 7: Kerberos 認証 Oracle ログインを作成する
Amazon RDS マスターユーザーの認証情報を使用して、他の DB インスタンスと同様に Oracle DB インスタンスに接続します。DB インスタンスは、AWS Managed Microsoft AD ドメインに接続されています。このように、ドメインの Microsoft Active Directory ユーザーおよびグループから Oracle ログインおよびユーザーのプロビジョニングができます。標準の Oracle 権限をこれらのログインに付与したり、取り消したりしてデータベースの権限を管理します。
Microsoft Active Directory のユーザーに Oracle 認証を許可するには
-
Amazon RDS マスターユーザー認証情報を使用して、Oracle DB インスタンスに接続します。
-
外部認証されたユーザーを Oracle データベース内に作成します。
次の例では、
をユーザ名とドメイン名に置き換えます。KRBUSER@CORP.EXAMPLE.COM
CREATE USER "
KRBUSER@CORP.EXAMPLE.COM
" IDENTIFIED EXTERNALLY; GRANT CREATE SESSION TO "KRBUSER@CORP.EXAMPLE.COM
";これでドメインのユーザー (人とアプリケーションの両方) は、Kerberos 認証を使用してドメインに参加しているクライアントマシンから Oracle DB インスタンスに接続できます。
ステップ 8: Oracle クライアントを設定する
Oracle クライアントを構成するには、次の要件を満たす必要があります。
-
ドメインを指すように、krb5.conf (Linux) または krb5.ini (Windows) という名前の設定ファイルを作成します。この設定ファイルを使用する Oracle クライアントを設定します。
-
TCP/UDP の 53 番ポート (DNS)、Kerberos ポート(マネージド型 AWS Directory Service 向けの 88 番および 464 番)、および TCP の389 番 LDAP ポートを介して、クライアントホストと AWS Directory Service の間でトラフィックが流れているかを確認します。
-
データベースポートを介してクライアントホストと DB インスタンス間でトラフィックが流れることを確認します。
以下は、AWS Managed Microsoft AD のサンプルコンテンツです。
[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } [domain_realm] .example.com = CORP.EXAMPLE.COM example.com = CORP.EXAMPLE.COM
以下は、オンプレミス Microsoft AD のサンプルコンテンツです。krb5.conf ファイルまたは krb5.ini ファイルで、on-prem-ad-server-name
をオンプレミス AD サーバー名に置き換えます。
[libdefaults] default_realm = ONPREM.COM [realms] AWSAD.COM = { kdc = awsad.com admin_server = awsad.com } ONPREM.COM = { kdc =
on-prem-ad-server-name
admin_server =on-prem-ad-server-name
} [domain_realm] .awsad.com = AWSAD.COM awsad.com= AWSAD.COM .onprem.com = ONPREM.COM onprem.com= ONPREM.COM
注記
krb5.ini ファイル または krb5.conf ファイルを設定したら、サーバーを再起動することをお勧めします。
以下は、SQL*Plus 構成向けの sqlnet.ora の内容のサンプルです。
SQLNET.AUTHENTICATION_SERVICES=(KERBEROS5PRE,KERBEROS5) SQLNET.KERBEROS5_CONF=
path_to_krb5.conf_file
SQL 開発者向け構成の例に関しては、Oracle サポートの「ドキュメント 1609359.1