More Related Content
Similar to AWS as MBaaS 〜APIキーとかの話〜
Similar to AWS as MBaaS 〜APIキーとかの話〜 (20)
AWS as MBaaS 〜APIキーとかの話〜
- 6. Copylight © Classmethod, Inc.
MBaaSって?
6
MBaaSとは、スマートフォンアプリの開発に
必要な汎用的機能をAPI、SDKで提供しサー
バー側のコードを書くことなく、サーバー連
携するスマートフォンアプリを効率よく開発
できるようにするクラウドサービスです。!
(参考:NIFTY Cloud)
- 16. Copylight © Classmethod, Inc.
AWS SDK
• Java/Ruby/PHP/.Netなど様々なプラット
フォームごとにSDKが提供されている!
• 当然、iOS(Objective-C)用のSDKもある!
• AWS SDKを使用するとAWSのサービスを
直接利用できる
16
- 23. Copylight © Classmethod, Inc.
Amazon S3
• AWSの一つとして提供されているオンライ
ンストレージサービス!
• ファイル(S3ではオブジェクトと呼ばれ
る)はバケットと呼ばれる入れ物にいれて
管理する
23
- 29. Copylight © Classmethod, Inc.
IAM
• Identity and Access Management!
• AWSの権限管理のサービス!
• IAM ユーザー、IAM グループ、IAM ロール
とかがある
29
- 30. Copylight © Classmethod, Inc.
IAM ユーザー
• 一つのAWSアカウントの下に複数のユーザを作
成することができる!
• そのユーザに特定のリソース、サービス、API
に関する権限を与えることができる!
• そのユーザーを使ってAWS管理画面にログイン
したりAWSのリソースにアクセスできたりする
30
- 31. Copylight © Classmethod, Inc.
必要なもの
• AWS SDK for iOS(v1.7.1)!
• IAM ユーザーのアクセスキーIDとシーク
レットアクセスキー!
• S3のバケットとその中のファイル!
• Xcode
31
- 40. Copylight © Classmethod, Inc.
iOSアプリを実装する
40
// アクセスキーIDとシークレットアクセスキーを指定してS3クライアントインスタンスを生成する
AmazonS3Client *s3Client = [[AmazonS3Client alloc]
initWithAccessKey:@“[アクセスキーID]”
withSecretKey:@“[シークレットアクセスキー]”];
// 指定しバケットのファイル一覧を取得する
S3ListObjectsRequest *request = [[S3ListObjectsRequest alloc]
initWithName:@"ios-s3-sample"];
S3ListObjectsResponse *response = [s3Client listObjects:request];
if (response.error) {
NSLog(@"error: %@", response.error);
} else {
NSArray *objects = response.listObjectsResult.objectSummaries;
for (NSString *objectSummary in objects) {
NSLog(@"%@", objectSummary);
}
}
- 45. Copylight © Classmethod, Inc.
iOSアプリを実装する
// アクセスキーIDとシークレットアクセスキーを指定してS3クライアントインスタンスを生成する
AmazonS3Client *s3Client = [[AmazonS3Client alloc]
initWithAccessKey:@“[アクセスキーID]”
withSecretKey:@“[シークレットアクセスキー]”];
// 指定しバケットのファイル一覧を取得する
S3ListObjectsRequest *request = [[S3ListObjectsRequest alloc]
initWithName:@"ios-s3-sample"];
S3ListObjectsResponse *response = [s3Client listObjects:request];
if (response.error) {
NSLog(@"error: %@", response.error);
} else {
NSArray *objects = response.listObjectsResult.objectSummaries;
for (NSString *objectSummary in) {
NSLog(@"%@", objectSummary);
}
}
45
<- NG!!
- 50. Copylight © Classmethod, Inc.
APIキーとは?
• 永続キー (long lived credentials)!
• 一時キー (short lived session credentials)!
参考:IAMによるAWS権限管理運用ベストプラクティス (2) |
Developers.IO
50
- 55. Copylight © Classmethod, Inc.
永続キーを悪用されると・・・
• 想定していない経路(別のアプリなど)か
らAWSリソースにアクセスされてしまう!
• 場合によっては元のサービスを妨害されて
しまう
55
- 59. Copylight © Classmethod, Inc.
一時キー使う
• Security Token Service (STS)!
• IAMに従属するサブプロダクト的な位置
付け!
• IAMロールに設定された権限を持った一
時キーを入手することができる!
参考:IAMロール徹底理解 ∼ AssumeRoleの正体 | Developers.IO
59
- 62. Copylight © Classmethod, Inc.
一時キーを取得する手段
• 自前のサーバーを用意して一時キーを発行
してもらう!
• Facebook/Google/Amazon.comアカウ
ントを使用する
62
<- サーバーサイドの技術も必要・・・
<- AWSだけでもいける!
- 67. Copylight © Classmethod, Inc.
S3にバケットを用意する
• このサンプルアプリで使用するS3のバケッ
トを作成する!
• このバケット配下でFacebookアカウント
ごとにフォルダを分けて管理するようにす
る
67
- 79. Copylight © Classmethod, Inc. 79
{!
"Version": "2012-10-17",!
"Statement": [!
{!
"Effect": "Allow",!
"Action": ["s3:ListBucket"],!
"Resource": ["arn:aws:s3:::ios-s3-sample-bucket"],!
"Condition": {!
"StringLike": {!
"s3:prefix": "${graph.facebook.com:id}/*"!
}!
}!
},!
{!
"Effect":"Allow",!
"Action":["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],!
"Resource":[!
"arn:aws:s3:::ios-s3-sample-bucket/${graph.facebook.com:id}",!
"arn:aws:s3:::ios-s3-sample-bucket/${graph.facebook.com:id}/*"!
]!
}!
]!
}
- 83. Copylight © Classmethod, Inc. 83
// Facebook認証を実行する
FBSession *session;
[session openWithCompletionHandler:^(FBSession *session,
FBSessionState status,
NSError *error) {
// Facebook認証で取得したトークンでAWSから一時キーを取得する
NSString *role = @“arn:aws:iam::xxxxx:role/FacebookWIFS3FileStore”;
NSString *accessToken = session.accessTokenData.accessToken;
AmazonWIFCredentialsProvider *wif = [[AmazonWIFCredentialsProvider alloc]
initWithRole:role
andWebIdentityToken:accessToken
fromProvider:@"graph.facebook.com"];
if (wif.subjectFromWIF) {
// Facebookアカウントで取得した一時キーを指定してS3クライアントインスタンスを生成する
AmazonS3Client *s3Client = [[AmazonS3Client alloc]
initWithCredentialsProvider:self.wif];
// あとはファイルを閲覧したりアップロードしたり削除したり・・・
}
}];
- 84. Copylight © Classmethod, Inc.
まとめ
• 永続キーではなく一時キーを使え!
• ことAWS as MBaaSではその手段は
Facebook/Google/Amazon.comアカウ
ントを使用する方法しかなさそう
84