Atehna JDBC ドライバで Credential を明示的に指定せずに Athena にアクセスする

少し前まで対応していなかったのか、JDBC ドライバで Athena にアクセスする際に Credential を明示的に渡さず、EC2 インスタンスなどに付与されているロールの権限でアクセスする方法が探しても見つからなかったのですが、(いつからかはわかりませんが) 今はできるようになっていました。
これで Credential の管理を気にせずに Athena JDBC ドライバが使えます。

How to configure

aws_credentials_provider_class に com.amazonaws.athena.jdbc.shaded.com.amazonaws.auth.DefaultAWSCredentialsProviderChain を指定する。これだけです。
EC2 でも Lambda でもこれで OK。

How it works

JavaDoc によると、DefaultAWSCredentialsProviderChain クラスは

  • 環境変数
  • Java のシステムプロパティ
  • ~/.aws/credentials
  • ECS、EC2 のインスタンスメタデータ

を探してアクセスキー ID、シークレットアクセスキーを取得するように動作します。AWS CLI の Credential を探す動作と似てますね (boto3 っぽい感じ)。

このクラスを使うと、特にプロパティファイルや ~/.aws/credentials で認証情報を指定していない場合、EC2 の場合はインスタンスメタデータから、Lambda の場合は環境変数からアクセスキー ID、シークレットアクセスキーを取得し、EC2 インスタンスや Lambda についているロールの権限で Athena にアクセスできるようになります。

ちなみにこの DefaultAWSCredentialsProviderChain を使った方法、今の所は AWS Developer Guide では Undocumented の模様。Athena JDBC ドライバのドキュメントには InstanceProfileCredentialsProvider を使った方法は書いてありますが、このクラスはあくまで EC2 インスタンス用 (インスタンスメタデータから取得できる場合のみ使える方法) なので、Lambda では使えないです (Lambda 関数内からインスタンスメタデータを取れないので)。DefaultAWSCredentialsProviderChain の方が何も考えずに色々な環境で使えるので、こっちを使っておいた方がよさそう。

Comments

Popular posts from this blog

TFS: 別PCでのチェックアウトを取り消す

WPF の RichTextBox に文字列を設定する&取り出す

WPFアプリにアニメーションGIFを表示させる