AWS Cognitoを利用します。Cognitoを使って、IdentityPoolId のみでアクセス権限を取得できます。
下記は、AWS Tool for Unityにあるサンプルファイルの中身を抜粋(一部改)しています。
初期設定に必要なコード
String IdentityPoolId ="us-east-1:XXXXXXXXXXXXXXXXXXXX";public string CognitoIdentityRegion = RegionEndpoint.USEast1.SystemName;private RegionEndpoint _CognitoIdentityRegion{ get { return RegionEndpoint.GetBySystemName(CognitoIdentityRegion); }}private AWSCredentials Credentials{ get{ if (_credentials == null) _credentials = new CognitoAWSCredentials(IdentityPoolId, _CognitoIdentityRegion); return _credentials; }}private IAmazonS3 Client{ get{ if (_s3Client == null){ _s3Client = new AmazonS3Client(Credentials, _S3Region); } return _s3Client; }}S3に置いてあるバケットの情報(リスト)を入手する
public void GetObjects()
{ var request = new ListObjectsRequest() { BucketName = S3BucketName }; Client.ListObjectsAsync(request, (responseObject) => { ResultText.text += "\n"; if (responseObject.Exception == null) { ResultText.text += "Got Response \nPrinting now \n"; responseObject.Response.S3Objects.ForEach((o) => { ResultText.text += string.Format("{0}\n", o.Key); }); } else { ResultText.text += "Got Exception \n"; } }); }S3の特定のファイルについて取得する
private void GetObject(string S3BucketName,string SampleFileName)
{ ResultText.text = string.Format("fetching {0} from bucket {1}", SampleFileName, S3BucketName); Client.GetObjectAsync(S3BucketName, SampleFileName, (responseObj) => { string data = null; var response = responseObj.Response; if (response.ResponseStream != null) { using (StreamReader reader = new StreamReader(response.ResponseStream)) { data = reader.ReadToEnd(); } ResultText.text += "\n"; ResultText.text += data; } }); }S3にデータを置く
public void PostObject(string S3BucketName)
{ ResultText.text = "Retrieving the file"; string fileName = GetFileHelper(); var stream = new FileStream(Application.persistentDataPath + Path.DirectorySeparatorChar + fileName, FileMode.Open, FileAccess.Read, FileShare.Read); ResultText.text += "\nCreating request object"; var request = new PostObjectRequest() { Bucket = S3BucketName, Key = fileName, InputStream = stream, CannedACL = S3CannedACL.Private }; ResultText.text += "\nMaking HTTP post call"; Client.PostObjectAsync(request, (responseObj) => { if (responseObj.Exception == null) { ResultText.text += string.Format("\nobject {0} posted to bucket {1}", responseObj.Request.Key, responseObj.Request.Bucket); } else { ResultText.text += "\nException while posting the result object"; ResultText.text += string.Format("\n receieved error {0}", responseObj.Response.HttpStatusCode.ToString()); } }); }