Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

4,374 views

Published on

Published in: Engineering

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

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

×