如何使用本地RSA私钥连接第三方托管的AWS S3 Bucket?
第三方托管S3 Bucket的安全访问解决方案
背景信息
- 第三方托管S3存储地址:
s3://base/my_bucket/ - 安全要求:需使用SSH密钥访问(公钥已上传至供应商平台,本地私钥路径:
~/.ssh/vendor_creds) - 已获取凭证:Access Key ID、Secret Key、S3访问URL
- 原正常执行的拷贝命令:
aws s3 cp s3://base/my_bucket/ /home/my_sername/temp/AWS/ --recursive
核心问题说明
AWS CLI本身不支持通过RSA私钥直接访问S3——S3原生依赖Access Key/Secret Key的签名验证机制,而非SSH密钥。供应商提到的SSH密钥要求,大概率是用于SFTP/SCP协议访问该S3兼容存储,或是他们额外添加的身份验证层。
解决方案1:配置AWS CLI适配S3兼容端点
如果供应商提供的S3访问URL是标准S3兼容端点,按以下步骤配置:
创建专属配置文件(避免干扰默认AWS配置):
aws configure --profile vendor-s3按照提示依次输入:
- Access Key ID:供应商提供的ID
- Secret Access Key:供应商提供的密钥
- Default region name:无特殊要求可填
us-east-1 - Default output format:可选
json或直接回车留空
添加自定义端点配置:
编辑~/.aws/config文件,找到[profile vendor-s3]区块,追加以下内容:s3 = endpoint_url = 供应商提供的S3访问URL signature_version = s3v4使用新配置执行拷贝命令:
aws s3 cp s3://base/my_bucket/ /home/my_sername/temp/AWS/ --recursive --profile vendor-s3
解决方案2:通过SFTP协议配合私钥访问
如果供应商要求的是SFTP通道访问,可使用命令行工具或Cyberduck:
命令行手动下载:
sftp -i ~/.ssh/vendor_creds 你的用户名@供应商SFTP地址(用户名需向供应商确认,通常是Access Key ID或专属账号名)
进入SFTP会话后,执行递归下载:get -r base/my_bucket/* /home/my_sername/temp/AWS/自动化替代手动操作:
可以编写脚本结合lftp或psftp实现定时自动下载,无需每日手动打开Cyberduck。
注意事项
建议先向供应商确认具体的访问协议:是S3兼容协议还是SFTP协议,这会直接决定采用哪种方案。如果是混合验证(既需要Access Key又需要SSH密钥),可能需要通过供应商提供的专属工具或代理访问。
内容的提问来源于stack exchange,提问作者jason m
相关产品推荐
相关产品推荐

