在开始之前,我已经阅读了与此问题相关的SO post。但是该帖子中的SDK版本已经过时了。 根据{{3}},可以使用新版本3,每个服务都有单独的包。
AWS SDK for .NET的新版本3使用单独的包 每项服务。例如,Amazon S3位于AWSSDK.S3包中, Amazon SQS在AWSSDK.SQS和Amazon DynamnoDB中 AWSSDK.DynamoDBv2。
所以我从nuget安装了AWSSDK.S3
个软件包,它还安装了依赖项AWSSDK.Core
。
我正在使用的存储桶是使用IP限制的,所以我执行代码的机器可以完全访问存储桶。
以下是我将文件上传到S3的代码。但是,当我使用AmazonS3Client
new AmazonS3Client(RegionEndpoint.USWest2);
的新实例时,我会遇到异常
再次注意到我在上传文件时创建实例时遇到异常。
var s3Client = new AmazonS3Client(RegionEndpoint.USWest2); //exception at this line
var bucketName = "mybucketname";
PutObjectRequest putRequest1 = new PutObjectRequest
{
BucketName = bucketName,
Key = "MyKey/test1.pdf",
FilePath = filePath
};
PutObjectResponse response1 = s3Client.PutObject(putRequest1);
然而我得到例外
[15:57:43 ERR]未处理的异常 Amazon.Runtime.AmazonServiceException:无法找到凭据
Exception 1 of 5:System.InvalidOperationException:The 应用程序的app.config / web.config文件不包含 证件信息 Amazon.Runtime.AppConfigAWSCredentials..ctor()in E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 977在 Amazon.Runtime.FallbackCredentialsFactory。<> c.b__6_0()in E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 2098年 Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(布尔 fallbackToAnonymous)in E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK \ SRC \核心\ Amazon.Runtime \ AWSCredentials.cs
异常2 of 5:System.ArgumentException:App.config不会 包含凭据信息。添加AWSAccessKey和 AWSSecretKey属性或AWSProfileName属性。在 Amazon.Runtime.StoredProfileAWSCredentials..ctor(String profileName, String profilesLocation)in E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCreden 在Amazon.Runtime.FallbackCredentialsFactory。<> c.b__6_1()in E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 2099年 Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(布尔 fallbackToAnonymous)in E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK \ SRC \核心\ Amazon.Runtime \ AWSCredentials.cs
异常3 of 5:System.ArgumentException:Profile''没找到 或无法从SDK凭据存储区加载。验证 个人资料名称和数据是正确的。在 Amazon.Runtime.StoredProfileFederatedCredentials..ctor(字符串 profileName,String profilesLocation,WebProxy proxySettings)in E:\ JenkinsWorkspaces \ v3-stage-release \ AWSDotNetPublic \ sdk \ src at at Amazon.Runtime.FallbackCredentialsFactory。<> c.b__6_2()in E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 2101在 Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(布尔 fallbackToAnonymous)in E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK \ SRC \核心\ Amazon.Runtime \ AWSCredentials.cs
异常4 of 5:System.InvalidOperationException:环境 变量AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_SESSION_TOKEN 没有使用AWS凭据设置。在 Amazon.Runtime.EnvironmentVariablesAWSCredentials.FetchAWSCredentials() 在 E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 856在Amazon.Runtime.EnvironmentVariablesAWSCredentials..ctor()中 E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 836在 Amazon.Runtime.FallbackCredentialsFactory。<> c.b__6_3()in E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 2102在 Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(布尔 fallbackToAnonymous)in E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK \ SRC \核心\ Amazon.Runtime \ AWSCredentials.cs
异常5 of 5:Amazon.Runtime.AmazonServiceException:无法执行 到达凭证服务器 Amazon.Runtime.URIBasedRefreshingCredentialHelper.GetContents(Uri uri) 在 E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 1194年 Amazon.Runtime.InstanceProfileAWSCredentials.d__10.MoveNext() 在 E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 在Amazon.Runtime.InstanceProfileAWSCredentials.GetFirstRole()中 E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 1422年 Amazon.Runtime.FallbackCredentialsFactory.ECSEC2CredentialsWrapper() 在 E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 2129年 Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(布尔 fallbackToAnonymous)in E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK \ SRC \核心\ Amazon.Runtime \ AWSCredentials.cs
在Amazon.Runtime.FallbackCredentialsFactory.GetCredentials(布尔 fallbackToAnonymous)in Amazon.Runtime.FallbackCredentialsFactory.GetCredentials()中的E:\ JenkinsWorkspaces \ v3-stage-release \ AWSDotNetPublic \ sdk \ src \ Core \ Amazon.Runtime \ AWSCredentials.cs E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \核心\ Amazon.Runtime \ AWSCredentials.cs:行 2136在Amazon.S3.AmazonS3Client..ctor(RegionEndpoint region)中 E:\ JenkinsWorkspaces \ V3阶段释放\ AWSDotNetPublic \ SDK的\ src \ SERVICES \ S3 \ Generated_bcl45 \ AmazonS3Client.cs:行 80.在Utility.Program.Dowork()中 C:\ repos \ poc \ Utility \ Utility \ Program.cs:第133行at Utility.Program.Main(String [] args)in C:\ repos \ poc \ Utility \ Utility \ Program.cs:第23行
答案 0 :(得分:2)
旧版SDK的链接中指定的行为仍然有效。如果您为访问密钥和密钥配置AmazonS3Client
null
值,则客户端将以匿名模式运行。
这在SDK的.NET文档中没有记录,但在S3 Developer Guide's .NET section中有记录。
注意强>
您可以在不提供安全凭据的情况下创建
AmazonS3Client
客户端。使用此客户端发送的请求是匿名请求,没有签名。如果您发送对不可公开的资源的匿名请求,则Amazon S3会返回错误。
你可能想要使用像takes a key, secret, and region那样的构造函数。
// passing null for the key and secret will make the client generate anonymous requests
var client = new AmazonS3Client(null, null, RegionEndpoint.USWest2);
// do things with the client
答案 1 :(得分:2)
要获得对任何存储桶的访问权限,您需要其访问权限和密钥,因为您在此处使用SDK“var s3Client = new AmazonS3Client(RegionEndpoint.USWest2);”。您只需要在配置文件中提供凭据,SDK将自动从那里获取凭据。
答案 2 :(得分:0)
要使其正常工作,您必须拥有一个IAM角色,该角色有权将对象放入存储桶。
使用从中加载的凭据构造AmazonS3Client 应用程序的默认配置,如果不成功 EC2实例上的实例配置文件服务。
在http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html
了解有关实例个人资料的详情