こんにちは。CData Software Japanリードエンジニアの杉本です。
今回は CData Amazon Athena Driver の主要な接続方法の一つである「AWS IAM ロール」を使った方法を紹介したいと思います。
www.cdata.com
Amazon Athena Driverがサポートしている接続方法
今回の記事では「AWS IAMロール」での接続方法を紹介するのですが、Athena Driverは他にも様々な接続方法をサポートしています。
- Root 資格情報による認証:AwsRootKeys
- 一時的認証情報による認証:TemporaryCredentials
- EC2 インスタンスからの認証:AwsEC2Roles
- AWS(IAM) ロールとして認証:AwsIAMRoles
- SSO 認証:AwsOKTA・AwsADFS
- MFA 認証:AwsMFA
- クレデンシャルファイルによる認証:AwsCredentialsFile
詳しくは以下のヘルプでもそれぞれ解説しているので、参照してみてください。
cdn.cdata.com
手段として一番手軽なのは、Root 資格情報による認証ですが、権限が強すぎるため基本的には推奨されません。
そこで今回はRoot 資格情報による認証よりもアクセスコントロールを行いやすいAWS(IAM)ロールとして認証:AwsIAMRolesの使い方を紹介します。
CData Athena Driver の動作イメージ
さて、AWS ロールとしての認証方法を解説する前に、CData Athena Driver がどんなAPIとやり取りをして、結果を取得しているのかをざっと解説したいと思います。
ざっくりとしたやり取りを以下の図のようにまとめてみました。
まず、CData Athena DriverはクライアントからSQLを受け取ると、そのクエリをAmazon Athena Driverに対していリクエストします。
Amazon Athenaは対象データとなるS3のデータを集計処理し、結果を別なS3のバケットに書き出します。
そして、その書き出したS3のパスをCData Driverにレスポンスし、CData Driverは最終的な結果をそのバケットから取得することによって、クライアントへ返却しています。
このように、Amazon Athena DriverはAthenaとだけ連携しているわけではなく、最終的な結果を取得するためにAmazon S3 APIへのアクセスも行います。
これを踏まえて、AWS ロールの定義が必要です。
手順
それでは、AWSロールを構成し、CData Athena Driverでアクセスを行ってみましょう。
事前準備
事前準備としてAmazon Athenaが利用出来る状態を整えておきましょう。
今回はSampleDBとして提供されている「elb_logs」を対象とします。
また合わせて、集計結果の格納先となるS3バケットを用意しておきましょう。
IAMユーザーの作成
まず、IAMの管理画面にアクセスし、AWSロールの付与対象となるユーザーを作成します。
任意のユーザー名を指定し、「プログラムによるアクセス」としてユーザーを作成します。
今回の手順では、アクセス許可はこの時点では構成せず、Roleを作成した後に行います。また、Amazon S3・Athenaに対するアクセス許可は後ほど構成するIAMロールに対して付与します。
そのままユーザーの作成を行い
作成完了後、アクセスキーIDとシークレットアクセスキー、そしてユーザーのID(以下の図では「220139336512」を控えておきます。)
IAMロールの作成
続いてIAMロールを作成します。
今回IAMロールは先程作成したIAMユーザーに対して付与するので、信頼されたエンティティの種類から「別のAWSアカウント」を選択し、先程作成したIAMユーザーのアカウントIDを指定します。
そして、このロールに対してアクセス権限ポリシーを付与します。
今回はデフォルトで提供されているポリシーの「AmazonAthenaFullAccess」「AmazonS3FullAccess」を付与しました。
ここでちょっと注意したいのは、前述の通り CData DriverはAmazonS3のAPIに対してもアクセスを行うので、Amazon Athenaのアクセス権だけがあればいいというわけではないことです。
また、Amazon S3のバケット・オブジェクトの読み取りだけが存在すればいいかといえばそうではありません。Athenaクエリの書き出しは、対象のIAMユーザーの権限を利用して行われるので、そういった操作権限も必要となります。
aws.amazon.com
権限を付与した後、任意のロール名を入力して作成します。
作成完了後、ロールARNを控えておきましょう。今回は「arn:aws:iam::220139336512:role/CDataAthenaDriverRole」というARNで作成されました。
IAMユーザーにポリシーを追加
IAMロールの作成が完了しましたが、これだけではこのロールをユーザーが利用することはできません。
なぜならそのロールを利用するための権限をユーザーが持っていないためです。そこで対象のIAMユーザーの画面に戻って、ポリシーを追加します。(今回はインラインポリシーとして追加しました)
必要な権限は「sts:AssumeRole」というアクションです。この対象リソースとして先程作成したIAMロールを指定して、ポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": {
"Effect":"Allow",
"Action":"sts:AssumeRole",
"Resource":"arn:aws:iam::220139336512:role/CDataAthenaDriverRole"
}
}
これで、必要な準備がすべて整いました。
CData Driverからアクセス
それでは構成した設定を元に、CData Driverからアクセスをしてみましょう。
今回はCData Excel Add-in for Amazon Athenaから試してみました。なお、ODBC や JDBC Driverでも設定方法は同じです。
https://www.cdata.com/jp/drivers/athena/download/excel/
Excel Add-in for Amazon Athenaをインストール後、Excelを立ち上げて、CDataタブにある「取得元:Amazon Athena」をクリックして接続設定を行います。
予め設定したIAMロール・ユーザーの情報を元に、下記のように値を入力します。
プロパティ名 |
値 |
備考 |
Auth Scheme |
AwsIAMRoles |
|
AWS Access Key |
例)AKIATGQKTWNACHQAMZF6 |
作成したIAMユーザーのアクセスキーを指定 |
AWS Secret Key |
例)l33Ygzol2YCUJuZL/1p32OkfSGe7UTNUczA/wMRS |
作成したIAMユーザーのシークレットキーを指定 |
AWS Role ARN |
例)arn:aws:iam::220139336512:role/CDataAthenaDriverRole |
作成したIAM RoleのARNを指定 |
AWS Region |
例)NORTHERNVIRGINIA |
|
Database |
例)sampledb |
対象のAthenaのDBを指定 |
S3 Staging Directory |
例)s3://buketname |
対象のS3バケットを指定 |
接続後対象のテーブルを選択して、
クエリを実行することができます。
無事データが取得できました。
おわりに
慣れないとIAMロールとIAMユーザーのそれぞれの設定・原理の理解がちょっと大変ですね。
もし不明な点があれば、CData テクニカルサポートまでお気軽に問い合わせください。
https://www.cdata.com/jp/support/submit.aspx
関連コンテンツ