クラウドインテグレーション部の村上です。
Amazon RDS for SQL ServerでSQL Server Reporting Services (SSRS)を見てみたので、今回はその手順を備忘録として残しておきたいと思います。
- 前提
- 手順
前提
SQL Server Reporting Services (SSRS)とは?
SSRS はデータベース内の情報をレポートやダッシュボードとして提供する機能です。
SSRSを使用できるエディション
SQL Server Standard EditionとSQL Server Enterprise Editionのみ対応しています。
RDS は、次のバージョンで SQL Server スタンダードエディションおよびエンタープライズエディションの SSRS をサポートします。
- SQL Server 2019、バージョン 15.00.4043.16.v1 以降
- SQL Server 2017、バージョン 14.00.3223.3.v1 以降
- SQL Server 2016、バージョン 13.00.5820.21.v1 以降
今回の構成
今回はRDSの認証方式でWindows 認証を採用しています。
Windows認証を利用する場合は、AWS Managed Microsoft ADが必要ですので、それを構築し、EC2上にある別のドメインと信頼関係を設定しています。
RDS では、Windows Authentication 向けに AWS Managed Microsoft AD のみの使用をサポートしています。RDS は AD Connector の使用をサポートしていません。
AD種別 | ドメイン名 |
---|---|
AWS Managed Microsoft AD | msad.net |
セルフマネージドAD | murakami.com |
本ブログのゴール
- セルフマネージドAD側のユーザーがWindows 認証でRDSへ接続できること
- SSRSウェブポータルにアクセスできること
以上をゴールとします。
手順
AWS Managed Microsoft ADを作成して信頼関係を設定
詳細な手順は、AWSの公式ドキュメントにセルフマネージドADとAWS Managed Microsoft ADとの間で信頼関係を設定する方法がチュートリアルでまとまっていますので、そちらをご参照ください。
AWS Managed Microsoft ADを作成
DNS名はmsad.net
で作成しました。
AWS Managed Microsoft ADを作成すると、指定したサブネットからIPアドレスが割り当てられます。このIPアドレスは後で使うのでメモしておきます。
AWS Managed Microsoft ADがもつENIには、自動作成されるセキュリティグループが適用されます。インバウンドルールでは、任意のソース 0.0.0.0/0
から必要なポートへの通信が許可されていますので、オンプレミス環境にあるセルフマネージドADと信頼関係を設定する場合にもそのまま使えます。ちなみに、このENIにパブリックなIPアドレスは付与できないようです。
0.0.0.0/0 ルールでは、セキュリティ上の脆弱性は生じません。ドメインコントローラーへのトラフィックは、VPC からのトラフィック、他のピア接続された VPC からのトラフィック、または AWS Direct Connect、AWS Transit Gateway、Virtual Private Network を使用して接続したネットワークからのトラフィックに限定されるためです。セキュリティを強化するため、作成された ENI には Elastic IP がアタッチされず、これらの ENI に Elastic IP をアタッチするためのアクセス許可はユーザーに付与されません。 https://docs.aws.amazon.com/ja_jp/directoryservice/latest/admin-guide/ms_ad_getting_started_what_gets_created.html
逆にアウトバウンドルールは修正が必要です。
AWS Managed Microsoft AD用に自動作成されるセキュリティグループのアウトバウンドルールでは、ドメインコントローラ間の通信しか許可されていません。そのため、以下のようにアウトバウンドルールにセルフマネージドADのIPアドレスを追加しました。
自動作成されるセキュリティグループの内容については以下をご参照ください。
セルフマネージドAD側の設定
AWS Managed Microsoft ADからの通信許可設定
必要な通信許可設定は以下のとおりです。
プロトコル | ポート | 送信元 |
---|---|---|
TCP/UDP | 53 | AWS Managed Microsoft ADが属しているVPC の CIDR ブロック |
TCP/UDP | 88 | AWS Managed Microsoft ADが属しているVPC の CIDR ブロック |
TCP/UDP | 389 | AWS Managed Microsoft ADが属しているVPC の CIDR ブロック |
TCP | 445 | AWS Managed Microsoft ADが属しているVPC の CIDR ブロック |
再掲となりますが、公式ドキュメントに記載があります。
DNS 条件付きフォワーダーを設定
AWS Managed Microsoft AD側のリソースにアクセスできるよう、DNSマネージャーからフォワーダーを設定します。
さきほど確認したAWS Managed Microsoft ADのIPアドレスなどを入力して設定します。
信頼関係の設定
「Active Directory ドメインと信頼関係」から自身のドメインを右クリックしプロパティを選択します。
信頼タブから「新しい信頼」を選択します。
ウィザードに従い、設定していきます。
今回、信頼関係は一方向で設定しました。セルフマネージドAD側のユーザーがAWS Managed Microsoft AD側のリソース(RDS)へ接続できれば良く、逆方向は想定しないためです。
信頼パスワードを設定します。これは後のAWS Managed Microsoft AD側の作業で必要ですので忘れないにしましょう。
最後に信頼を確認するかどうか聞かれますが、「確認しない」を選択します。
AWS Managed Microsoft AD側で信頼関係を設定
最後にAWS Managed Microsoft AD側でも信頼関係を設定します。マネジメントコンソールから信頼関係を追加します。
設定が完了しました。
RDS用のセキュリティグループの作成
インバウンドルールでは、Amazon RDS for SQL Serverのデフォルトの1433番ポートだけでなく、SSRSのウェブポータルへアクセスするためのポート(デフォルトでは8443番)も許可しておきます。
プロトコル | ポート |
---|---|
TCP | 1433 |
TCP | 8443 |
オプショングループの作成
Amazon RDS for SQL ServerでSSRSを使用するための設定は、オプショングループで行います。
今回はStandard Editionで作成します。
次にSSRSを使用するため、オプションを追加します。作成したオプショングループから「オプションを追加」を選択します。
ポートはデフォルトで8443番が選択されています。任意のポート番号で利用可能ですが、443番は使用できない等の制限もあります。
デフォルトの SSL ポート (443) でリッスンするように SSRS を構成することはできません。指定できる値は、1234、1434、3260、3343、3389、47001 を除く、1150~49511 です。
最大メモリはSSRSが使用するメモリの上限です。デフォルトの45%のままとします。
セキュリティグループはさきほど作成したものを選択します。
パラメータグループの作成
パラメータグループの作成は必須ではありませんが、セキュリティ上の観点から、クライアントからRDSへの接続にSSL接続を強制する設定をします。
以下の公式ドキュメントにも記載がありますが、rds.force_ssl
パラメータを0から1に変更します。
RDS構築
今回はマネジメントコンソールから作成しました。
SSRSが使用できるエディションとバージョンを選択する点に注意してください。
また、今回はWindows認証を利用するので、設定を有効化します。
Windows認証を利用する場合はIAMロールに注意
RDSをマネジメントコンソールから作成する場合は気にしなくても良いのですが、AWS CLI等から構築する場合は、RDSがディレクトリに参加するためのIAMロールが必要です。
ステップ 2: Amazon RDS 用の IAM ロールを作成する
コンソールを使用して SQL Server DB インスタンスを作成する場合、このステップをスキップできます。SQL Server DB インスタンスの作成に CLI または RDS API を使用する場合、AmazonRDSDirectoryServiceAccess マネージド IAM ポリシーを使用する IAM ロールを作成する必要があります。
Amazon RDS for SQL Server DB インスタンスでの Windows 認証の使用 - Amazon Relational Database Service
私はマネジメントコンソールから作成したので、AWS管理ポリシーのAmazonRDSDirectoryServiceAccess
がアタッチされたIAMロールが作成されていました。
~$ aws rds describe-db-instances # 結果の抜粋 "DomainMemberships": [ { "Domain": "d-956776a7fa", "Status": "joined", "FQDN": "msad.net", "IAMRoleName": "rds-directoryservice-access-role" } ],
RDSに接続
Microsoft SQL Server Management Studio(SSMS)を使って接続します。
詳しい接続手順は以下の公式ドキュメントにありますので、ここでは割愛します。
まずはマスターユーザでログインする
いきなりWindows認証で接続したいのですが、セルフマネージドADのユーザーに対してアクセス許可を設定する必要があります。よって、最初はRDS構築時に作成したマスターユーザー名義で接続します。
Active Directory の SQL Server ログインを作成するには、ALTER ANY LOGIN 許可が必要です。このアクセス許可を持つログインをまだ作成していない場合は、SQL Server 認証を使用して DB インスタンスのマスターユーザーとして接続します。
Amazon RDS for SQL Server DB インスタンスでの Windows 認証の使用 - Amazon Relational Database Service
使用するDDLコマンドは上記の公式ドキュメントに記載があります。
USE [master] GO CREATE LOGIN [mydomain\myuser] FROM WINDOWS WITH DEFAULT_DATABASE = [master], DEFAULT_LANGUAGE = [us_english]; GO
セルフマネージドAD側のユーザーでRDSに接続する
これでセルフマネージドAD側のユーザーでRDSに接続できます。
認証方式でWindows authentication
を選択してください。
SSRSウェブポータルにアクセスする
SSRSウェブポータルを利用する手順も公式ドキュメントに詳しく載っています。リンクを再掲します。
以下の手順で設定します。
- Secure Sockets Layer (SSL) をオンにします。
- ドメインユーザーへのアクセス権を付与します。
- ブラウザとドメインユーザーの認証情報を使用してウェブポータルにアクセスします。
Secure Sockets Layer (SSL) をオンにします
クライアントに証明書をインポートする必要があります。
SSRS は、接続に HTTPS SSL プロトコルを使用します。このプロトコルを使用するには、クライアントコンピュータの Microsoft Windows オペレーティングシステムに SSL 証明書をインポートします。
詳しい手順が以下のドキュメントに記載されていますので、ここでは割愛します。今回はap-northeast-1-bundle.pem
を使用しました。
手順に沿って証明書がインポートされていることを確認します。ちなみにパラメータグループのrds.force_ssl
の設定だけでは、HTTPSではアクセスできませんでした。証明書のインポートが必要のようです。
SSRSの権限を付与する
権限を付与しないと、以下のように権限エラーが出てしまいます。
公式ドキュメントに記載のストアドプロシージャを利用して、権限を付与します。ドメインユーザーでは権限が足りずに実行できなかったので、こちらもマスターユーザーとして実行しました。
exec msdb.dbo.rds_msbi_task @task_type='SSRS_GRANT_PORTAL_PERMISSION', @ssrs_group_or_username=N'AD_domain\user';
SSRSを表示
上記の設定を行ったあと、SSRSのウェブポータルにアクセスすると以下のように無事表示されました。