CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData Amazon Athena Driver の「AWS(IAM) ロールとして認証」の使い方

f:id:sugimomoto:20210413105829p:plain

こんにちは。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とやり取りをして、結果を取得しているのかをざっと解説したいと思います。

ざっくりとしたやり取りを以下の図のようにまとめてみました。

f:id:sugimomoto:20210413105836p:plain

まず、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」を対象とします。

f:id:sugimomoto:20210413105842p:plain

また合わせて、集計結果の格納先となるS3バケットを用意しておきましょう。

f:id:sugimomoto:20210413105851p:plain

IAMユーザーの作成

まず、IAMの管理画面にアクセスし、AWSロールの付与対象となるユーザーを作成します。

f:id:sugimomoto:20210413105856p:plain

任意のユーザー名を指定し、「プログラムによるアクセス」としてユーザーを作成します。

f:id:sugimomoto:20210413105902p:plain

今回の手順では、アクセス許可はこの時点では構成せず、Roleを作成した後に行います。また、Amazon S3・Athenaに対するアクセス許可は後ほど構成するIAMロールに対して付与します。

f:id:sugimomoto:20210413105909p:plain

そのままユーザーの作成を行い

f:id:sugimomoto:20210413105916p:plain

作成完了後、アクセスキーIDとシークレットアクセスキー、そしてユーザーのID(以下の図では「220139336512」を控えておきます。)

f:id:sugimomoto:20210413105922p:plain

IAMロールの作成

続いてIAMロールを作成します。

f:id:sugimomoto:20210413105927p:plain

今回IAMロールは先程作成したIAMユーザーに対して付与するので、信頼されたエンティティの種類から「別のAWSアカウント」を選択し、先程作成したIAMユーザーのアカウントIDを指定します。

f:id:sugimomoto:20210413105933p:plain

そして、このロールに対してアクセス権限ポリシーを付与します。

今回はデフォルトで提供されているポリシーの「AmazonAthenaFullAccess」「AmazonS3FullAccess」を付与しました。

ここでちょっと注意したいのは、前述の通り CData DriverはAmazonS3のAPIに対してもアクセスを行うので、Amazon Athenaのアクセス権だけがあればいいというわけではないことです。

また、Amazon S3バケット・オブジェクトの読み取りだけが存在すればいいかといえばそうではありません。Athenaクエリの書き出しは、対象のIAMユーザーの権限を利用して行われるので、そういった操作権限も必要となります。

aws.amazon.com

f:id:sugimomoto:20210413105940p:plain

権限を付与した後、任意のロール名を入力して作成します。

f:id:sugimomoto:20210413105945p:plain

作成完了後、ロールARNを控えておきましょう。今回は「arn:aws:iam::220139336512:role/CDataAthenaDriverRole」というARNで作成されました。

f:id:sugimomoto:20210413105952p:plain

IAMユーザーにポリシーを追加

AMIロールの作成が完了しましたが、これだけではこのロールをユーザーが利用することはできません。

なぜならそのロールを利用するための権限をユーザーが持っていないためです。そこで対象のIAMユーザーの画面に戻って、ポリシーを追加します。(今回はインラインポリシーとして追加しました)

f:id:sugimomoto:20210413110015p:plain

必要な権限は「sts:AssumeRole」というアクションです。この対象リソースとして先程作成したAMIロールを指定して、ポリシーを作成します。

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect":"Allow",
        "Action":"sts:AssumeRole",
        "Resource":"arn:aws:iam::220139336512:role/CDataAthenaDriverRole"
    }
}

f:id:sugimomoto:20210413110024p:plain

これで、必要な準備がすべて整いました。

f:id:sugimomoto:20210413110031p:plain

CData Driverからアクセス

それでは構成した設定を元に、CData Driverからアクセスをしてみましょう。

今回はCData Excel Add-in for Amazon Athenaから試してみました。なお、ODBCJDBC Driverでも設定方法は同じです。

https://www.cdata.com/jp/drivers/athena/download/excel/

f:id:sugimomoto:20210413110041p:plain

Excel Add-in for Amazon Athenaをインストール後、Excelを立ち上げて、CDataタブにある「取得元:Amazon Athena」をクリックして接続設定を行います。

f:id:sugimomoto:20210413110047p:plain

予め設定したAMIロール・ユーザーの情報を元に、下記のように値を入力します。

プロパティ名 備考
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バケットを指定

f:id:sugimomoto:20210413110054p:plain

接続後対象のテーブルを選択して、

f:id:sugimomoto:20210413110059p:plain

クエリを実行することができます。

f:id:sugimomoto:20210413110105p:plain

無事データが取得できました。

f:id:sugimomoto:20210413110111p:plain

おわりに

慣れないとAMIロールとAMIユーザーのそれぞれの設定・原理の理解がちょっと大変ですね。

もし不明な点があれば、CData テクニカルサポートまでお気軽に問い合わせください。

https://www.cdata.com/jp/support/submit.aspx