SORACOM Airのタグとメタデータサービスで認証情報をSIMごとに管理する #soracom

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。本記事はSORACOM Advent Calendar 2015の2日目です。 先日追加されたSORACOM Airの新機能メタデータサービスを利用して、端末側でAWSの認証情報を持たない一時認証の仕組みを考えてみました。

処理の流れ

SORACOM Airのメタデータサービスは、Air SIM 1枚毎に紐付く情報を認証なしで端末に提供します。そこで、ユーザーが自由に設定できるAir SIMのタグにAWSのAPIキーとAssumeRoleするIAMロールを埋め込み、端末でそれらからAWSの一時キーを生成、AWSサービスにアクセスします。

AssumeRoleなしで直接使えるAPIキーを用意するのとセキュリティレベルがどの程度異なるかは精査できていませんが、一時キーの方がCloudTrailで証跡を追いやすいかなぁと考えた次第です。 また、CognitoのIdentity IDをタグに埋め込んでCognitoによる一時キー発行を実装することもできると思います。

事前に準備するもの

AWS側の認証設定をあらかじめ用意しましょう。

  • IAMユーザーとAPIキー、シークレットキー
  • AssumeRoleするためのIAMロール

1. SORACOMの設定

では、認証情報をSORACOM Air SIMのタグに追加します。SORACOMユーザーコンソールから設定するAir SIMを選択、[詳細]ボタンで詳細設定を開きます。

metadata-sora01

[タグ]タブをクリックし、[+]をクリックして追加画面を開きます。

metadata-sora02

タグ名と値をそれぞれ入力します。今回は以下3つを設定しました。

  • AWS_ACCESS_KEY_ID : IAMユーザーのAPIキー
  • AWS_SECRET_ACCESS_KEY : IAMユーザーのシークレットキー
  • AWS_IAM_ROLE_ARN : AssumeRoleで指定するIAMロールのARN

metadata-sora03

以下のような感じです。

metadata-sora04

SORACOM側の設定はこれでOKです。

2. 端末のスクリプト作成

メタデータサービスをコールし、AWSの一時キーを生成しAWS APIを呼び出すシェルスクリプトを作成しました。今回はDynamoDBのテーブル一覧を取得してみます。

#!/bin/bash

export AWS_DEFAULT_REGION='ap-northeast-1'

export AWS_ACCESS_KEY_ID=`curl -s metadata.soracom.io/v1/subscriber | jq -r '.tags.AWS_ACCESS_KEY_ID'`
export AWS_SECRET_ACCESS_KEY=`curl -s metadata.soracom.io/v1/subscriber | jq -r '.tags.AWS_SECRET_ACCESS_KEY'`
export AWS_IAM_ROLE_ARN=`curl -s metadata.soracom.io/v1/subscriber | jq -r '.tags.AWS_IAM_ROLE_ARN'`

CREDS=`aws sts assume-role --output text --role-session-name temp --role-arn $AWS_IAM_ROLE_ARN | grep CREDENTIALS`

export AWS_ACCESS_KEY_ID=`echo $CREDS      | awk '{print $2}'`
export AWS_SECRET_ACCESS_KEY=`echo $CREDS  | awk '{print $4}'`
export AWS_SESSION_TOKEN=`echo $CREDS      | awk '{print $5}'`

aws dynamodb list-tables

スクリプトには認証情報が一切含まれていないことがわかりますね。では、実行してみます。

$ ./metadata-soracom.bash
{
    "TableNames": [
        "ReplicaTable",
        "grove-water",
        "iottest",
        "streamtest"
    ]
}

一時キーでAWS APIがコールできました!

まとめ

SORACOM Airのタグとメタデータサービスを利用して、端末に認証情報を提供する例を紹介してみました。SORACOM側で認証情報の差し替えや削除ができますので、なかなかアクセスが難しいIoTデバイス/ゲートウェイの遠隔管理の手段として活用できるのでは、と考えます。

SORACOM側でメタ情報を持たせる同様の仕組みとしてメタデータサービスのユーザーデータとSORACOM Beamがありますが、現在はグループ単位での設定にあるため、SIM 1枚毎に異なる情報を扱うのであれば、タグとメタデータサービスの組み合わせが適していると言えます。