GROUPエンジニアブログです。redshift2015年02月20日15:00カテゴリDBAWSRedshiftの操作権限の設定とその方法こんにちは。システム本部の@yuu_itoです。弊社のメディアサービスのデータ分析の業務を行っています。昨今、世間ではセキュリティに関する問題が増加しています!情報セキュリティにおいて最小権限の原則という用語もあったりしますが、システムの利用者に本当に必要な権限のみを付与することで誤った操作を予防したり、外部からの侵入が起きてしまった場合にも損害を最小限にできるように設計することが大事です。Redshiftがあります。今回はRedshiftのデータベースアクセスコントロールの設定方法について調べてみました。データベースデータベースに対する権限設定コマンドはPostgreSQLや、MySQL同様GRANT、REVOKEコマンドが使えます。ALLは全権限、CREATEはスキーマ作成、TEMPORARYは一時表を作成する権限です。権限についてはスキーマ単位、テーブル単位で設定する必要があります。スキーマMySQLではスキーマとデータベースは同義である(*1)と思いますが、Redshift、PostgreSQLではデータベースの中にスキーマがあり、スキーマの中にテーブルを配置するイメージです。Redshiftのオブジェクト構成イメージスキーマの操作もGRANTコマンドを使います。PUBLICスキーマについてRedshiftは各データベースにデフォルトでPUBLICいう名のスキーマが存在し、全てのユーザ(全ユーザはPUBLICグループに所属している)にCREATE権限がついています。書込み権限が不要なユーザも存在すると思うので、REVOKEでCREATE権限を除いておくと良さそうです。テーブル、カラムテーブルについてもGRANTで個別に設定できます。DBやスキーマのレベルでのみ管理するルールにしておけば、テーブル単位での管理をする必要はなくなるのでDB管理者としては気にすることが減って良さそうです。カラム単位での操作制限はサポートされていなかったです。一部のカラム隠蔽したいのであれば、ビュー(View)を作成したり、COPYコマンドでカラムを絞ってロードすることもできます。SELECTを使ってテーブルコピーを作る方法があります。ビューの場合、テーブルコピーよりもコストが低い反面データベースをまたいだ作成ができないためテーブル、ビュー単位での管理が必要になります。逆にCTASであればデータベースをまたいで作成することができるので、DBやスキーマのみの管理で済みます。個人情報を除いたテーブルを権限を分けた別のデータベースやスキーマに作成すると良さそうです。ユーザの権限確認方法データベース、スキーマ、テーブル単位で権限をチェックする関数がありました。コマンド一発!一覧で確認するようなコマンドがあると期待していたのですが見つからず...http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_System_information_functions.htmlHAS_XX_PRIVILEGEを使って確認できました。試しに書いてみたクエリをgistに貼っておきます。まとめ簡単でしたが、Redshiftの操作権限の設定とその方法について調べてみました。今回はDBユーザのセキュリティのみに焦点をあてましたが、実際にはネットワーク構成やデータの元となる運用サービスのデータベースサーバなどの関連システムについても一緒に整理する必要があります。AWSサービスでのシステム構成設計についてはいろんな記事でまとめられているのでそちらを探してみてください。GROUPでは、一緒に働いてくださる仲間を募集しております。採用どんな会社か気になる方は、是非下記のサイトもご覧ください。