Krypton では Amazon Cognito から AWS サービスを利用するための期限付き認証情報を取得できます。たとえば、Amazon S3 などの AWS サービスを一時的に利用できます。
ここでは、SIM 認証を使用して Krypton の Amazon Cognito 向けサービスのクレデンシャルを取得し、S3 からファイルをダウンロードします。
Krypton の Amazon Cognito 向けプロビジョニング API では、Amazon Cognito 開発者ガイド 内にある「デベロッパーが認証した ID の認証フロー」の「拡張認証フロー」をサポートしています。
Krypton は SIM を使用したデバイスを認証し、Amazon Cognito の GetOpenIdTokenForDeveloperIdentity
API を呼び出し、OpenID トークンを受け取ります。
さらに GetCredentialsForIdentity
を呼び出して一時的な AWS クレデンシャルを受け取ることができます。
Krypton を利用することで、お客様は、デバイスの製造段階で AWS の認証情報を埋め込むことなく、デバイスから AWS の任意のサービスの API に対して AWS SDK を用いたアクセスが可能となります。その際の通信はセルラー回線である必要はないことから、コストの低い WiFi や Ethernet 等を主回線として用いながら、セルラーをバックアップに使うといった使いかたもできます。
Krypton 認証方法として「SORACOM Endorse による SIM 認証」を用いる場合の前提事項は以下のとおりです。
- IoT SIM (plan01s、plan01s - Low Data Volume、planP1、planX3 X3-5MB、plan-K2 K2-300MB) を利用していることが前提となります。
- SIM カードリーダーもしくは USB ドングルが必要となります。現在のところ以下のデバイスで使用を確認しています。
- MS2131i-8 (Huawei USB ドングル)
- Gemalto カードリーダー USB-TR HWP119316 (カードリーダー)
ステップ 1: Amazon Cognito のユーザー ID プールを作成し、開発者が認証した ID を使用するように構成する
Amazon Cognito の管理コンソールにアクセスします。
「ID プールの管理」をクリックします。
「新しい ID プールの作成」をクリックします。
ID プール名を入力します。次に認証プロバイダーを開き、「カスタム」から「開発者プロバイダーの名前」に krypton.soracom.io
を入力して、「プールの作成」をクリックします。
プール内の認証済みユーザーに対して作成された IAM ロールを指定します。画面に表示されたポリシー文書がクライアントに割り当てられます。ここで適切に編集するか、ロールに割り当てられたポリシー文書を後で編集することもできます。
ID プールの ID をコピーして保存します。これは、SORACOM Krypton 構成で使用します。
ステップ 2: 認証されたクライアントに OpenID トークンを提供する権限を持つ AWS IAM 資格情報を作成する
Krypton が Amazon Cognito ID プールにアクセスして資格情報を生成するには、適切な権限セットを持つ AWS 資格情報が必要です。このセクションでは、AWS IAM ユーザーを作成し、適切なポリシーセットを添付し、一連の AWS 資格情報を取得する手順について記載します。
AWS の IAM 管理コンソールにアクセスします。
左のメニューからユーザーメニューから、ユーザーの追加をクリックします。
ユーザー名を指定し、「プログラムによるアクセス」をチェックします。 「次のステップ:アクセス権限」をクリックします。
「既存のポリシーを直接アタッチ」を選択して、ポリシー「AmazonCognitoDeveloperAuthenticatedIdentities」をアタッチします。
設定を確認し、「ユーザーの作成」をクリックしてください。
AWS access key ID と secret access key をコピーしてください。 (secret access key はこの時点で一度だけ表示されます。後ほど使用しますので保管してください)。
ステップ 3: Krypton を設定する
ここまで、Krypton を設定するために必要な情報を収集しました。次に、SIM が Amazon Cognito の情報をプロビジョニングするために使用できるように、設定グループを設定します。SORACOM クレデンシャルストアに AWS IAM 資格情報エントリを作成します。
SORACOM 資格情報ストアに AWS 資格情報を登録する
ソラコムのユーザーコンソールからセキュリティを選択します。
SORACOM クレデンシャル情報ストアに AWS 資格情報を登録します。
認証情報セットに名前を付け、タイプとして 「AWS credentials」を選択し、「ステップ 2」で作成した AWS 認証情報をコピーして貼り付けます。
SORACOM Krypton を有効にして Amazon Cognito 情報を設定する
Krypton の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
スイッチをクリックして「ON」にします。
→ をクリックします。
各項目を設定し、
をクリックします。「ステップ 1」と「ステップ 2」で設定した内容から、以下のように設定します。
項目 説明 AWS リージョン ステップ 2 で設定した Cognito のリージョンを入力します。例: ap-northeast-1
認証情報 当ステップで設定したソラコムのクレデンシャルストア名を指定します。例: aws-xxx-krypton
Identity pool ID ステップ 2 で設定した Cognito の ID プールの ID です。例: ap-northeast-1:xxxxxxxxx
Developer provider name 例: krypton.soracom.io
をクリックします。
IoT SIM の Krypton が有効になります。
SORACOM CLI / SORACOM API の場合
SORACOM CLI または SORACOM API を利用しても、SORACOM Krypton を有効にして Amazon Cognito 情報を設定できます。
soracom groups put-config
(Group:putConfigurationParameters API
) を使用します。
{namespace}
は、SoracomKrypton
です。
ボディで指定するプロパティについては、以下の key
と value
のペアを配列で指定します。
"SoracomKrypton": {
"enabled": true | false, // 機能自体のオンオフ、デフォルトは false
"AmazonCognito": {
"region": "us-xxx-xx", // 使用する Cognito のリージョンとなります。
"credentialsId": "aws-iot-xxx", //ソラコムの認証情報ストア名を指定します。
"identityPoolId": "us-west-2:xxxxxxxx-xxxxx-xxxxxxx", //CognitoのIDプールのIDです。
"developerProviderName": "krypton.soracom.io" // Cognitoで設定したdeveloperProviderNameを指定します。
}
}
設定例
[
{
"key": "enabled",
"value": true
},
{
"key": "AmazonCognito",
"value": {
"region": "us-west-2",
"credentialsId": "aws-credential",
"identityPoolId": "us-west-2:xxxxxxxx-xxxxx-xxxxxxx",
"developerProviderName": "krypton.soracom.io"
}
}
]
ステップ 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 - Low Data Volume、planP1、planX3 X3-5MB、plan-K2 K2-300MB) を利用していること
- 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 を見ることができます。
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 ロールを合わせて設定する必要があります。