使用AWS CLI v2 SSO在R中通过paws连接Athena遇令牌缺失错误
解决paws包访问Athena时的SSO Token不存在问题
核心问题原因
你遇到的Error loading SSO Token: Token for myprof does not exist错误,本质是本地没有缓存有效的AWS SSO登录令牌——aws configure sso仅完成了配置文件的创建,并未实际获取并缓存登录令牌,而paws依赖这个本地缓存的令牌完成身份验证。
分步解决方案
1. 通过AWS CLI完成SSO登录,生成令牌缓存
打开Windows命令提示符,执行以下命令完成SSO登录:
aws sso login --profile myprof
执行后浏览器会再次打开,完成身份验证后,AWS会将令牌缓存到%USERPROFILE%\.aws\sso\cache目录下的JSON文件中。
2. 验证CLI身份是否正常
先通过AWS CLI测试是否能正常访问Athena,确认令牌有效:
aws athena list-data-catalogs --profile myprof
如果能正常返回数据目录列表,说明令牌和权限没问题,再继续排查R端的问题。
3. 清理R中干扰SSO的环境变量
确保R环境中没有设置硬编码的AWS凭证(这些会覆盖SSO的身份验证流程):
# 检查是否存在硬编码凭证 Sys.getenv(c("AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY")) # 如果有值,清除这些环境变量 Sys.unsetenv("AWS_ACCESS_KEY_ID") Sys.unsetenv("AWS_SECRET_ACCESS_KEY")
4. 更新paws到最新版本
旧版本的paws可能对AWS SSO Session的支持存在缺陷,执行以下命令更新:
install.packages("paws")
5. 修正R代码的日志级别设置
你原代码中日志级别设置的位置错误,正确的写法是先全局设置日志级别,再创建Athena客户端:
library(paws) # 设置环境变量 Sys.setenv(AWS_PROFILE = 'myprof', AWS_REGION = 'us-east-2') # 全局设置paws日志级别 options(paws.log_level = 3L) # 创建Athena客户端并调用接口 svc <- athena() svc$list_data_catalogs()
额外排查点
- 确认
%USERPROFILE%\.aws\config文件中的配置无拼写错误:比如sso_session名称和[sso-session myprof]块的名称一致,sso_account_id、sso_role_name准确无误。 - 检查IAM角色权限:如果CLI执行
aws athena list-data-catalogs失败,确认AWSAdministratorAccess角色是否包含athena:ListDataCatalogs权限(管理员权限默认包含该权限)。
内容的提问来源于stack exchange,提问作者Drewby
相关产品推荐
相关产品推荐

