AWS IoT -> DynamoDBを設定する際に気をつけること


AWS IoTでRulesを指定してDynamoDBに値を流し込みたい。この要件を満たすためにRulesを何度か作ってみて試験的につながるかどうかを試すことはあるかと思います。その際の注意点。

生成したIAMロールは、そのDynamoDBテーブルにしかアクセス権限がないことを認識すべし

タイトルの通りです。
IAMロールを事前に作成してAWS IoTのRulesを作る人はあまりいないのでは?(Rulesに精通していれば話は別ですが。)Rulesを記述している途中で気づいて作っちゃうもの。自分がそうでした。

これです。

ここで作成するIAMユーザは、あくまでこのアクセス対象のDynamoDBにしかアクセス権限を持っていません。(当たり前っちゃ当たり前なんですが)

これに気付かずに別のタイミングで作成したDynamoDBアクセスのルールを流用し、設定後データを流し込もうとすると、エラーも出さずに「ただデータが入らない」という事態に陥ります。

IAMロールのポリシーの編集方法

そんなときは、IAM → ロール → ポリシーの編集 で以下のようにResourceを複数定義しましょう。

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "dynamodb:PutItem",
        "Resource": [
            "arn:aws:dynamodb:ap-northeast-1:XXXXXXXXXXXX:table/sensor_result",
            "arn:aws:dynamodb:ap-northeast-1:XXXXXXXXXXXX:table/sensorResult03"
        ]
    }
}

これで複数のDynamoDBテーブルにアクセスできるようになります。