2016-12-20 9 views
1

私が始める前に、私はすでに同じ質問に関連してSO postを読みました。しかし、そのポストのSDKのバージョンは古いです。 AWS nugetpageによれば、新しいバージョン3が利用可能であり、各サービスごとに別々のパッケージがあります。アクセスキーと秘密鍵を使用せずにAWS S3にファイルをアップロードする方法

新しいバージョン3のAWS SDK for .NETでは、サービスごとに別々のパッケージ( )が使用されています。たとえば、Amazon S3はAWSSDK.S3パッケージにあり、 Amazon SQSはAWSSDK.SQSにあり、Amazon DynamnoDBは AWSSDK.DynamoDBv2にあります。

したがって、AWSSDK.CoreもインストールするnugetからAWSSDK.S3パッケージをインストールしました。 使用しているバケットimはIPを使って制限されているので、im実行コードがバケットに完全にアクセスできるマシンです。

以下は、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取得しかし:System.InvalidOperationExceptionが:資格情報5の

例外1を見つけることができません。 : アプリケーションのapp.config/web.configファイルに の資格情報が含まれていませんでした Amazon.Runtime.AppConfigAWSCredentials..ctor() E:\ J enkinsWorkspaces \ v3-stage-release \ AWSDotNetPublic \ sdk \ src \ Core \ Amazon.Runtime \ AWSCredentials.cs:行 Amazon.Runtime.FallbackCredentialsFactory。 <> c.b__6_0() Eで:\ JenkinsWorkspaces v3の段階 - リリース\ \ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime AWSCredentials.cs \:ライン Amazon.Runtime.FallbackCredentialsFactory.GetCredentialsで(ブール Eで fallbackToAnonymous):\ JenkinsWorkspaces \ v3の段階 - リリース\ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime \ AWSCredentials.cs

例外5の2:System.ArgumentExceptionの:App.configファイルが ありません資格情報を含むAWSAccessKeyプロパティと AWSSecretKeyプロパティまたはAWSProfileNameプロパティを追加します。 Amazon.Runtimeで\ JenkinsWorkspaces \ v3の段階 - リリース\ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime \ AWSCreden : Eで Amazon.Runtime.StoredProfileAWSCredentials..ctor(文字列プロファイル名、 文字列profilesLocation)で。 FallbackCredentialsFactory。 <> c.b__6_1() Eで:\ JenkinsWorkspaces v3の段階 - リリース\ \ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime AWSCredentials.cs \:ライン Amazon.Runtime.FallbackCredentialsFactory.GetCredentialsで(ブール Eで fallbackToAnonymous):\ JenkinsWorkspaces \ v3のステージ-リリース5の\ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime \ AWSCredentials.cs

例外3:システム。ArgumentException:プロファイル ''が見つかりませんでした またはSDK資格情報ストアから読み込めませんでした。 のプロファイル名とデータが正しいことを確認します。 Eで Amazon.Runtime.StoredProfileFederatedCredentials..ctorで(文字列 プロファイル名、文字列profilesLocation、WebProxyにproxySettings): Amazon.Runtime.FallbackCredentialsFactoryで\ JenkinsWorkspaces \ v3の段階 - リリース\ AWSDotNetPublic \ SDK \ SRC。 <> c.b__6_2() Eで:\ JenkinsWorkspaces v3の段階 - リリース\ \ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime AWSCredentials.cs \:ライン Amazon.Runtime.FallbackCredentialsFactory.GetCredentialsで(ブール Eで fallbackToAnonymous):\ JenkinsWorkspaces v3の段階 - リリース\ \ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime AWSCredentials.cs

例外4 5の\:System.InvalidOperationExceptionが:環境変数 AWS_ACCESS_KEY_ID/AWS資格情報でAWS_SECRET_ACCESS_KEY/AWS_SESSION_TOKEN が設定されていませんでした。 Amazon.Runtime.EnvironmentVariablesAWSCredentials.FetchAWSCredentials() E中で:\ JenkinsWorkspaces v3の段階 - リリース\ \ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime AWSCredentials.cs \:Amazon.Runtime.EnvironmentVariablesAWSCredentialsでライン 856 ..E:¥JenkinsWorkspaces¥v3-stage-release¥AWSDotNetPublic¥sdk¥src¥Core¥Amazon.Runtime¥AWSCredentials.cs: Amazon.Runtime.FallbackCredentialsFactory内の.ctor()。 <> c.b__6_3() Eで:\ JenkinsWorkspaces v3の段階 - リリース\ \ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime AWSCredentials.cs \:ライン Amazon.Runtime.FallbackCredentialsFactory.GetCredentialsで(ブール fallbackToAnonymous) Eで:\ JenkinsWorkspaces \ v3の段階 - リリース\ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime \ AWSCredentials.cs

例外5の5:Amazon.Runtime.AmazonServiceException: 到達することができません。資格サーバー Amazon.Runtime.URIBasedRefreshingCredentialHelper.GetContents(Uri uri) E:¥JenkinsWorkspaces¥v3-stage-release¥AWSDotNetPublic¥sdk¥src¥Core¥Amazon.Runtライン Amazon.Runtime.InstanceProfileAWSCredentials.d__10.MoveNext(で) E で:\ JenkinsWorkspaces \ v3の段階 - リリース\ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime \ AWSCredentials IMEはAWSCredentials.csを\します。 CS:ライン EでAmazon.Runtime.InstanceProfileAWSCredentials.GetFirstRole()で:\ JenkinsWorkspaces v3の段階 - リリース\ \ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime AWSCredentials.cs \:ライン 1422アマゾン で。 Runtime.FallbackCredentialsFactory.ECSEC2CredentialsWrapper() でE:\ JenkinsWorkspaces \ v3の段階 - リリース\ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime \ AWSCredentials.cs:ライン Amazon.Runtime.FallbackCredentialsFactory.GetCrで Eでedentials(ブール fallbackToAnonymous):\ JenkinsWorkspaces v3の段階 - リリース\ \ AWSDotNetPublic \ SDK \ SRC \コア\ Amazon.Runtime \ AWSCredentials.cs Amazon.Runtime.FallbackCredentialsFactory.GetCredentialsで

(ブール fallbackToAnonymous ) の場合:のE:¥JenkinsWorkspaces¥v3-stage-release¥AWSDotNetPublic¥sdk¥src¥Core¥Amazon.Runtime¥AWSCredentials.csの場合:JenkinsWorkspaces \ v3-stage-リリース\ AWSDotNetPublic \ sdk \ src \ Core \ Amazon.Runtime \ AWSCredentials.cs:行 2136 Amazon.S3.AmazonS3Client .. E:¥JenkinsWorkspaces¥v3-stage-release¥AWSDotNetPublic¥sdk¥src¥Services¥S3¥Generated_Bcl45¥AmazonS3Client.cs: 80のUtility.Program.Dowork()の のc:\ ctor(RegionEndpoint地域)レポ\ POC \ユーティリティ\ユーティリティ\のProgram.cs: CでUtility.Program.Main(文字列[]引数)でライン133:\レポ\ POC \ユーティリティ\ユーティリティ\のProgram.cs:ライン23

答えて

0

これが機能するには、インスタンスにバケットにオブジェクトを入れる権限を持つIAMロールが必要です。 アプリケーションのデフォルトの設定からロードされた資格情報を使用して

構築AmazonS3Client、およびEC2インスタンス上の インスタンス・プロファイルサービスから失敗した場合:documentationによると

http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html

1

でのインスタンス・プロファイルについての詳細を読むずっと年上SDKのリンクで指定された動作がまだ有効です。アクセスキーとシークレットの値を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 
0

任意のバケットへのアクセスを取得するには、あなたがここにSDKを使用しているとして、あなたは、そのアクセスと秘密鍵を必要とする「VAR s3Client =新しいAmazonS3Client(RegionEndpoint.USWest2);」。設定ファイルに資格情報を入力するだけで、SDKはそこから資格情報を自動的に取得します。

関連する問題