AWS Athenaにできるだけ少ない権限でアクセスする。

AWS Athenaを触る時に必要な権限を確認し、余分な権限をつけずに実行するのが目的。

概要

AWS Athenaとは

Amazon Athena はインタラクティブなクエリサービスで、Amazon S3 内のデータを標準 SQL を使用して簡単に分析できるようになります。Athena はサーバーレスなので、インフラストラクチャの管理は不要です。実行したクエリに対してのみ料金が発生します。

AWS Athenaは標準でAWS Glueと統合されています。

この意味するところはS3をデータソースとしてAWS Athenaで CREATE DATABASE すると、AWS GlueカタログとしてDBが出来上がるということです。

つまり、Athenaを利用する時にはGlueの権限も必要ということです。

また、先にデータソースとしてS3を利用すると書きました。これはつまり、データソースであるS3へアクセスできる必要があるということです。

最後に、Athenaでのクエリ結果はまたS3に保存されます。ですので保存先S3へのアクセス権も必要です。

必要な権限

Athena

  • action: "athena:*"
  • resource: "*"

Glue

default database
  • action: "glue:GetDatabase"
  • action: "glue:Catalog"
  • resource: "arn:aws:glue:::database/default
target database
  • action: "glue:*"
  • resource: "arn:aws:glue:::database/
  • resource: "arn:aws:glue:::table//*

S3

source
  • action: "s3:ListBucket"
  • action: "s3:GetObject"
  • action: "s3:GetObjectLocation"
  • resouce: "arn:aws:s3:::<source_bucket>"
  • resouce: "arn:aws:s3:::<source_bucket>/*"
destination
  • action: "s3:PutObject"
  • action: "s3:ListMultipartUploadParts"
  • action: "s3:ListBucketMultipartUploads"
  • action: "s3:ListBucket"
  • action: "s3:GetObject"
  • action: "s3:GetBucketLocation"
  • action: "s3:CreateBucket"
  • action: "s3:AbortMultipartUpload"
  • resouce: "arn:aws:s3:::<dest_bucket>"
  • resouce: "arn:aws:s3:::<dest_bucket>/*"

おわりに

Glueは default データベースに対して、Catalog、GetDatabaseあたりがないと動かないのが謎いです。