0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ロール・権限】RedshiftでScheduled Queryを実行できるようにしてみる

Last updated at Posted at 2025-09-13

概要

Amazon Redshiftには、クエリやSQLをスケジュール実行できる機能があります。
その際に必要となるIAMロールや権限周りについて、AWS初心者の私にとって学びが多かったのでまとめてみました。

同じ初心者の方の参考になればと思います!

前提知識

  • Redshift:AWSが提供するデータウェアハウスサービス
  • ロール:権限のかたまり。ユーザーやサービスに付与する
  • ポリシー:どのリソースに対して、どんな操作ができるを定義。ロールに付与する

ロールはポリシーの集合。ポリシーは実際にユーザ、サービスが何をできるのか指定するもの、
と理解してます!

Redshiftのスケジュール機能とは?

  • クエリを定期的に実行するための機能
  • 今回はコンソールで設定する場合を想定
  • 実行時には「どのロールで実行するか」を指定する必要がある

背景

スケジュール実行の機能を実行しようしたところ権限不足のエラーが出てしまいました。
FullAccess権限を与えるのはセキュリティ的によくないので、必要なポリシーに絞ってロールに付与することにしました。

必要な権限

1. スケジュール実行用のIAMロールに付与するポリシー

  • ロールに対して以下の許可ポリシーを付与

    • Redshiftで保存済みのクエリの一覧を取得できるようにする
    • スケジュールクエリでは、「QS2-」で始まる EventBridge のルールを作成するので、
      「QS2-」で始まるリソースにだけ限定して、それ以外のリソースに影響が出ないようにする
    • Redshiftが指定のIAMロールを使って実行できるように許可する
  • ロールに対して以下の信頼ポリシーを付与

    • スケジュールクエリの削除は、スケジュールクエリを実行するための IAM ロールへ Assume Role できるように設定する

許可ポリシー、信頼ポリシーについては以下を参考にしてみてください
ロール、ポリシーについても書いてあります!
【PART11 IAMロール】ぜんぜんわからなかったIAMについてまとめてみました

自分でもまとめました

  • 許可ポリシー:「このロール/ユーザーは何ができるか?」を定義
  • 信頼ポリシー:「誰がこのロールを引き受けられるか?」を定義

あとAssume Roleは、このあとの実装例でPass Roleというのが出てきます。
先ほどの参考資料にも書いてありますが、例によって自分でまとめました

  • PassRole:サービスに対して、指定のIAMロールを使わせること
  • Assume Role:別のIAMロールに切り替えて、そのロールの権限で直接操作する」こと

スケジュール実行というよくある機能ですが、このあたりの権限は理解しずらいですね、、、
このあたりについては後述の具体例でまた説明します!

2. Redshift内の権限

  • クエリを実行するユーザーに対して以下が必要

    • CREATE SCHEDULE 権限
    • 対象スキーマやテーブルへの SELECT / INSERT / UPDATE 権限

実際の設定例

「2.Redshiftの権限」について別の機会でまとめるとして、
今回は「1. スケジュール実行用のIAMロール」の実装例について説明します

スケジュール実行用のIAMロール:redshift-sche-role

  • 許可ポリシー

redshift-sche-roleはどのような権限を持つか、以下のポリシーで定義されています

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListSavedQuery",
            "Effect": "Allow",
            "Action": "redshift:ListSavedQueries",
            "Resource": "*"
        },
        {
            "Sid": "EventBridge",
            "Effect": "Allow",
            "Action": [
                "events:PutRule",
                "events:PutTargets",
                "events:RemoveTargets",
                "events:DeleteRule",
                "events:DescribeRule",
                "events:Describe*",
                "events:DisableRule",
                "events:EnableRule"
            ],
            "Resource": "arn:aws:events:ap-northeast-1:[アカウントID]:rule/QS2-*"
        },
        {
            "Sid": "PassRole",
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::[アカウントID]:role/redshift-sche-role"
        }
    ]
} 
  • 信頼ポリシー
    redshift-sche-roleロールをどのIAMユーザ/ユーザが引き受けられるか以下に定義されています
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "events.amazonaws.com",
                    "redshift.amazonaws.com",
                    "redshift-serverless.amazonaws.com"
                ],
                "AWS": [
                    "[IAMユーザ/ユーザのarn]"
                ]
            },
            "Action": [
                "sts:AssumeRole",
                "sts:SetContext"
            ]
        }
    ]
}

そもそもなぜ信頼ポリシーが必要かというと、スケジュールの削除には実行用のロールをユーザにAssumeする必要があるからです。
今回で言うとredshift-sche-roleをアカウントにログインしているIAMユーザ/ユーザにAssumeできる権限が必要です。

また、許可ポリシーのPassRoleはRedshiftがredshift-sche-roleを使ってスケジュールの作成等をするのに必要です。

ややこしい、、、

まとめ

  • Redshiftのスケジュール機能は便利だが、IAMロール + DB権限 両方の設定が必要
  • 実行時の「ロールの指定」を忘れると動かない
  • 権限を最小限に絞ることでセキュリティを担保できる

ロールとポリシーについては何となく理解していましたが、AWS独自の権限について学べるいい機会でした!

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?