SORACOM APIを使って、SORACOM Funnelを更新する

AWSアクセスキーのローテーション自動化ができそうです。
2022.07.27

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

SORACOMには、開発者向けにAPIが提供されています。

本記事では、このAPIを使って、SIMグループにあるSORACOM Funnelの設定を更新してみました。

おすすめの方

  • SORACOM APIを使いたい方

SORACOM APIを使う準備

  • SAMユーザの作成
  • SAMユーザのアクセス権限を付与
  • SAMユーザの「認証キーID&認証キーシークレット」を取得

上記については、次のブログを参考に行います。

なお、今回のアクセス権限は下記となります。

{
  "statements": [
    {
      "api": [
        "Group:putConfigurationParameters"
      ],
      "effect": "allow"
    }
  ]
}

SORACOMの権限設定

APIでSORACOM Funnelを更新する

適当なSIMグループを用意する

実験用に新しくSIMグループを用意しました。

SIMグループを作成

このSIMグループには、SORACOM Funnelの設定はありません(未設定)。

SORACOM Funnelが未設定

利用するAPI

次のAPIを利用します。

  • PUT /groups/{group_id}/configuration/{namespace}

Pythonスクリプト

次のスクリプトを使います。内容的には、SORACOM APIを使うためのAPIキーを取得して、SIMグループの設定更新APIにアクセスしています。

お試し実装のため、下記となっています。本番運用時には適宜検討し、実装してください。

  • APIトークンの有効期限はデフォルト設定です。
  • レートリミットの考慮をしていません。

API トークンの有効期間について

制限事項と注意事項

app.py

import json
import requests
from typing import Tuple


SORACOM_ENDPOINT = 'https://api.soracom.io/v1'

SORACOM_KEY_ID = 'keyId-aaa'
SORACOM_SECRET = 'secret-bbb'

SORACOM_SIM_GROUP_ID = '3afa5669-c691-4b7f-8ada-4d53a5834ed7'
SORACOM_CREDENTIALS_ID = 'foobar-20220722'


def main():
    api_key, token = get_token()

    put_group_configuration(api_key, token)


def get_token() -> Tuple[str, str]:
    headers = {'Content-Type': 'application/json'}
    data = {
        'authKeyId': SORACOM_KEY_ID,
        'authKey': SORACOM_SECRET,
    }
    resp = requests.post(f'{SORACOM_ENDPOINT}/auth', headers=headers, data=json.dumps(data))

    d = resp.json()

    return d['apiKey'], d['token']


def put_group_configuration(api_key: str, token: str) -> None:
    headers = {
        'Content-Type': 'application/json',
        'X-Soracom-API-Key': api_key,
        'X-Soracom-Token': token,
    }
    data = [
        {
            'key': 'destination',
            'value': {
                'provider': 'aws',
                'service': 'aws-iot',
                'resourceUrl': 'xxx-ats.iot.ap-northeast-1.amazonaws.com/soracom/#{imsi}',
            },
        },
        {
            'key': 'credentialsId',
            'value': 'foobar-20220727',
        },
        {
            'key': 'contentType',
            'value': 'json',
        },
        {
            'key': 'enabled',
            'value': True,
        },
    ]
    resp = requests.put(
        f'{SORACOM_ENDPOINT}/groups/{SORACOM_SIM_GROUP_ID}/configuration/SoracomFunnel',
        headers=headers,
        data=json.dumps(data)
    )
    print(resp)
    print(resp.content)


if __name__ == '__main__':
    main()

スクリプトを実行する

python app.py

SORACOM Funnelが設定されていることを確認する

SORACOMのWebコンソールにアクセスして、SORACOM Funnelが設定されていることを確認します。

SORACOM Funnelが設定された

バッチリですね。

ついでに、AWS認証情報だけ更新してみる

更新する情報をAWS認証情報だけにして、更新してみます。

    data = [
        {
            'key': 'credentialsId',
            'value': 'foobar-20220727',
        },
    ]

結果として、AWS認証情報だけが更新できました!

SORACOM Funnelの認証情報が更新された

さいごに

SORACOM APIで認証情報(AWSアクセスキー)を作成できました。 これによって、AWSアクセスキーのローテーション自動化ができそうです。

参考