2016-10-25 15 views
1

私はAWS S3アカウントを持っていて、SecretAccessKey、SessionToken、Expiration、AccessKeyIdアイテムを持っています。最も簡単な方法で、いくつかのファイルをクラウドにアップロードしたいと思います。一時的なセキュリティ資格情報を使用してデルファイでAmazon S3にファイルをアップロード

)認証ヘッダ(http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html)に関するいくつかのドキュメントを読みましたが、まだそれらを構築する方法を理解していない)

もが、インディで別の例を見て、そう、これらの項目で認証ヘッダーを構築するために助けてください私が持っている:SecretAccessKey、SessionToken、Expiration、AccessKeyId。 「シングルチャンクでのペイロードの転送」モード+「署名付きペイロード」オプションを使用しても構いません。

FS := TFileStream.Create('c:\myfile.txt', fmOpenRead or fmShareDenyWrite); 
    try 
    IdHTTP1.Request.CustomHeaders.Values['Authorization'] := ...; // please help 
    IdHTTP1.Request.BasicAuthentication := False; 
    IdHTTP1.Request.Date := ...; //what should I enter here? 
    IdHTTP1.Request.Expect := '100-continue'; 
    IdHTTP1.Request.ProtocolVersion := pv1_1; 
    ... 
    IdHTTP1.Put('http://'+BucketName+'.s3.amazonaws.com/myfile.txt', FS); 
    finally 
    FS.Free; 
    end; 

ありがとうございます!

+0

あなたは何デルファイを使用しています?、彼らは非常に簡単にデルファイ10のクラウドコンポーネントです。 –

+0

Delphi XE8。 D10のどのコンポーネントがaws authを実装するために使われますか? –

+0

TAmazonConnectionInfoこれらのクラウドコンポーネントはDelphi 10の新機能です。http://docwiki.embarcadero.com/RADStudio/Seattle/en/Developing_Cloud_Applications –

答えて

1

ここでクラウドのコンポーネントを使用してアマゾンにファイルをアップロードするために私のルーチンです:

function UploadFile(File: TBytes; FileName: string; Bucket: string): boolean; 
var Service: TAmazonStorageService; 
    ConAmazon: TAmazonConnectionInfo; 
begin 
    try 
    ConAmazon := TAmazonConnectionInfo.Create(nil); 
    ConAmazon.AccountKey := 'Dih71bG09****************'; 
    ConAmazon.AccountName := 'AKIA***********'; 
    ConAmazon.QueueEndpoint := 'queue.amazonaws.com'; 
    ConAmazon.StorageEndpoint := 's3-eu-west-1.amazonaws.com'; 
    ConAmazon.TableEndpoint := 'sdb.amazonaws.com'; 
    ConAmazon.UseDefaultEndpoints := False; 
    Service := TAmazonStorageService.Create(ConAmazon); 
    Result := Service.UploadObject(Bucket, FileName, File, TRUE, nil, nil, amzbaPrivate, nil); 
    finally 
    ConAmazon.Free; 
    Service.Free; 
    end; 
end; 
+0

あなたは永続的な資格情報でOKです。一時的なセキュリティ資格情報(セキュリティトークン)を使用しないでください...クラウドクライアントのセキュリティをトークンと連携させるつもりです誰かがTAmazonAWS4Authenticationを使っているのでしょうか?私たちはさらにexaを見ません –

+0

はい、私たちはS3 Storageにアクセスする唯一のDatasnap RESTサーバーをいくつか持っていますので、私たちのキーはそこに配布されていません。本当にTAmazonAWS4Authenticationクラスを使用する必要がありますか?一時的なセキュリティ資格情報は、永続的な資格情報とほぼ同じように動作することを読んでいます。 –

1

[OK]を、ので、最終的に我々は問題が解決しました:Delphi10.1ベルリンから

1.Data.Cloudを使用すべきです。 Amazon AWS4セキュリティ標準に対応しています。 2.TAmazonStorageService.InitHeadersは、ヘッダに、一時的なセッショントークンの使用を有効にするには、次のコードを追加することによって、パッチを適用する必要があります。

...  
Result.Values['x-amz-security-token'] := //your session_token string; 
... 

は多くの側面から、それをテストし、今で正常に動作します:)

関連する問題