-
Notifications
You must be signed in to change notification settings - Fork 12
Open
Description
I am trying now for hours to access my Athena database (which works charmingly via PyAthena in Python).
My setup looks as follows:
- I use
AWR.Athenaversion2.0.7.0 - I use a user profile in ~/.aws/credentials
- I use a role defined in IAM. This role has full Athena access
- I use the R package aws.iam to set up a session for the user with the role. As the user needs an MFA, i provde the MFA device ARN together with the code
- I setup an environment Variable AWS_SESSION_TOKEN to hold the session token I got.
- I call then dbConnect with the Athena driver and get the following error message:
Error in .jcall(drv@jdrv, "Ljava/sql/Connection;", "connect", as.character(url)[1], : java.sql.SQLException: [Simba][AthenaJDBC](100071) An error has been thrown from the AWS Athena client. The security token included in the request is invalid [Execution ID not available]
Here is my code:
library( DBI )
library( AWR.Athena )
library( aws.iam )
aws.signature::use_credentials( profile = 'research' )
session = get_session_token( id = 'arn:aws:iam::<YourAccountNumber>:mfa/<YourIAMUserName>',
code = 258028,
role = 'arn:aws:iam::<YourAccountNumber>:role/<YourRoleName>',
duration = 3600 )
Sys.setenv( AWS_SESSION_TOKEN = session$SessionToken )
con <- dbConnect( AWR.Athena::Athena(),
region = 'eu-central-1',
S3OutputLocation = 's3://your-output-location/',
Schema = 'default',
Workgroup = '<YourWorkGroup>' )
# Query a list of all tables.
dbListTables( con )
I also tried the dbConnect() command with aws_credentials_provider_class = "com.amazonaws.athena.jdbc.shaded.com.amazonaws.auth.EnvironmentVariableCredentialsProvider", but I had no success, either.
I think this is an important topic as secure access to Athena from R will be needed as soon as a production setting is considered.
For reference: In Python I use the following to set up a connection with Role and MFA using a profile:
conn = connect( s3_staging_dir = 's3://your-output-location/',
region_name = 'eu-central-1',
work_group = '<YourWorkGroup>',
profile_name = '<YourProfileName>' )
Does anyone has an idea on this? Very appreciated :)
Metadata
Metadata
Assignees
Labels
No labels