Amazon Redshiftではじめるビッグデータ処理入門

第6回 Redshiftクラスタを運用してみよう

この記事を読むのに必要な時間:およそ 4 分

今回は,本連載の最後のトピックとして,Redshiftクラスタの運用に焦点を当て,アクセス管理,およびデータの管理と運用について説明します。これまでRedshiftクラスタの起動から拡張まで説明してきましたが,起動後も定期的にデータベースに対して必要なメンテナンス作業が存在し,高いクエリパフォーマンスを持続させるために,これらも押さえておくことは運用において非常に重要です。

なお,本連載のチュートリアルをご自身で試される場合には,Redshiftクラスタを起動し,Redshiftクラスタへ接続してSQLが実行可能である状態が必要です。これらの環境を構築するためには,この連載の第3回を参考にしてください。

アクセス権の管理

最初に,Redshiftクラスタのアクセス管理について説明します。

Redshiftでは,データベースやテーブル以外に,後述するスキーマという単位でテーブルのまとまりを管理する仕組みとなっており,ユーザやユーザをまとめたグループと呼ばれる単位で,これらリソースへのアクセスを管理することができます。

なお,Redshiftのデフォルトの挙動としては,管理者権限(superuser)を持つユーザを除き,データベース内のオブジェクト(テーブルなど)を作成したユーザがそのリソースの所有者(オーナー)となり,作成したオブジェクトに対して自由にアクセスすることができることになっています。実際の運用時には,リソースの作成後に権限を追加するなどし,管理する必要が出てくるでしょう。

なお,これまでの説明の通り,RedshiftはPostgreSQLをベースに作られているため,ユーザごとやグループごとによるアクセス管理についてはPostgreSQLとほぼ同じと思ってもらって構いません。

データベースの構造

まず,Redshiftクラスタで管理できるリソースについて確認しておきましょう。

図1 Redshiftクラスタ内部のリソースの構造

図1 Redshiftクラスタ内部のリソースの構造

Databases(データベース)
Redshiftクラスタは複数のデータベースを持つことができ,データベース同士は互いに直接的なつながりを持たず独立しており,この単位で統計データ等も保存されます。なお,1クラスタにつき最大64個ものデータベースの作成が可能です。
Schemas(スキーマ)
データベースには,複数のスキーマを定義することができ,それぞれのスキーマがテーブルを保持することになります。全てのデータベースにはデフォルトのスキーマとして"public"が定義されており,特に指定しない場合は,"public"のスキーマのテーブルに対して操作していることになります。

図1のように,Redshiftクラスタ内部にはデータベースオブジェクトが用意され,その中にスキーマ単位でテーブルをグループ分けして,アクセス管理を行うことになります。また,スキーマが違えば同じテーブル名を利用することができますので,たとえば開発者ごとにスキーマを付与することで,互いの開発者の利用による影響が無くして開発することができます。

ユーザとグループ

続いてユーザとグループについて説明します図2)⁠

図2 ユーザの種別

図2 ユーザの種別

Superusers(スーパーユーザ)
全てのデータベースに対してフルのアクセス権を持つ管理者用のユーザであり,Redshiftクラスタを起動するときに指定したマスターユーザもこのスーパーユーザになります。スーパーユーザは,別のスーパーユーザ,またアクセス権に制限のある一般ユーザを作成できます。スーパーユーザは,非常に強い権限を持つため,一般ユーザの作成や権限設定時など必要な場合を除き,このユーザによる作業は避けるべきでしょう。
Users(一般ユーザ)
一般ユーザは,スーパーユーザにより作成され,データベース,スキーマ,テーブルごとに権限を設定することが可能です。通常の運用時に考えられるアプリケーションからのアクセス,またオペレータによるアクセスなどは,一般ユーザを用いると良いでしょう。
Groups(グループ)
グループには,複数のユーザを所属させることができ,このグループに対して権限を設定することができます。たとえば,営業グループとサポートグループを作成し,それぞれの部署のユーザを追加して,部署(グループ)単位でアクセス権限を設定,管理することが可能となります。

なお,ユーザはデータベース接続時の認証で照合されますが,データベース単位にユーザの設定が保持されるのではなく,全てのデータベースに共通したグローバルな設定として保持されます。

ユーザとグループによるアクセス管理の例

それでは,実際にユーザとグループを作り,アクセス権を設定してみましょう。

例として,Webアプリケーションの開発を想定し,Webアプリケーションからの接続ユーザ用のグループ(webappusers)⁠管理者(webappadmins)の2つのグループを作成し,ユーザをそれぞれのグループに属するように作成します。アクセス対象のスキーマは,"webapp"とします。

グループを作成

create group webappusers;
create group webappadmins;

それぞれのグループごとにユーザを作成

-- Webアプリケーションからの接続グループ(webappusers)
create user webappuser1 password 'webAppuser1pass' in group webappusers;
create user webappuser2 password 'webAppuser2pass' in group webappusers;

-- 管理者用グループ(webappadmins)
create user webappadmin1 password 'webAppAdmin1pass' in group webappadmins;
create user webappadmin2 password 'webAppAdmin2pass' in group webappadmins;

スキーマを作成

create schema webapp;

グループごとにアクセス権を変更

-- webappusersにスキーマの参照権限を付与
grant usage on schema webapp to group webappusers;

-- webappadminsにスキーマの全権限を付与
grant all on schema webapp to group webappadmins;

各ユーザのスキーマの参照設定に,webapp, publicの両方を設定

alter user webappuser1 set search_path to webapp, public;
alter user webappuser2 set search_path to webapp, public;

alter user webappadmin1 set search_path to webapp, public;
alter user webappadmin2 set search_path to webapp, public;

これで,webappadminsグループのみスキーマの変更が可能となり,参照権限のみのwebappusersグループのユーザがテーブルを作成しようとした場合,以下のようにエラーとなります。

development=> create table users(id int, name varchar, email varchar);
ERROR:  permission denied for schema webapp

また,webappスキーマ内に作成したテーブルに対して,webappusersグループのユーザが操作できるようにするには,テーブルを作成したユーザが以下のようにGTRANTコマンドを実行して権限を与える必要があります。

-- webappusersグループに対してusersテーブルへの編集権限を付与
grant all on users to group webappusers;

このように,Redshiftではテーブルやユーザといった単位だけでなく,スキーマとグループを活用し,アクセス権を管理することが実際の運用として考えられるでしょう。

著者プロフィール

宮崎真(みやざきまさし)

HapyrusのソフトウェアエンジニアとしてAmazon Redshift向けプロダクトを開発中。

学生時代にIPA未踏ユースの経験を経て,卒業後ITコンサルティング会社に入社。この会社では基幹システムを対象としたミドルウェアの開発やiOSアプリ開発を経験。

その後米国グリーンカードの抽選に当選したのを機に,2012年にカリフォルニアベイエリアに移住しHapyrusに参画。

Twitter:@sockspaw


藤川幸一(ふじかわこういち)

学生時代からStartup (電脳隊・PIM)に関わり,PIMがYahoo! JAPANに買収された後は,エンジニアとしてYahoo!モバイルを開発。アジャイル開発コンサルやデリバティブ取引システムなどの開発経験を経て,シリウステクノロジーズでテクニカルマネージャ&夜はIPA未踏人材育成事業でHadoopのミドルウェア開発プロジェクト。日本JRubyユーザグループ発起人。

シリウスがYahoo! JAPANに買収されたのを機に,2010年FlyData Inc.(旧社名Hapyrus)をUSにて起業。カリフォルニアSunnyvale在住。

Twitter:@fujibee

コメント

コメントの記入