Soracom

Users

ドキュメント

Cognito のクレデンシャルを取得し S3 からファイルをダウンロードする

当ガイドでは、SIM 認証を使用して SORACOM Krypton (以下、Krypton) の Amazon Cognito 向けサービスのクレデンシャルを取得し、S3 からファイルをダウンロードします。

Krypton の Amazon Cognito 向けプロビジョニング API では、 Amazon Cognito 開発者ガイド 内にある「開発者が認証した ID の認証フロー」の「拡張認証フロー」をサポートしています。

Krypton は SIM を使用したデバイスを認証し、Amazon Cognito の GetOpenIdTokenForDeveloperIdentity API を呼び出し、OpenID トークンを受け取ります。

さらに GetCredentialsForIdentity を呼び出して一時的な AWS クレデンシャルを受け取ることができます。

当サービスを利用することで、お客様は、デバイスの製造段階で認証情報を埋め込むことなく、デバイスから AWS の任意のサービスの API に対して AWS SDK を用いたアクセスが可能となります。その際の通信はセルラー回線である必要はないことから、コストの低い WiFi や Ethernet 等を主回線として用いながら、セルラーをバックアップに使うといった使い方も可能となります。

前提事項は以下のとおりです。

  • Krypton 認証方法として「SORACOM Endorse による SIM 認証」を用いる場合は、
    • グローバル向け IoT SIM (plan01s, plan01s-LDV) が前提となります。
    • SIM カードリーダーもしくは USB ドングルが必要となります。現在のところ以下のデバイスで使用を確認しています。
      • MS2131i-8 (Huawei USB ドングル)
      • Gemalto カードリーダー USB-TR HWP119316 (カードリーダー)

ステップ 1: Amazon Cognito のユーザー ID プールを作成し、開発者が認証した ID を使用するように構成する 

Amazon Cognito の管理コンソールにアクセスします。

Krypton-Cognito

「ID プールの管理」をクリックします。

Krypton-Cognito

「新しい ID プールの作成」をクリックします。

Krypton-Cognito

ID プール名を入力します。次に認証プロバイダーを開き、「カスタム」から「開発者プロバイダーの名前」に krypton.soracom.io を入力して、「プールの作成」をクリックします。

Krypton-Cognito

プール内の認証済みユーザーに対して作成された IAM ロールを指定します。 画面に表示されたポリシー文書がクライアントに割り当てられます。 ここで適切に編集するか、ロールに割り当てられたポリシー文書を後で編集することもできます。

ID プールの ID をコピーして保存します。これは、SORACOM Krypton 構成で使用します。

Krypton-Cognito

ステップ 2: 認証されたクライアントに OpenID トークンを提供する権限を持つ AWS IAM 資格情報を作成する 

Krypton が Amazon Cognito ID プールにアクセスして資格情報を生成するには、適切な権限セットを持つ AWS 資格情報が必要です。 このセクションでは、AWS IAM ユーザーを作成し、適切なポリシーセットを添付し、一連の AWS 資格情報を取得する手順について記載します。

AWS の IAM 管理コンソールにアクセスします。

Krypton-Cognito

左のメニューからユーザーメニューから、ユーザーの追加をクリックします。

Krypton-Cognito

ユーザー名を指定し、「プログラムによるアクセス」をチェックします。 「次のステップ:アクセス権限」をクリックします。

Krypton-Cognito

「既存のポリシーを直接アタッチ」を選択して、ポリシー「AmazonCognitoDeveloperAuthenticatedIdentities」をアタッチします。

Krypton-Cognito

設定を確認し、 「ユーザーの作成」をクリックしてください。

Krypton-Cognito

AWS access key ID と secret access key をコピーしてください。 (secret access key はこの時点で一度だけ表示されます。後ほど使用しますので保管してださい)。

Krypton-Cognito

ステップ 3: Krypton を設定する 

ここまで、Krypton を設定するために必要な情報を収集しました。 次に、SIM が Amazon Cognito の情報をプロビジョニングするために使用できるように、設定グループを設定します。SORACOM クレデンシャルストアに AWS IAM 資格情報エントリを作成します。

SORACOM 資格情報ストアに AWS 資格情報を登録する 

ソラコムのユーザーコンソールからセキュリティを選択します。

Krypton-Cognito

SORACOM クレデンシャル情報ストアに AWS 資格情報を登録します。

Krypton-Cognito

認証情報セットに名前を付け、タイプとして 「AWS credentials」を選択し、「ステップ2」で作成した AWS 認証情報をコピーして貼り付けます

Krypton-Cognito

SIM グループを作成し、SIM をグループに所属させます。

SORACOM ユーザーコンソールから SIM グループを選択します。

Krypton-Cognito

「追加」ボタンをクリックして新規にグループを作成します (または既存のグループを使用する場合はグループを選択します)

グループをクリックし、グループ設定ビューに移動します。

Krypton-Cognito

Krypton を ON にして Cognito の情報を設定します。 「ステップ 1」「ステップ 2」で設定した内容をもとに以下のようにグループを設定します

"region": "ap-northeast-1",
"credentialsId": "aws-xxx-krypton",
"identityPoolId": "ap-northeast-1:xxxxxxxxx",
"developerProviderName": "krypton.soracom.io"
  • region : ステップ 2 で設定した Cognito のリージョンとなります。
  • credentialsId : 当ステップで設定したソラコムのクレデンシャルストア名を指定します。
  • identityPoolId : ステップ 2 で設定した Cognito の ID プールの ID です。

保存ボタンをクリックします。

Krypton-Cognito

次に SIM 管理メニューを選択します。

Krypton-Cognito

使用する SIM を選択し、 Actions メニューの Change group をクリックしてください

Krypton-Cognito

SIM グループを選択し、 Update をクリックしてください。

Krypton-Cognito

ステップ 4: 一時的な AWS 資格情報を取得し、AWS リソースにアクセスする 

ここまでで Krypton を使用して Cognito から AWS 認証情報を取得する設定が完了しました。 SIM を使用して認証し、一時的な AWS 資格を取得するサンプルスクリプトを実行します。 有効期限が切れる前に定期的に資格情報を更新します。

サンプルプロジェクト (nodejs) をダウンロードして解凍してください。 このサンプルプロジェクトを実行するためには以下のソフトウェアが必要となります。必要に応じてインストールしてください。

  • node.js 8.10 以上
  • npm

解凍後に作成されたフォルダ「kryptonExamples」内に移動して、必要な node モジュールをインストールするため以下のコマンドを実行してください。

$ npm install

次に Krypton の認証方法に応じたセットアップを行います。

SORACOM Air のセルラー回線を使用した認証 

SORACOM Air のセルラー回線を使用した認証を用いる場合は以下のコマンドを実行してください。

$ ln -sf krypton-cognito-cellular krypton-cognito

SORACOM Endorse による SIM 認証 

SORACOM Endorse による SIM 認証を用いる場合はまず以下の前提条件をご確認ください。

  • お使いのデバイスにソラコムのグローバル向け IoT SIM (plan01s, plan01s-ldv) が挿入されていること
  • SIM カードリーダーもしくは USB ドングルが必要となります。現在のところ以下のデバイスで使用を確認しています。
    • MS2131i-8 (Huawei USB ドングル)
    • Gemalto カードリーダー USB-TR HWP119316 (カードリーダー)

問題なければ CLI ツールをダウンロードします。現在 Java 版と Go 言語版の 2 種類の CLI ツールがあります。Java 版の CLI ツールは Java で実装されているためポータビリティがありますが実行には Java のランタイム環境が必要となります。一方で Go 言語版の CLI ツールはビルド済みの実行可能ファイルをお使いの環境にコピーしていただければご利用いただけます。お使いのデバイス、環境に合わせて使い分けてください。

Java 版の CLI ツールの場合は、 soracom-krypton-client-for-java より soracom-krypton.jar を「kryptonExamples」と同じフォルダ内にダウンロードしてください。 その後「kryptonExamples」内に移動し以下のコマンドを実行してください。

$ ln -sf krypton-cognito-endorse-java krypton-cognito

Go 言語版の CLI ツールの場合は、krypton-client-go よりお使いの環境にあったバイナリファイルを「kryptonExamples」と同じフォルダ内にダウンロードしてください。 その後「kryptonExamples」内に移動し以下のコマンドを実行してください。

$ ln -sf krypton-cognito-endorse-go krypton-cognito

以上で認証方法に応じたセットアップは完了です。

AWS 資格情報を取得し、AWS リソースにアクセスする 

SORACOM Air のセルラー回線を使用した認証の場合は、IoT SIM で接続できていることを確認してください。

Run node cognito-auth.js を実行します。

$ node cognito-auth.js

「Successfully obtained AWS credentials」というメッセージが表示された場合は、SORACOM Krypton を使用してデバイスの認証が正常にできています。これで、Amazon Cognito コンソールのアイデンティティプールのアイデンティティブラウザの IMSI を見ることができます。

Krypton-Cognito

S3 へのアクセス 

ここまでで、サンプルスクリプトを変更して、Amazon S3 バケットや Kinesis Video Stream などの AWS リソースにアクセスできるようになりました。

S3 へのアクセスを行うには、スクリプト「cognito-auth.js」を開いて次の部分を編集します。以下は S3 の指定のバケットのオブジェクトをリストします。

initializeCredentials().then(() => {
  console.log("Successfully obtained AWS credentials");
  /* Here write code to access AWS resources, e.g.
    const s3 = new AWS.S3();

    s3.listObjects({Bucket: 'your-s3-bucket'}, (err, data) => {
      if (err) console.error(err);
      console.log(data);
    });
  */
});

認証されたユーザーに関連付けられた AWS IAM ロールを合わせて設定する必要があります。