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());
}
});
}