認証の準備 永続的なIAM資格情報、EC2インスタンスプロファイル、ロールを引き受けるためのEC2ロール、およびAWS資格情報ファイル認証タイプを設定して、Amazon Athenaにアクセスすることができます。
接続プロパティを設定する前に、最小限のAmazon S3ポリシー、AWS Glueデータカタログポリシー、およびAmazon Athenaポリシーを作成します。ポリシーでIAMユーザーまたはEC2ロールに必要な権限を定義します。
設定する認証タイプに基づいて、ポリシーをIAMユーザーまたはEC2ロールにアタッチします。
また、使用する認証タイプに基づいて、認証の詳細を手元に用意しておく必要があります。
• 永続的なIAM資格情報認証を使用するには、AWSコンソールでIAMユーザーを作成し、必要なポリシーをアタッチして、アクセスキーとシークレットキーを生成します。これらの詳細は、接続プロパティで使用できるように保管しておいてください。• EC2インスタンスプロファイル認証を使用するには、EC2インスタンスにSecure Agentをインストールし、EC2ロールをEC2インスタンスにアタッチします。• 別のIAMロールを引き受けるようにEC2ロールを設定するには、EC2インスタンスにSecure Agentをインストールし、EC2ロールをEC2インスタンスにアタッチして、EC2ロールがIAMロールARNで指定された別のIAMロールを引き受けられるようにします。• AWS資格情報ファイル認証を使用するには、JDBCのURLにプロファイル名を指定し、AWS資格情報ファイルがSecure Agentマシン上で利用可能であることを確認してください。Amazon S3ポリシーの作成 AWSコンソールでAmazon S3ポリシーを作成して、Amazon Athenaの結果をAmazon S3に保存するための権限を定義します。
Amazon Athenaの結果をAmazon S3に保存するには、次のような、必要な最小の権限を使用します。
• PutObject• GetObject• DeleteObject• ListBucket• GetBucketLocation• ListAllMyBuckets• GetBucketAcl次のサンプルAmazon S3ポリシーを使用できます。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:DeleteObject" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation", "s3:ListAllMyBuckets", "s3:GetBucketAcl" ], "Resource": [ "*" ] } ] }
AWS Glueデータカタログポリシーの作成 AWS IAMを使用して、AWS Glueが使用するリソースにアクセスするためのポリシーとロールを定義できます。
Amazon Athenaは、AWS Glue Data Catalogを使用して、AWSアカウントのAmazon S3データのテーブルメタデータを保存および取得します。
AWS Glue Data Catalogには次のサンプルポリシーを使用できます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:*", ], "Resource": [ "*" ] } ] }
Amazon Athenaポリシーの作成 AWS Glueデータカタログのビューと外部テーブルからデータを読み取り、Amazon S3ファイルを読み取ってクエリするためにAmazon Athenaコネクタに必要な最小の権限を指定します。
次のような、必要な最小の権限を使用できます。
• GetWorkGroup• GetTableMetadata• StartQueryExecution• GetQueryResultsStream• ListDatabases• GetQueryExecution• GetQueryResults• GetDatabase• ListTableMetadata• GetDataCatalog• CreatePreparedStatement• DeletePreparedStatementAmazon Athenaには次のサンプルポリシーを使用できます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:GetWorkGroup", "athena:GetTableMetadata", "athena:StartQueryExecution", "athena:GetQueryResultsStream", "athena:ListDatabases", "athena:GetQueryExecution", "athena:GetQueryResults", "athena:GetDatabase", "athena:ListTableMetadata", "athena:GetDataCatalog" "athena:CreatePreparedStatement", "athena:DeletePreparedStatement" ], "Resource": [ "arn:aws:athena:*:*:workgroup/*", "arn:aws:athena:*:*:datacatalog/*" ] }, { "Effect": "Allow", "Action": [ "athena:ListDataCatalogs", "athena:ListWorkGroups" ], "Resource": "*" } ] }
ロールを引き受けるためのEC2ロールの設定 EC2ロールを設定してIAMロールを引き受け、一時的なセキュリティ資格情報を生成して、同じAWSアカウントまたは異なるAWSアカウントのAmazon Athenaに接続することができます。
EC2ロールにより、永続的なアクセスキーとシークレットキーを必要とせずに、同じAWSアカウントまたは異なるAWSアカウントから別のIAMロールを引き受けることができます。
ロールを引き受けるようにEC2ロールを設定する場合は、一時的なセキュリティ資格情報を使用するためのsts:AssumeRole 権限が割り当てられており、AWSアカウント内で信頼関係が確立されていることを確認してください。信頼関係は、ロールを作成するときに、IAMロールの信頼ポリシーで定義されます。IAMロールにより、EC2ロールを信頼されたエンティティとして追加し、EC2ロールに一時的なセキュリティ資格情報の使用とAWSアカウントへのアクセスを許可します。
信頼されたEC2ロールが一時的なセキュリティ資格情報を要求すると、AWS Security Token Service(AWS STS)によって、指定した期間有効な一時的なセキュリティ資格情報が動的に生成され、信頼されたEC2ロールにその資格情報が提供されます。
ロールを引き受けるためのEC2ロール認証を使用する前に、次の前提条件を考慮してください。
• AWS EC2インスタンスにSecure Agentをインストールします。• AWS EC2インスタンスにアタッチされたEC2ロールにはAmazon Athenaへのアクセス権は必要ありませんが、別のIAMロールを引き受ける権限が割り当てられている必要があります。以下は、EC2ロールが別のIAMロールを引き受けることを許可する、EC2ロールにアタッチされた信頼ポリシーの例です。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::001234567890:role/aws_athena_assumeRole" } ] }
• EC2ロールが引き受ける必要のあるIAMロールには、Amazon Athenaにアクセスするための権限ポリシーと信頼ポリシーがアタッチされている必要があります。信頼ポリシーには、EC2ロールのARNが含まれている必要があります。
また、AWSアカウントの外部IDを指定して、Amazon Athenaへのより安全なアクセスを行うこともできます。外部IDは文字列である必要があります。
次のサンプルは、EC2ロールのARNと外部IDを使用した、引き受けたIAMロールの信頼ポリシーを示しています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::001234567890:root" //anyone in this account 001234567890 can assume this role, this can also be limited to one role. }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "athena_externalid" } } } ] }
注: Amazon Athena接続を設定するときは、EC2ロールが引き受けるIAMロールのARNを指定する必要があります。必要に応じて、Amazon Athenaへのより安全なアクセスのために外部IDを指定できます。
AWS資格情報ファイル認証 Amazon Athenaへのアクセスを認証するには、アクセスキーやシークレットキーなどのAWS資格情報を格納する認証情報ファイルを使用できます。
AWS資格情報ファイルについては、次のルールを考慮してください。
• AWS資格情報ファイルは、Secure Agentマシンのホームディレクトリ内の次のデフォルト場所で利用可能である必要があります。~/.aws/credentials
• AWS資格情報ファイルの保存場所を変更する場合は、AWS_SHARED_CREDENTIALS_FILE という環境変数を設定することでパスを変更できます。この変数はAWS資格情報ファイルの完全パスを指している必要があります。例: export AWS_SHARED_CREDENTIALS_FILE=/path/to/your/credentials
• AWS資格情報ファイルが構文的に正しいことを確認してください。構文エラーは接続障害の原因となる可能性があります。次の例は、AWS資格情報ファイルを示しています。
[default] aws_access_key_id = 1233333 aws_secret_access_key = abcabcabc [test-profile] aws_access_key_id = 1233333 aws_secret_access_key = abcabcabc
aws_access_key_id とaws_secret_access_key は、ユーザーを認証するための認証情報の一部として使用されるAWSアクセスキーとシークレットキーです。
• JDBCのURLでプロファイル名を指定することができます。プロファイル名を指定しない場合、AWS資格情報は資格情報ファイルのデフォルトプロファイルから使用されます。