メインコンテンツまでスキップ

「vault」タグの記事が1件件あります

全てのタグを見る

· 約10分
moritalous

環境構築

認証局を構築する

Hashicorp社のVaultを使用します

  1. 設定ファイルの作成

    config.hcl
    storage "raft" {
    path = "/vault/file"
    node_id = "node1"
    }

    listener "tcp" {
    address = "0.0.0.0:8200"
    tls_disable = "true"
    }

    disable_mlock = true

    api_addr = "http://127.0.0.1:8200"
    cluster_addr = "https://127.0.0.1:8201"
    ui = true
  2. 起動

    docker run --rm -p 8200:8200 \
    -v `pwd`/vault/file:/vault/file \
    -v `pwd`/vault/logs:/vault/logs \
    -v `pwd`/config.hcl:/config.hcl \
    vault server -config=/config.hcl
  3. ブラウザで127.0.0.1:8200にアクセス

  • Create a new Raft clusterを選択

    image.png

  • key sharesを5、Key thresholdを3に指定。(詳細は公式ドキュメントを参照ください。)

    image.png

  • 画面遷移後、少し待つとキーが発行されます。Download keysでキーを一括ダウンロードしContinue to Unsealをクリックします。

    image.png

  • ダウンロードしたファイルのkeysから、3回別々のkey入力します。

    image.png

  • 右上のStatusが緑色に変わりました。ダウンロードしたファイルのroot_tokenを使ってログインします。

    image.png

  • ログインできました。

    image.png

認証局の作成

Enable new Engineをクリックします。

image.png

PKI Certificatesを選択し、Nextをクリックします。

image.png

Method Optionsを開き、Max Lease TTLを3650daysに設定します。Enable Engineをクリックします。

image.png

ConfigurationタブのConfigureボタンをクリック、Configure CAをクリックします。

image.png

項目を入力し、Saveボタンをクリックします。

項目
Common nameMy Private Certificate Authority
Options -> TTL3650days

Certificateが生成されるのでファイルに保存します。名前はprivate_root_CA.pemとしておきます。

URLsタブを選択し、Issuing certificateshttp://127.0.0.1:8200/v1/pki/caCRL Distribution Pointshttp://127.0.0.1:8200/v1/pki/crlと入力し、Saveボタンをクリックします。

image.png

パンくずリストのpkiから画面を戻り、RolesタブのCreate roleボタンをクリックします。

image.png

以下の項目を入力し、Create roleボタンをクリックします。

項目
Role nameMyPrivateCertificateAuthority
Options -> Allow any nameチェックを付ける
Options -> Enforce hostnamesチェックを外す

ここまでで認証局の作成は完了です。

デバイス証明書を作成

デバイス証明書を作成して登録しましょう。

Vaultの画面でMyPrivateCertificateAuthorityロールのメニューからGenerate certificateをクリックします。(ロール名のクリックでもOKです)

image.png

Common nameを入力し、Generateボタンをクリックします。

image.png

Certificate、Private keyを保存しておきます。(それぞれcertificate.pem、private.keyとします。) 画面下部のCopy credentialsからJSON形式で一括取得が可能です。

クラウドに接続

AWS IoT

IoT Coreの管理画面でCA証明書まで遷移し、CA証明書を登録ボタンをクリックします。

image.png

ページ中程に説明のある検証証明書を作成する必要があります。登録コードはこの後必要なのでコピーしておきます。

image.png

image.png

OpenSSLで以下のコマンドを実行します。

openssl genrsa -out verification_cert_key_filename.key 2048

ファイルが作成されます。続いてこちらのコマンド。

openssl req -new -key verification_cert_key_filename.key -out verification_cert_csr_filename.csr

入力が求められるので、Common Name以外は未入力でエンター、Common Nameは先程の登録コードを入力します。

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []: <===== ここに検証コード
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Vaultの画面に戻り、Rolesに作成したMyPrivateCertificateAuthorityの右側メニューから、Sign certificateを選択します。

image.png

以下の項目を入力し、Generateをクリックします。

項目
Certificate Signing Request (CSR)OpenSSLで生成したCSRファイルの内容
Common name検証コード
Options -> Exclude Common Name from Subject Alternative Names (SANs)チェックを付ける

image.png

証明書が作成されるので、ファイルに保存します。(verification_cert_filename.pemとします)

AWSの管理画面に戻ります。 CA 証明書にprivate_root_CA.pem、検証証明書にverification_cert_filename.pemを指定し、登録ボタンをクリックします。

image.png

CA証明書が登録されました。

証明書画面の証明書を登録ボタンをクリックします。

image.png

CA が AWS IoT に登録されていますを選択した状態でCA証明書を選択、作成済みのデバイス証明書をアップロードします。有効化もこのタイミングで実施しておくと良いでしょう。登録ボタンをクリックします。

image.png

IoTポリシーを作成します。ポリシーの画面でポリシーを作成ボタンをクリックします。

image.png

お試しなので、フル権限で作成します。ポリシーアクションとポリシーリソースはいずれも*です。作成をクリックします。

image.png

証明書の画面に戻り、先程登録したデバイス証明書にポリシーをアタッチします。

image.png

image.png

準備完了です。

接続します。

MQTTクライアントで以下の内容を入力し、接続します。

項目
プロトコルmqtts
ホスト名AWS IoTの設定画面で表示されるエンドポイント
ポート番号8883
クライアントID任意の文字
ユーザー名未指定
パスワード未指定
CAファイルAmazon Root CA 1を保存したファイル
クライアント証明書デバイス証明書(certificate.pem)
プライベートキープライベートキー(private.key)
  • Subscribeトピック名
任意(一部AWS予約トピックあり)
  • Publishトピック名
任意(一部AWS予約トピックあり)

GCP

注意

Google Cloud IoT Coreのサービスは2023年8月16日に廃止されるようです。(https://cloud.google.com/iot-core?hl=ja

GCPのIoT Core管理画面を開き、レジストリを登録ボタンをクリックします。

image.png

レジストリID、リージョン、Cloud Pub/Subトピックを入力、CA証明書欄private_root_CA.pemの値を貼り付け、作成ボタンをクリックします。

image.png

次はデバイスを登録します。左メニューのデバイスを選択し、デバイスを作成ボタンをクリックします。

image.png

デバイスID(device1)を入力し、認証欄にcertificate.pemの内容を貼り付けます。公開鍵の種類はRS256_X509を選択します。作成ボタンをクリックします。

接続します。

MQTTクライアントで以下の内容を入力し、接続します。

項目
プロトコルmqtts
ホスト名mqtt.googleapis.com
ポート番号8883
クライアントIDprojects/{GCPのプロジェクトID}/locations/{リージョン}/registries/{レジストリ名}/devices/{デバイス名}
ユーザー名unused
パスワードこちらの方法で生成したJWT
CAファイルGoogle ルート CA 認証パッケージを保存したファイル
クライアント証明書デバイス証明書(certificate.pem)
プライベートキープライベートキー(private.key)
  • Subscribeトピック名
/devices/{デバイス名}/commands/#
/devices/{デバイス名}/config

GCPの管理画面から構成を編集ボタン、コマンドを送信ボタンでテスト送信が可能です。

  • Publishトピック名
/devices/{デバイス名}/events

Azure

IoT Hubを作成します。

image.png

IoT Hub名を入力し、確認及び作成ボタンをクリック、作成ボタンをクリックします。

image.png

ルート証明書を登録します。左の証明書メニューを選択し、追加ボタンをクリックします。

image.png

証明署名を入力、private_root_CA.pemを選択、アップロード時に証明書の状態を確認済みに設定するにチェックを入れ、保存ボタンをクリックします。

image.png

次にデバイスを登録します。左のデバイスメニューを選択し、デバイスの追加ボタンをクリックします。

image.png

デバイスIDを入力しますが、ここで指定するデバイス名はデバイス証明書作成時に指定したCommon nameと同一である必要があります。認証の種類をX.509 CA 署名済みとし、保存ボタンをクリックします。

接続

接続します。

MQTTクライアントで以下の内容を入力し、接続します。

項目
プロトコルmqtts
ホスト名{IoT Hub名}.azure-devices.net
ポート番号8883
クライアントID{デバイスID}
ユーザー名{IoT Hub名}.azure-devices.net/{デバイスID}
パスワード未指定
CAファイルBaltimore CyberTrust Rootを保存したファイル
クライアント証明書デバイス証明書(certificate.pem)
プライベートキープライベートキー(private.key)
  • Subscribeトピック名
devices/{デバイスID}/messages/devicebound/#

Azureの管理画面からデバイスへのメッセージボタンでテスト送信が可能です。

  • Publishトピック名
/devices/{デバイスID}/messages/events/