You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac下.NET6 C#远程Windows EC2实例从S3下载文件遇授权问题

解决Mac下.NET6远程连接Windows Server2012 EC2执行S3下载的权限与加密错误问题

问题场景

Mac环境下用.NET6编写C#程序,通过PowerShell远程连接AWS EC2(Windows Server2012,PowerShell5.x)执行aws s3 cp命令下载文件:

  • 开启NoEncryption = true时,触发Authorization failed错误
  • 移除该配置后,触发MI_RESULT_FAILED错误
  • 相同代码在局域网Windows10机器上可正常运行

解决方案

1. 配置EC2实例的WinRM HTTPS监听(解决MI_RESULT_FAILED)

Windows Server2012默认WinRM不允许无加密HTTP连接,且HTTPS监听未默认配置,需手动设置:

  • 以管理员身份登录EC2实例,打开PowerShell执行以下命令:
    # 生成自签名证书,替换为实例公网IP/域名
    $cert = New-SelfSignedCertificate -DnsName "your-ec2-public-ip" -CertStoreLocation "Cert:\LocalMachine\My"
    # 创建WinRM HTTPS监听
    winrm create winrm/config/Listener?Address=*+Transport=HTTPS "@{Hostname=`"your-ec2-public-ip`"; CertificateThumbprint=`"$($cert.Thumbprint)`"}"
    # 开放防火墙5986端口
    New-NetFirewallRule -Name "WinRM-HTTPS-In" -DisplayName "WinRM HTTPS" -Enabled True -Protocol TCP -LocalPort 5986 -Action Allow
    

2. 调整C#代码的WinRM连接参数

修改WSManConnectionInfo配置,改用HTTPS协议并适配自签名证书:

var connectionInfo = new WSManConnectionInfo
{
    ComputerName = host,
    Credential = credential,
    Scheme = WSManConnectionInfo.HttpsScheme,
    Port = 5986, // WinRM HTTPS默认端口
    AuthenticationMechanism = AuthenticationMechanism.Negotiate,
    // 跳过自签名证书的CA与CN校验(生产环境建议使用可信CA签发的证书)
    SkipCACheck = true,
    SkipCNCheck = true
};

3. 确保EC2实例的S3访问权限

  • 优先给EC2实例绑定带S3只读权限的IAM角色,这样aws s3 cp可直接通过实例角色认证,无需在实例内配置密钥,避免权限错误。
  • 若必须使用访问密钥,需在EC2实例上通过aws configure完成CLI配置,或在命令中显式指定:
    string s3DownloadCommand =
        $"aws s3 cp s3://{bucket}{s3path} {localPath} --access-key YOUR_ACCESS_KEY --secret-key YOUR_SECRET_KEY";
    

4. 验证远程用户权限

确保远程连接使用的用户(user参数)在EC2实例上具备:

  • 执行aws命令的权限
  • 写入目标路径localPath的权限
  • 建议使用管理员权限用户进行测试

验证

修改代码并完成EC2配置后,重新执行程序,即可正常远程连接并完成S3文件下载。

内容的提问来源于stack exchange,提问作者Vinay Pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:50:26