SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

池澤あやかさんにお願い! AWS Summit Tokyo 2015「デベロッパーカンファレンス」を盛り上げるアプリを一緒につくってください!

【制作1日目】 池澤あやかさん、イベント会場がヒートアップ間違いなしのアプリを制作、まずはクライアント側処理です ~ Amazon S3 / Cognito / Kinesis / DynamoDB 登場

池澤あやかさんにお願い! AWS Summit Tokyo 2015「デベロッパーカンファレンス」を盛り上げるアプリを一緒につくってください! 第1回


  • X ポスト
  • このエントリーをはてなブックマークに追加

アプリも安全第一! AWSにアクセスするための認証情報を保護

西谷:

スマホフレーフレー言語応援アプリの仕様から想像すると、プレイが始まれば、多数のスマホから大量の加速度センサーデータが送信されてきます。また、大量のデータを高速に読み書きできるデータベースも必要になるでしょう。前者の用途にはAmazon Kinesis、後者の用途にはAmazon DynamoDBというAWSサービスを使用するつもりです。これらについては、あとで説明します。

アプリでは、スマホとAmazon KinesisやAmazon DynamoDBにアクセスしてデータをやり取りするわけですが、このとき、認証情報として「AWS Access Key ID」と「AWS Secret Access Key」が必要になります。でも、それをアプリのJavaScriptコードに直接書いてしまっては、誰にでも見えてしまいますよね。

池澤:

それは怖いです。認証情報が漏れると、自分のアカウントが不正に利用されてしまう可能性もありますし。

西谷:

AWS Access Key IDとAWS Secret Access Keyは、アプリ内に直接書くべきではありません。

ではどうするかというと、認証情報をハードコーディングせずにJavaScriptのコードから権限の制限された一時的な認証情報を要求し、それを使ってAWSのサービスにアクセスします。この仕組みを提供するAWSサービスがAmazon Cognitoです。

Amazon CognitoはAWSを用いたスマホのアプリ開発をより簡単にするためのアイデンティティの管理やデバイス間のデータ同期をクロスプラットフォームで簡単に実現するためのサービスです。Amazon、Facebook、Googleといったパブリックログインプロバイダを使用してユーザーに一意なアイデンティティを作成できますが、ここでは、それらは使わずにAmazon Cognitoのゲストアクセスの機能を用います。

モバイル端末向けのクライアントアプリからAWSのサービスを直接利用する場合には、基本的にAmazon Cognitoを使うとよいでしょう。

Amazon Cognitoのアイデンティティプールを作成する

西谷:

では、Amazon Cognitoの設定を行いましょうか。マネージメントコンソールで「Mobile Services」の「Amazon Cognito」を選択し、[Get started]をクリックします。

Amazon Cognito

 

池澤:

[Getting started wizard]が表示されました。

西谷:

最初にアイデンティティプールを作成します。アイデンティティプールは、ユーザーごとにテンポラリの認証情報を払い出すためのプールです。[Identity pool name]に任意のプール名を入力します。

続いて、[Unauthenticated identities]を開いて[Enable access to unauthenticated identities]にチェックを入れてください。

アイデンティティプールの作成

 

池澤:

これって何ですか?

西谷:

Amazon Cognitoでは、Facebookなどのアカウント情報で認証済みのユーザーと、認証されていないユーザー、つまりゲストユーザーで別々の権限を設定することができます。たとえば、「認証済みのユーザーには読み取りと書き込みを許可し、ゲストユーザーには読み取りのみを許可する」といった設定ができるんです。

今回は、ゲストユーザーに対し、Amazon KinesisへのデータのPUTと、Amazon DynamoDBからデータをGETする許可を与えるため、[Unauthenticated identities]を有効化して設定します。

池澤:

わかりました! そして、[Create Pool]をクリック、ですね。

Amazon Cognitoのアイデンティティプールの作成

 

IAMロールを作成し割り当てる

西谷:

続いて、AWSリソースへのアクセス制御を設定するためにAWS Identity and Access Management(IAM)というサービスで提供されるIAMロール[4]を2つ作成し、認証済みユーザーとゲストユーザーにそれぞれを割り当てます。ここではAmazon CognitoのコンソールからIAMロールの作成と割り当てを行います。

[Assign role to authenticated identities]および[Assign role to unauthenticated identities]の[IAM role]で、「Create a new IAM role」を選択します。[Role name]の名前を覚えておいてくださいね。

[Update roles]をクリックします。

池澤:

はい。

西谷:

ゲストユーザーに割り当てられたIAMロールに必要な権限を設定しますが、これはIAMのコンソールから行います。

マネージメントコンソールで「Administration & Security」の「Identity & Access Management」を選択し、[IAM Resources]の「Roles」というリンクをクリックすると、先ほど作成したロールが表示されます。ロールを選択してください。

池澤:

ゲストユーザーに割り当てたほうですね。クリックしました。

ゲストユーザーに割り当てたロールの設定

 

西谷:

[Create Role Policy]をクリックし、[Policy Generator]を選択して[Select]をクリックします。

池澤:

クリックしました。

西谷:

[Edit Permissions]で、どのリソースにどのようなアクションを許可するかを設定していきます。

まず、Amazon Kinesisです。

  • [Effect]では[Allow]
  • [AWS Service]では「Amazon Kinesis」
  • [Actions]では「PutRecords」

を選択します。

Amazon Kinesisでは、データを流し込む“ホース”のような役割を担う「ストリーム」と、そのデータを受け取る“バケツ”のような役割を担う「シャード」というオブジェクトを利用します。今回はそのストリームにデータをPUTする許可のみ与えています。

[Amazon Resource Name(ARN)]にはストリーム名をARN形式(arn:aws:kinesis:<リージョン名>:<アカウントID>:stream/<ストリーム名>)で指定します。ここで指定した名前で後ほどAmazon KinesisのストリームをN.Virginiaリージョンに作成します。

Amazon Kinesisに対するパーミッションの設定

 

[Add Statement]をクリックして、[Next Step]をクリックします。

池澤:

あっ、JSONみたいなデータが書き出されました。

Amazon Kinesisに対するパーミッション

 

西谷:

[Apply Policy]をクリックすると、ポリシーが適用されます。

続いて、Amazon DynamoDBに対する権限の設定です。先ほどと同様に、[Create Role Policy]→[Policy Generator]→[Select]をクリックします。それから、

  • [AWS Service]では「Amazon DynamoDB」
  • [Actions]では「GetItem」「Query」「Scan」

を選択します。

[Amazon Resouce Name(ARN)]はテーブル名を指定します。

池澤:

[Add Statement]をクリックして、[Next Step]をクリックですね。カチカチっと。

西谷:

最後に[Apply Policy]をクリック。同様の手順で、認証済みユーザーのロールにもパーミッションを設定してください。

池澤:

はーい。

[4] IAMロールとは、AWSリソースへのリクエストを行う権限を定義するAWS Identity and Access Management(IAM)エンティティです。IAMロールは特定のユーザーまたはグループに関連付けられません。Amazon EC2や今回のAmazon CognitoのようなAWSサービスなどの信頼されたエンティティに適用されます。

池澤さんも登場するデベロッパーカンファレンスに、ぜひご参加ください!

参加したい方、ご興味のある方はデベロッパーカンファレンスのWebサイトへ!

次のページ
センサーデータをリアルタイムに収集する仕組みをつくる

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
池澤あやかさんにお願い! AWS Summit Tokyo 2015「デベロッパーカンファレンス」を盛り上げるアプリを一緒につくってください!連載記事一覧

もっと読む

この記事の著者

坂井 直美(サカイ ナオミ)

SE、通信教育講座の編集、IT系出版社の書籍編集を経てフリーランスへ。IT分野で原稿を書いたり編集したり翻訳したり。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8642 2015/07/13 22:09

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング