Howto

Armadillo-IoT G4 を用いた物体認識プログラムの動作確認と AWS 各サービスの利用による分析方法 (デバイス登録編)

このページでは、AWSにデバイスや証明書を登録、また認証情報プロバイダを使用するために必要な設定について記載します。


以下の工程で実施します。

1. SE050からデバイス証明書とリファレンスキーを取得する

本作業は、Armadillo-IoT G4上で実施します。
Armadillo-IoT G4 の起動や接続方法についてはマニュアルをご確認ください。
Armadillo-IoT G4 をネットワークに接続、以下のコマンドを実行しスクリプトを取得・実行してください。
SE050 から デバイス証明書とリファレンスキーの取得に成功すると、以下のログが出力されます。

[armadillo ~]# curl -O https://download.atmark-techno.com/sample/armadillo_iot_g4-detect-object-and-aws-services-howto/get_keycert_from_se050.sh
[armadillo ~]# chmod +x get_keycert_from_se050.sh
[armadillo ~]# ./get_keycert_from_se050.sh
Get device cert / key from SE050
  ...Done
SerialNo(ThingName)=0000001234567890

key ディレクトリ配下にSE050から取得した証明書 device_cert.pem とリファレンスキー key.pem が保存されます。

[armadillo ~]# ls key/*
key/device_cert.pem  key/key.pem

本 HowTo では以下の証明書とリファレンスキーを取得しています。

key name ID
Cloud connection key 0,
RSA2048, Die Indivisual
0xF0000110 (refkey)
0xF0000111 (cert)

スクリプト実行結果で表示されたシリアル番号について、2.3 パラメータ設定 の工程で必要となるのでメモしておいてください。

SerialNo(ThingName)=0000001234567890

2. AWS設定

この先の作業はPC上で実施します。

2.1 AWSアカウント、IAMユーザー作成

以下を参考に AWSアカウント、IAMユーザーを作成してください。

2.2 AWS CLI インストール

この先の作業は AWS CLI(AWS Command Line Interface) を用います。
こちらのページからインストーラをダウンロードし、AWS CLIをインストールします。
なお、本HowToではLinuxでの使用を想定して以降の手順を記述します。

AWS CLIのコンフィグレーション

インストールが完了したら、aws configure コマンドを使用し、 AWS CLI のコンフィグレーションを行います。
ここでは、以下のパラメータを設定します。

項目 設定内容
AWS Access Key ID [None] new_user_credentials.csv の Access key ID 列に記載されている文字列 AWS123
AWS Secret Access Key [None] new_user_credentials.csv の Secret access key 列に記載されている文字列 AWS-access
Default region name [None] ご利用のregion ap-northeast-1
Default output format [None] 出力フォーマット json

上表の例では以下の通りの入力となります。

# aws configure
AWS Access Key ID [None]: AWS123
AWS Secret Access Key [None]: AWS-access
Default region name [None]: ap-northeast-1
Default output format [None]: json

2.3 パラメータの設定

以下の一連の設定で必要となるパラメータを設定します。

アカウント関連

項目 設定内容
AWS_REGION ご利用のregion ap-northeast-1
AWS_ACCOUNTID アカウントID 123456789000

コマンド実行例

# AWS_REGION=ap-northeast-1
# AWS_ACCOUNTID=123456789000

デバイス関連

項目 設定内容
IOTCORE_THING_NAME AWS IoT Core Thing名
工程1 で取得したG4のシリアル番号を指定します
0000001234567890

コマンド実行例

# IOTCORE_THING_NAME=0000001234567890

ポリシー、ロール名

変数名 内容
IOTCORE_POLICY_NAME IoT Coreポリシー名 G4_IoTCore_Policy
S3_ASSUME_ROLE_NAME Assume Role名 G4_AssumeRole
S3_ACCESS_POLICY_NAME S3にアクセス権限を持つポリシー名 G4_S3_Upload_Policy
IOTCORE_ALIAS_ROLE_NAME IoT Coreロールエイリアス名 G4_IoTCore_RoleAlias
IOTCORE_CREDENTIAL_POLICY_NAME IoT Core 認証情報プロバイダポリシー名 G4_IoTCore_Credential_Policy

コマンド実行例

# IOTCORE_POLICY_NAME=G4_IoTCore_Policy
# S3_ASSUME_ROLE_NAME=G4_AssumeRole
# S3_ACCESS_POLICY_NAME=G4_S3_Upload_Policy
# IOTCORE_ALIAS_ROLE_NAME=G4_IoTCore_RoleAlias
# IOTCORE_CREDENTIAL_POLICY_NAME=G4_IoTCore_Credential_Policy

2.4 AWS IoT Core にThing(デバイス)を登録する

以下の手順で、AWS IoT Coreにモノ(デバイス)を登録します。

ポリシーの作成

ポリシーを記載したjsonファイルを作成します。
以下をコンソールへコピー&ペーストしてください。

cat << EOF > iot-core-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "arn:aws:iot:${AWS_REGION}:${AWS_ACCOUNTID}:client/\${iot:Connection.Thing.ThingName}",
      "Condition": {
        "Bool": {
          "iot:Connection.Thing.IsAttached": ["true"]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": ["iot:Publish", "iot:Receive"],
      "Resource": [
        "arn:aws:iot:${AWS_REGION}:${AWS_ACCOUNTID}:topic/\$aws/things/\${iot:Connection.Thing.ThingName}/shadow/*" 
      ]
    },
    {
      "Effect": "Allow",
      "Action": "iot:Subscribe",
      "Resource": [
        "arn:aws:iot:${AWS_REGION}:${AWS_ACCOUNTID}:topicfilter/\$aws/things/\${iot:Connection.Thing.ThingName}/shadow/*" 
      ]
    },
    {
      "Effect": "Allow",
      "Action": "iot:UpdateShadow",
      "Resource": "arn:aws:iot:${AWS_REGION}:${AWS_ACCOUNTID}:thing/\${iot:Connection.Thing.ThingName}" 
    },
    {
      "Effect": "Allow",
      "Action": "iot:GetThingShadow",
      "Resource": "arn:aws:iot:${AWS_REGION}:${AWS_ACCOUNTID}:thing/\${iot:Connection.Thing.ThingName}" 
    }
  ]
}
EOF

以下のコマンドを実行してポリシーを作成します。

# aws iot create-policy --policy-name ${IOTCORE_POLICY_NAME} --policy-document file://iot-core-policy.json

Thing作成

工程1. で取得したシリアル番号を使用します。

# aws iot create-thing --thing-name ${IOTCORE_THING_NAME}

デバイス証明書登録

工程1. で取得したデバイス証明書を登録します。
USBメモリ等を使用し、G4上にある device_cert.pem をPCに置いてください。

# IOTCORE_CERT_ARN=$(aws iot register-certificate-without-ca \
--certificate-pem file://device_cert.pem --status ACTIVE \
--query certificateArn --output text)

証明書にポリシーをアタッチ

登録した証明書に、上記で作成したポリシーをアタッチします。

# aws iot attach-policy --target ${IOTCORE_CERT_ARN} --policy-name ${IOTCORE_POLICY_NAME}

証明書をThingにアタッチ

作成したThingに、証明書をアタッチします。

# aws iot attach-thing-principal --thing-name ${IOTCORE_THING_NAME} --principal ${IOTCORE_CERT_ARN}

IoT Core デバイスデータエンドポイント取得

デバイスが IoT Core に接続するために必要となる IoT Core デバイスデータエンドポイントを取得します。
取得した結果については この後の工程で使用するため、メモしておいてください。

# aws iot describe-endpoint --endpoint-type iot:Data-ATS

2.5 IoT Core 認証情報プロバイダ設定

以下の手順で、IoT Core 認証情報プロバイダ関連の設定を行います。

Amazon S3を操作できる IAMロールを作成

ポリシーを記載したjsonファイルを作成します。
以下をコンソールへコピー&ペーストしてください。

cat << EOF > assume-role-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "credentials.iot.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF

以下のコマンドを実行し、IAMロールにを作成します。

# aws iam create-role \
--role-name ${S3_ASSUME_ROLE_NAME} \
--assume-role-policy-document file://assume-role-policy.json \
--max-session-duration 43200

Amazon S3 にアクセス権限を持つポリシーを作成、ロールにアタッチ

今回は S3 にファイルを送信するため、 S3 の権限設定を行います。
ポリシーを記載したjsonファイルを作成します。
以下をコンソールへコピー&ペーストしてください。

cat << EOF > s3-access-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": "*"
    }
  ]
}
EOF

以下のコマンドを実行し、ポリシーを作成します。

# S3_UPLOAD_POLICY_ARN=$(aws iam create-policy \
--policy-name ${S3_ACCESS_POLICY_NAME} \
--policy-document file://s3-access-policy.json \
--query Policy.Arn \
--output text)

ロールにアタッチします。

# aws iam attach-role-policy \
--role-name ${S3_ASSUME_ROLE_NAME} \
--policy-arn ${S3_UPLOAD_POLICY_ARN}

# S3_ASSUME_ROLE_ARN=$(aws iam get-role \
--role-name ${S3_ASSUME_ROLE_NAME} \
--query Role.Arn \
--output text)

IoT Core ロールエイリアスを作成

S3にアクセス権限を持つロールを、IoT Coreロールエイリアスに指定します。
このとき、 IoT Core 認証情報プロバイダから発行する認証情報の有効期間を指定します。
今回は 43,200秒(12時間) を指定します。

# aws iot create-role-alias \
--role-alias ${IOTCORE_ALIAS_ROLE_NAME} \
--role-arn ${S3_ASSUME_ROLE_ARN} \
--credential-duration-seconds 43200

# S3_UPLOAD_ROLE_ALIAS_ARN=$(aws iot describe-role-alias \
--role-alias ${IOTCORE_ALIAS_ROLE_NAME} \
--query roleAliasDescription.roleAliasArn \
--output text)

IoT Core 認証情報プロバイダポリシーを作成

ポリシーを記載したjsonファイルを作成します。
以下をコンソールへコピー&ペーストしてください。

cat << EOF > iot-credential-policy.json
{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Action": "iot:AssumeRoleWithCertificate",
    "Resource": "${S3_UPLOAD_ROLE_ALIAS_ARN}"
  }
}
EOF

以下のコマンドを実行し、ポリシーを作成します。

# aws iot create-policy --policy-name ${IOTCORE_CREDENTIAL_POLICY_NAME} --policy-document file://iot-credential-policy.json

IoT Core 認証情報プロバイダポリシーをデバイス証明書にアタッチ

ポリシーをデバイス証明書にアタッチします。これにより、認証情報プロバイダから認証情報を取得できるようになります。

# aws iot attach-policy --target ${IOTCORE_CERT_ARN} --policy-name ${IOTCORE_CREDENTIAL_POLICY_NAME}

IoT Core 認証情報プロバイダエンドポイント取得

デバイスが認証情報を取得するために必要となる IoT Core 認証情報プロバイダエンドポイントを取得します。
取得した結果については この後の工程で使用するため、メモしておいてください。

# aws iot describe-endpoint --endpoint-type iot:CredentialProvider

ここまでで、 デバイス登録の設定が完了しました。 次のArmadillo-IoT G4 を用いた物体認識プログラムの動作確認と AWS 各サービスの利用による分析方法 (G4 セットアップ編) に進んでください。