如何通过CLI v2 sso使用paws连接到AWS Athena in R?

hmmo2u0o  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(100)

我正在使用AWS CLI v2创建配置文件,并在我的计算机上通过sso登录AWS。然后我尝试使用paws包通过R访问存储在AWS Athena上的数据库中的数据。
我想我已经正确设置了配置文件,但是当我尝试在Athena中列出数据目录时,我得到一条错误消息:“加载SSO令牌时出错:myprof的令牌不存在”
在AWS CLI v2(在Windows上)中,我运行aws configure sso并按照AWS documentation on configuring SSO中所述设置配置文件。
在这样做之后,我的配置文件看起来像这样:

[profile myprof]
sso_session = myprof
sso_account_id = 123456789012
sso_role_name = AWSAdministratorAccess
region = us-east-2
output = json
[sso-session myprof]
sso_start_url = https://mycompany.awsapps.com/start#/
sso_region = us-east-2
sso_registration_scopes = sso:account:access

字符串
在这个过程中,我的Web浏览器打开,我确认命令行中显示的代码。
在R中,我有这样的代码,如使用AWS单点登录和connecting to Athena的paws文档中所述:

library(paws)
Sys.setenv(AWS_PROFILE = 'myprof',AWS_REGION = 'us-east-2')
svc = athena()
svc$list_data_catalogs(options("paws.log_level" = 3L))


当我运行它时,我得到这样的结果:

INFO [2023-11-10 08:20:45.468]: Unable to locate credentials file
Error: Error loading SSO Token: Token for myprof does not exist


根据我从paws文档中了解到的情况,如果我使用sso(不像this question),我不需要凭据文件。想知道是否有什么地方我做错了,或者是否有一个设置我需要检查才能使其工作?不确定问题是否在我正在做的事情中,或者与paws或IAM设置有关。

lmyy7pcs

lmyy7pcs1#

当使用SSO时,您需要使用aws登录来获取临时凭证。

aws sso login --profile myprof

字符串
注意:这与boto3的工作方式类似:How to use the AWS Python SDK while connecting via SSO credentials

library(paws)

client <- athena(config(credentials(profile = "myprof")))
client$list_data_catalogs()


注意:你不需要设置环境变量,因为你已经设置了你的.aws/config文件。你可以简单地在athena连接中设置配置文件。
或者,您可以使用构建在paws上的noctua来给予DBI接口。

library(DBI)
library(noctua)

con <- dbConnect(noctua::athena(), profile_name = "myprof", s3_staging_dir = "s3://mybucket/athena-query")

dbListTables(con)


我希望这能帮助

zzzyeukh

zzzyeukh2#

我发现问题出在我的系统环境设置上。
我使用traceback()函数查看Error: Error loading SSO Token: Token for myprof does not exist来自何处,然后发现它来自paws中的sso_credential_process函数。我能够找到该函数here的详细信息。
该函数引用了系统环境变量HOMEDRIVEHOMEPATH。我的设置不正确,无法将函数指向sso缓存,因此它无法找到凭据。一旦我使用Sys.setenv(HOMEDRIVE = 'C:',HOMEPATH = 'Users/MYPROF')更新了这些变量,一切都开始正常工作。

相关问题