无法从R语言访问AWS S3存储桶问题排查
解决R语言连接AWS S3时的InvalidAccessKeyId错误
从你给出的错误信息InvalidAccessKeyId和The AWS Access Key Id you provided does not exist in our records来看,核心问题是你提供的AWS访问密钥无效,以下是具体排查和解决步骤:
1. 检查密钥填写是否正确
你当前代码中的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY是空字符串,这是直接导致错误的原因。必须填入从AWS IAM控制台生成的有效密钥对。
2. 验证密钥的有效性
- 登录AWS IAM控制台,找到对应的IAM用户,确认该用户的Access Key状态为
Active(已删除或禁用的密钥会触发此错误)。 - 检查密钥是否复制正确:密钥区分大小写,注意不要多带空格、换行符或遗漏字符。
3. 确认用户权限配置
即使密钥有效,IAM用户也需要具备访问目标S3桶的权限:
- 至少需要
s3:ListBucket权限才能使用get_bucket获取桶内容。可以先给用户附加AmazonS3ReadOnlyAccess策略做测试,之后再根据需求配置最小权限策略。
4. 验证环境变量设置
- 用
Sys.getenv("AWS_ACCESS_KEY_ID")和Sys.getenv("AWS_SECRET_ACCESS_KEY")检查环境变量是否正确加载,确保变量名拼写无误(全大写,比如AWS_ACCESS_KEY_ID不能写错)。
修正后的示例代码
library(aws.s3) # 替换为你的有效AWS密钥 Sys.setenv( "AWS_ACCESS_KEY_ID" = "你的Access Key ID", "AWS_SECRET_ACCESS_KEY" = "你的Secret Access Key", "AWS_DEFAULT_REGION" = "us-west-2" ) bucket_name <- "datasci-intraday-shiny-app" bucket_contents <- get_bucket(bucket = bucket_name, region = "us-west-2") print(bucket_contents)
额外建议
如果你的代码运行在AWS EC2、ECS等服务上,更推荐使用IAM角色而非硬编码密钥——角色会自动注入权限,无需手动设置环境变量,安全性更高。
内容的提问来源于stack exchange,提问作者ATMA
相关产品推荐
相关产品推荐

