Insight Database Testing で AssumeRole を使用して、他の AWS アカウントの Aurora から評価 SQL セットを作成する

こんにちは。インサイトテクノロジーの松尾です!

11月となり、雪虫がだいぶ増えてきました!そろそろ降りますね♪

さて、本ブログでは Insight Database Testing で AssumeRole を使用して、他の AWS アカウントの Aurora から評価 SQL セットを作成する方法を紹介します。

Insight Database Testing 3.3 では Aurora クラスターの情報を入力することで、そこに蓄積されたログから評価 SQL セットを作成する機能が実装されましたが、基本は IDT Manager と同じ AWS アカウント内の Aurora クラスターや RDS インスタンスが対象となっています。

本ブログでは、IDT Manager と同じアカウント内の Aurora クラスターではなく、別アカウントにある Aurora クラスターから評価 SQL セットを作成する方法を紹介します。Aurora PostgreSQL を例に紹介しますが、Aurora MySQL、RDS for PostgreSQL そして RDS for MySQL でも同様に設定可能です。

そもそも EC2 で IDT Manager を起動しない場合は、必要なIAM設定について – Insight Database Testing マニュアル に記載している、アクセスキーを使用する方法を参考にしてください。

設定の手順

仕組みとしては AWS で別アカウントへ権限を委譲する仕組みである AssumeRole を使用します。
設定の手順は以下の通りです。

なお、以降、わかりやすいよう、Aurora PostgreSQL があるアカウントを 0000-0000-0000、IDT Manager があるアカウントを 9999-9999-9999 とします。

  • Aurora PostgreSQL のアカウント(0000-0000-0000)で SQL ログを出力する設定
  • Aurora PostgreSQL のアカウント(0000-0000-0000)でログを取得するポリシーの作成
  • Aurora PostgreSQL のアカウント(0000-0000-0000)で別アカウントに対する IAM ロールを作成
  • IDT Manager のアカウント(9999-9999-9999)で別アカウントの操作をするためのポリシーを作成
  • IDT Manager のアカウント(9999-9999-9999)で IDT Manager の EC2 に付与する IAM ロールの作成とアタッチ
  • IDT Manager で別アカウント(0000-0000-0000)にアクセスする情報を設定
  • IDT Manager から別アカウント(0000-0000-0000)にある Aurora PostgreSQL へ接続して評価 SQL セットを作成

Aurora PostgreSQL のアカウント(0000-0000-0000)で SQL ログを出力する設定

まず Aurora PostgreSQL で SQL ログを出力する設定を行います。Aurora PostgreSQL のクラスターパラメータグループで以下の設定を行い、対象の Aurora PostgreSQL へアタッチします。

  • log_statementALLに設定します。
  • log_rotation_age10に設定します。
  • log_connections をon(1)に設定します。
  • log_disconnections をon(1)に設定します。
  • log_filenamepostgresql.log.%Y-%m-%d-%H%M(通常はログファイルが肥大化しないよう分単位(%M)を指定してください。)
  • 参考

Aurora PostgreSQL のアカウント(0000-0000-0000)でログを取得するポリシーの作成

次に、Aurora PostgreSQL のログにアクセスするためのポリシーを作成します。
以下のように、クラスター情報、インスタンス情報を取得するポリシーと、ログファイルに関する関するポリシーを設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "rds:DownloadDBLogFilePortion",
                "rds:DescribeDBInstances",
                "rds:DownloadCompleteDBLogFile",
                "rds:DescribeDBLogFiles",
                "rds:DescribeDBClusters"
            ],
            "Resource": [
                "arn:aws:rds:ap-northeast-1:000000000000:cluster:*",
                "arn:aws:rds:ap-northeast-1:000000000000:db:*"
            ]
        }
    ]
}

Aurora PostgreSQL のアカウント(0000-0000-0000)で別アカウントに対する IAM ロールを作成

次に、このポリシーを別アカウントに設定します。

  • ロール作成時に「信頼されたエンティティ」で「AWS アカウント」を選択し、「別の AWS アカウント」を選択した上で、IDT Manager が属するアカウント「999999999999」を指定します。
  • 前述の手順で作成したポリシーをアタッチし、ロールを作成します。
  • 作成したロールのARN(arn:aws:iam::000000000000:role/XXXXXXXXXXXXXXX)を控えておきます。XXXXXXXXXXXXXXX には作成したロールの名前が入ります。

IDT Manager のアカウント(9999-9999-9999)で別アカウントの操作をするためのポリシーを作成

今度は、IDT Managerのあるアカウントで、別アカウントを引き受けるためのポリシーを作成します。
以下のように、前述の手順で作成したロールのARNを設定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::000000000000:role/XXXXXXXXXXXXXXX"
        }
    ]
}

IDT Manager のアカウント(9999-9999-9999)で IDT Manager の EC2 に付与する IAM ロールの作成とアタッチ

作成したポリシーを EC2 へ設定するロールに付与します。

  • ロール作成時に「信頼されたエンティティ」で「AWS のサービス」を選択し、「EC2」を選択してロールを作成します。
  • IDT Manager の EC2 起動時、または起動後に、作成したロールをアタッチします。

IDT Manager で別アカウント(0000-0000-0000)にアクセスする情報を設定

次にロールを設定した EC2 で、IDT Manager 側で AssumeRole を使用する設定をします。

  • IDT Manager に ec2-user で ssh で接続します。
  • insight ユーザーに変更します。
$ sudo su - insight
  • /home/insight/.aws/credentials ファイルを以下の内容に追加または編集します。以下は /home/insight/.aws/credentials ファイルの内容を cat コマンドで表示した結果です。role_arn にはアカウント 000000000000 で作成したロールの ARN を設定します。
$ cat ~/.aws/credentials
[default]
credential_source=Ec2InstanceMetadata
role_arn=arn:aws:iam::000000000000:role/XXXXXXXXXXXXXXX

credential_source=Ec2InstanceMetadata role_arn=arn:aws:iam::000000000000:role/XXXXXXXXXXXXXXX

  • なお、アウトバウンドの通信を制限している環境で PrivateLink で VPC エンドポイントを指定している場合には、以下のように sts_regional_endpoints=regionalregion を記述します。region には使用しているリージョンを設定します。
$ cat ~/.aws/credentials
[default]
credential_source=Ec2InstanceMetadata
role_arn=arn:aws:iam::000000000000:role/XXXXXXXXXXXXXXX
sts_regional_endpoints=regional
region=ap-northeast-1

IDT Manager から別アカウント(0000-0000-0000)にある Aurora PostgreSQL へ接続して評価 SQL セットを作成

ここまでで、必要な設定が終了しました。あとは、通常の評価 SQL セット作成の手順で、別アカウント(000000000000)にある Aurora のクラスター ID を指定してあげれば OK です。

  • 評価 SQL セットの新規作成を以下の画面から行います。
  • 実行すると、SQL 取り込まれることが確認できます。

Insight Database Testing 3.3 では Aurora クラスターの情報を入力することで、そこに蓄積されたログから評価 SQL セットを作成する機能が実装されましたが、基本は IDT Manager と同じ AWS アカウント内の Aurora クラスターや RDS インスタンスが対象となっています。セキュリティやその他の制約などにより、Aurora クラスターと同じアカウントに IDT Manager を構築できない場合に、本ブログで紹介した設定を行うことで、他のアカウントにある Aurora クラスターから SQL を取得することが可能となります。ぜひご活用ください。

おわりに

本ブログでは Insight Database Testing で AssumeRole を使用して、他の AWS アカウントの Aurora から評価 SQL セットを作成する方法を紹介しました。

Insight Database Testing をまだご利用いただいていない方で実際に試されたい場合は、製品の説明やデモ、トライアルなどについて
Insight Database Testingに関するお問い合わせ よりお問い合わせいただければと思います。

次回もどうぞお楽しみに!

関連最新記事

TOP インサイトブログ Insight Database Testing Insight Database Testing で AssumeRole を使用して、他の AWS アカウントの Aurora から評価 SQL セットを作成する

Recruit 採用情報

Contact お問い合わせ

  購入済みの製品サポートはこちら