aws as mbaas 〜apiキーとかの話〜

85
Copylight © Classmethod, Inc. AWS as MBaaS!! APIキーとかの話~ 北海道iOS勉強会 クラスメソッド株式会社 平井祐樹

Upload: yuki-hirai

Post on 02-Jul-2015

2.863 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

AWS as MBaaS!!!~APIキーとかの話~

北海道iOS勉強会!クラスメソッド株式会社!

平井祐樹

Page 2: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

自己紹介• 平井祐樹、28歳、B型!• 2012年2月入社(CM歴2年4ヶ月ぐらい)!• iOSアプリ開発歴:2年ぐらい!• Webアプリ開発(PHP、js)

2

Page 3: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

アジェンダ• MBaaSとAWS!

• AWSをMBaaSとして実際に使ってみた話!• まとめ

3

Page 4: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

MBaaSとAWS

4

Page 5: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

MBaaSって?• Mobile Backend as a Serviceの略!• エムバース

5

Page 6: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

MBaaSって?

6

MBaaSとは、スマートフォンアプリの開発に必要な汎用的機能をAPI、SDKで提供しサーバー側のコードを書くことなく、サーバー連携するスマートフォンアプリを効率よく開発できるようにするクラウドサービスです。!

(参考:NIFTY Cloud)

Page 7: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

あっち側

MBaaSって?

7

モバイル

・データ集計/取得!・ユーザー管理!・通知

ストレージ

サーバー DB

Page 8: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

MBaaSって?

あっち側のことを!よろしくやってくれるサービス

8

Page 9: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

MBaaSの選択肢

9

Kii cloud NIFTY CloudParse.com

Page 10: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

MBaaSに求めるもの• 認証/アクセス制御!• 共有データストア!• プッシュ通知!• などなど…

10

Page 11: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

???

11

Page 12: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

AWSが使えるんじゃね??

12

Page 13: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

AWSが使えるんじゃね??• 認証/アクセス制御

13

Page 14: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

AWSが使えるんじゃね??• 共有データストア

14

Page 15: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

AWSが使えるんじゃね??• プッシュ通知

15

Page 16: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

AWS SDK• Java/Ruby/PHP/.Netなど様々なプラットフォームごとにSDKが提供されている!

• 当然、iOS(Objective-C)用のSDKもある!• AWS SDKを使用するとAWSのサービスを直接利用できる

16

Page 17: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

MBaaSの選択肢

17

Kii cloud NIFTY CloudParse.com

Page 18: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

AWS を MBaaSとして!どこまで使えるのか?

18

Page 19: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

絶賛検証中!

19

Page 20: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

AWSをMBaaSとして!実際に使ってみた話

20

Page 21: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

何からやってみよう?

21

Page 22: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

とりあえず!iOSアプリからAWS SDKを使って!

S3にアクセスしてみる

22

Page 23: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

Amazon S3• AWSの一つとして提供されているオンラインストレージサービス!

• ファイル(S3ではオブジェクトと呼ばれる)はバケットと呼ばれる入れ物にいれて管理する

23

Page 24: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

S3に任意のバケットに保存されている!ファイル一覧を表示する!

iOSアプリを作って見よう。

24

Page 25: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

どうやってやるの?!何が必要なの?

25

Page 26: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

AWS SDKのサンプルを見ている

26

Page 27: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

AWS SDKのサンプルIAMユーザーのアクセスキーIDとシークレットキーを用いて、S3にアクセスする。

27

Page 28: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

ふぁ?IAM ユーザーって??

28

Page 29: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

IAM• Identity and Access Management!• AWSの権限管理のサービス!• IAM ユーザー、IAM グループ、IAM ロールとかがある

29

Page 30: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

IAM ユーザー• 一つのAWSアカウントの下に複数のユーザを作成することができる!

• そのユーザに特定のリソース、サービス、APIに関する権限を与えることができる!

• そのユーザーを使ってAWS管理画面にログインしたりAWSのリソースにアクセスできたりする

30

Page 31: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

必要なもの• AWS SDK for iOS(v1.7.1)!• IAM ユーザーのアクセスキーIDとシークレットアクセスキー!

• S3のバケットとその中のファイル!• Xcode

31

Page 32: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

S3に任意のバケットに保存されている!ファイル一覧を表示する!

iOSアプリを作って見よう。

32

Page 33: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

やること1.IAMユーザーのアクセスキーIDとシークレットアクセスキーを取得する!2.S3にバケットとファイルを用意する!

3.iOSアプリを実装する

33

Page 34: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

IAMユーザーのアクセスキー ID とシークレットアクセスキーを取得する

34

Page 35: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

IAMユーザーのアクセスキー ID とシークレットアクセスキーを取得する

35

Page 36: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

IAMユーザーのアクセスキー ID とシークレットアクセスキーを取得する

36

Page 37: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

1. IAMユーザーのアクセスキー ID とシークレットアクセスキーを取得する

37

Page 38: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

S3にバケットとファイルを用意する

38

Page 39: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

iOSアプリを実装する

39

Page 40: AWS as MBaaS 〜APIキーとかの話〜

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

Page 41: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

実行!

41

Page 42: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

できた!

42

Page 43: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

と思いきや

43

Page 44: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

AWS SDKのREADMEを見てみると

44

Page 45: AWS as MBaaS 〜APIキーとかの話〜

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!!

Page 46: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

サンプルではIAMユーザーのアクセスキーIDとシークレットアクセスキーを使ってるけど、実際にはやらないでね~

46

Page 47: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

ふぁ?なんで??

47

Page 48: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

で、そこについて調べてみました

48

Page 49: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

S3やDynamoDBにアクセスしたい

49

APIキーが必要!!

Page 50: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

APIキーとは?• 永続キー (long lived credentials)!

• 一時キー (short lived session credentials)!参考:IAMによるAWS権限管理運用ベストプラクティス (2) | Developers.IO

50

Page 51: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

APIキーとは?IAMユーザーのアクセスキーIDとシークレットアクセスキーは永続キーの1つ

51

Page 52: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

永続キーをモバイルアプリに埋め込むのは非常に危険!

52

Page 53: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

WEBアプリの場合

53

サーバー

Page 54: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

モバイルアプリの場合

キーが抜かれる 想定していない経路から!アクセスされてしまう!

Page 55: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

永続キーを悪用されると・・・• 想定していない経路(別のアプリなど)からAWSリソースにアクセスされてしまう!

• 場合によっては元のサービスを妨害されてしまう

55

Page 56: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

そもそも永続キーを使うと・・・• 永続キーを共通で使用すると、認証やらアクセス制限ができない

56

Page 57: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

永続キーではなく!一時キーを使おう!

57

Page 58: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

で、どうやって一時キーを使うの?

58

Page 59: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

一時キー使う• Security Token Service (STS)!• IAMに従属するサブプロダクト的な位置付け!

• IAMロールに設定された権限を持った一時キーを入手することができる!

参考:IAMロール徹底理解 ~ AssumeRoleの正体 | Developers.IO

59

Page 60: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

IAMロール• AWSの各種サービスにアクセスする際の権限を設定できる仕組み

60

Page 61: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

STSを使えば、IAMロールの持つ権限を一時的に付与してもらうことが可能

61

Page 62: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

一時キーを取得する手段• 自前のサーバーを用意して一時キーを発行してもらう!

• Facebook/Google/Amazon.comアカウントを使用する

62

<- サーバーサイドの技術も必要・・・

<- AWSだけでもいける!

Page 63: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

ということで、実際にFacebook認証を使ってAWSの一時キーを取得してみる

63

Page 64: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

よくあるサンプル

64

IAMユーザーのアクセスキーとシークレットキーを用いて、S3にアクセスする。

Page 65: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

よくあるサンプル(改)• Facebook認証を使って取得したAWSの一時キーを用いて、S3に保存されている自分だけのファイル一覧を表示する。

65

Page 66: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

よくあるサンプル(改)1.S3にバケットを用意する!

2.Facebookアプリケーションを作成する!

3.IAMロールを作成する!

4.iOSアプリを実装する

66

Page 67: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

S3にバケットを用意する• このサンプルアプリで使用するS3のバケットを作成する!

• このバケット配下でFacebookアカウントごとにフォルダを分けて管理するようにする

67

Page 68: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

Facebookアプリを作成する

68

Page 69: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

Facebookアプリを作成する

69

Page 70: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

Facebookアプリを作成する

70

Page 71: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

Facebookアプリを作成する

71

Page 72: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

Facebookアプリを作成する

72

Page 73: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

Facebookアプリを作成する

73

Page 74: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

ロールを作成する

74

Page 75: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

ロールを作成する

75

Page 76: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

ロールを作成する

76

Page 77: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

ロールを作成する

77

Page 78: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

ロールを作成する

78

Page 79: AWS as MBaaS 〜APIキーとかの話〜

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}/*"! ]! }! ]!}

Page 80: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

ロールを作成する

80

Page 81: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

iOSアプリを実装する

81

Page 82: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

iOSアプリを実装する

82

Page 83: AWS as MBaaS 〜APIキーとかの話〜

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]; // あとはファイルを閲覧したりアップロードしたり削除したり・・・ } }];

Page 84: AWS as MBaaS 〜APIキーとかの話〜

Copylight © Classmethod, Inc.

まとめ• 永続キーではなく一時キーを使え!• ことAWS as MBaaSではその手段は

Facebook/Google/Amazon.comアカウントを使用する方法しかなさそう

84

Page 85: AWS as MBaaS 〜APIキーとかの話〜