AWS as MBaaS 〜APIキーとかの話〜
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

AWS as MBaaS 〜APIキーとかの話〜

on

  • 2,301 views

 

Statistics

Views

Total Views
2,301
Views on SlideShare
1,935
Embed Views
366

Actions

Likes
4
Downloads
6
Comments
0

2 Embeds 366

http://dev.classmethod.jp 365
http://news.google.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

AWS as MBaaS 〜APIキーとかの話〜 Presentation Transcript

  • 1. Copylight © Classmethod, Inc. AWS as MBaaS!!! ∼APIキーとかの話∼ 北海道iOS勉強会! クラスメソッド株式会社! 平井祐樹
  • 2. Copylight © Classmethod, Inc. 自己紹介 • 平井祐樹、28歳、B型! • 2012年2月入社(CM歴2年4ヶ月ぐらい)! • iOSアプリ開発歴:2年ぐらい! • Webアプリ開発(PHP、js) 2
  • 3. Copylight © Classmethod, Inc. アジェンダ • MBaaSとAWS! • AWSをMBaaSとして実際に使ってみた話! • まとめ 3
  • 4. Copylight © Classmethod, Inc. MBaaSとAWS 4
  • 5. Copylight © Classmethod, Inc. MBaaSって? • Mobile Backend as a Serviceの略! • エムバース 5
  • 6. Copylight © Classmethod, Inc. MBaaSって? 6 MBaaSとは、スマートフォンアプリの開発に 必要な汎用的機能をAPI、SDKで提供しサー バー側のコードを書くことなく、サーバー連 携するスマートフォンアプリを効率よく開発 できるようにするクラウドサービスです。! (参考:NIFTY Cloud)
  • 7. Copylight © Classmethod, Inc. あっち側 MBaaSって? 7 モバイル ・データ集計/取得! ・ユーザー管理! ・通知 ストレージ サーバー DB
  • 8. Copylight © Classmethod, Inc. MBaaSって? あっち側のことを! よろしくやってくれるサービス 8
  • 9. Copylight © Classmethod, Inc. MBaaSの選択肢 9 Kii cloud NIFTY CloudParse.com
  • 10. Copylight © Classmethod, Inc. MBaaSに求めるもの • 認証/アクセス制御! • 共有データストア! • プッシュ通知! • などなど… 10
  • 11. Copylight © Classmethod, Inc. ??? 11
  • 12. Copylight © Classmethod, Inc. AWSが使えるんじゃね?? 12
  • 13. Copylight © Classmethod, Inc. AWSが使えるんじゃね?? • 認証/アクセス制御 13
  • 14. Copylight © Classmethod, Inc. AWSが使えるんじゃね?? • 共有データストア 14
  • 15. Copylight © Classmethod, Inc. AWSが使えるんじゃね?? • プッシュ通知 15
  • 16. Copylight © Classmethod, Inc. AWS SDK • Java/Ruby/PHP/.Netなど様々なプラット フォームごとにSDKが提供されている! • 当然、iOS(Objective-C)用のSDKもある! • AWS SDKを使用するとAWSのサービスを 直接利用できる 16
  • 17. Copylight © Classmethod, Inc. MBaaSの選択肢 17 Kii cloud NIFTY CloudParse.com
  • 18. Copylight © Classmethod, Inc. AWS を MBaaSとして! どこまで使えるのか? 18
  • 19. Copylight © Classmethod, Inc. 絶賛検証中! 19
  • 20. Copylight © Classmethod, Inc. AWSをMBaaSとして! 実際に使ってみた話 20
  • 21. Copylight © Classmethod, Inc. 何からやってみよう? 21
  • 22. Copylight © Classmethod, Inc. とりあえず! iOSアプリからAWS SDKを使って! S3にアクセスしてみる 22
  • 23. Copylight © Classmethod, Inc. Amazon S3 • AWSの一つとして提供されているオンライ ンストレージサービス! • ファイル(S3ではオブジェクトと呼ばれ る)はバケットと呼ばれる入れ物にいれて 管理する 23
  • 24. Copylight © Classmethod, Inc. S3に任意のバケットに保存されている! ファイル一覧を表示する! iOSアプリを作って見よう。 24
  • 25. Copylight © Classmethod, Inc. どうやってやるの?! 何が必要なの? 25
  • 26. Copylight © Classmethod, Inc. AWS SDKのサンプルを見ている 26
  • 27. Copylight © Classmethod, Inc. AWS SDKのサンプル IAMユーザーのアクセスキーIDとシーク レットキーを用いて、S3にアクセスする。 27
  • 28. Copylight © Classmethod, Inc. ふぁ?IAM ユーザーって?? 28
  • 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
  • 32. Copylight © Classmethod, Inc. S3に任意のバケットに保存されている! ファイル一覧を表示する! iOSアプリを作って見よう。 32
  • 33. Copylight © Classmethod, Inc. やること 1.IAMユーザーのアクセスキーIDとシーク レットアクセスキーを取得する! 2.S3にバケットとファイルを用意する! 3.iOSアプリを実装する 33
  • 34. Copylight © Classmethod, Inc. IAMユーザーのアクセスキー ID と シークレットアクセスキーを取得する 34
  • 35. Copylight © Classmethod, Inc. IAMユーザーのアクセスキー ID と シークレットアクセスキーを取得する 35
  • 36. Copylight © Classmethod, Inc. IAMユーザーのアクセスキー ID と シークレットアクセスキーを取得する 36
  • 37. Copylight © Classmethod, Inc. 1. IAMユーザーのアクセスキー ID とシーク レットアクセスキーを取得する 37
  • 38. Copylight © Classmethod, Inc. S3にバケットとファイルを用意する 38
  • 39. Copylight © Classmethod, Inc. iOSアプリを実装する 39
  • 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); } }
  • 41. Copylight © Classmethod, Inc. 実行! 41
  • 42. Copylight © Classmethod, Inc. できた! 42
  • 43. Copylight © Classmethod, Inc. と思いきや 43
  • 44. Copylight © Classmethod, Inc. AWS SDKのREADMEを見てみると 44
  • 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!!
  • 46. Copylight © Classmethod, Inc. サンプルではIAMユーザーのアクセスキー IDとシークレットアクセスキーを使ってる けど、実際にはやらないでね∼ 46
  • 47. Copylight © Classmethod, Inc. ふぁ?なんで?? 47
  • 48. Copylight © Classmethod, Inc. で、そこについて調べてみました 48
  • 49. Copylight © Classmethod, Inc. S3やDynamoDBにアクセスしたい 49 APIキーが必要!!
  • 50. Copylight © Classmethod, Inc. APIキーとは? • 永続キー (long lived credentials)! • 一時キー (short lived session credentials)! 参考:IAMによるAWS権限管理運用ベストプラクティス (2) | Developers.IO 50
  • 51. Copylight © Classmethod, Inc. APIキーとは? IAMユーザーのアクセスキーIDとシーク レットアクセスキーは永続キーの1つ 51
  • 52. Copylight © Classmethod, Inc. 永続キーをモバイルアプリに埋め込むのは 非常に危険! 52
  • 53. Copylight © Classmethod, Inc. WEBアプリの場合 53 サーバー
  • 54. Copylight © Classmethod, Inc. モバイルアプリの場合 キーが抜かれる 想定していない経路から! アクセスされてしまう!
  • 55. Copylight © Classmethod, Inc. 永続キーを悪用されると・・・ • 想定していない経路(別のアプリなど)か らAWSリソースにアクセスされてしまう! • 場合によっては元のサービスを妨害されて しまう 55
  • 56. Copylight © Classmethod, Inc. そもそも永続キーを使うと・・・ • 永続キーを共通で使用すると、認証やらア クセス制限ができない 56
  • 57. Copylight © Classmethod, Inc. 永続キーではなく! 一時キーを使おう! 57
  • 58. Copylight © Classmethod, Inc. で、どうやって一時キーを使うの? 58
  • 59. Copylight © Classmethod, Inc. 一時キー使う • Security Token Service (STS)! • IAMに従属するサブプロダクト的な位置 付け! • IAMロールに設定された権限を持った一 時キーを入手することができる! 参考:IAMロール徹底理解 ∼ AssumeRoleの正体 | Developers.IO 59
  • 60. Copylight © Classmethod, Inc. IAMロール • AWSの各種サービスにアクセスする際の権 限を設定できる仕組み 60
  • 61. Copylight © Classmethod, Inc. STSを使えば、IAMロールの持つ権限 を一時的に付与してもらうことが可能 61
  • 62. Copylight © Classmethod, Inc. 一時キーを取得する手段 • 自前のサーバーを用意して一時キーを発行 してもらう! • Facebook/Google/Amazon.comアカウ ントを使用する 62 <- サーバーサイドの技術も必要・・・ <- AWSだけでもいける!
  • 63. Copylight © Classmethod, Inc. ということで、実際にFacebook認証を 使ってAWSの一時キーを取得してみる 63
  • 64. Copylight © Classmethod, Inc. よくあるサンプル 64 IAMユーザーのアクセスキーとシークレッ トキーを用いて、S3にアクセスする。
  • 65. Copylight © Classmethod, Inc. よくあるサンプル(改) • Facebook認証を使って取得したAWSの一 時キーを用いて、S3に保存されている自分 だけのファイル一覧を表示する。 65
  • 66. Copylight © Classmethod, Inc. よくあるサンプル(改) 1.S3にバケットを用意する! 2.Facebookアプリケーションを作成する! 3.IAMロールを作成する! 4.iOSアプリを実装する 66
  • 67. Copylight © Classmethod, Inc. S3にバケットを用意する • このサンプルアプリで使用するS3のバケッ トを作成する! • このバケット配下でFacebookアカウント ごとにフォルダを分けて管理するようにす る 67
  • 68. Copylight © Classmethod, Inc. Facebookアプリを作成する 68
  • 69. Copylight © Classmethod, Inc. Facebookアプリを作成する 69
  • 70. Copylight © Classmethod, Inc. Facebookアプリを作成する 70
  • 71. Copylight © Classmethod, Inc. Facebookアプリを作成する 71
  • 72. Copylight © Classmethod, Inc. Facebookアプリを作成する 72
  • 73. Copylight © Classmethod, Inc. Facebookアプリを作成する 73
  • 74. Copylight © Classmethod, Inc. ロールを作成する 74
  • 75. Copylight © Classmethod, Inc. ロールを作成する 75
  • 76. Copylight © Classmethod, Inc. ロールを作成する 76
  • 77. Copylight © Classmethod, Inc. ロールを作成する 77
  • 78. Copylight © Classmethod, Inc. ロールを作成する 78
  • 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}/*"! ]! }! ]! }
  • 80. Copylight © Classmethod, Inc. ロールを作成する 80
  • 81. Copylight © Classmethod, Inc. iOSアプリを実装する 81
  • 82. Copylight © Classmethod, Inc. iOSアプリを実装する 82
  • 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