[AWS IoT TwinMaker] AWS IoT SiteWise connector を削除しようとすると、ステータス “SYNC DELETING ERROR” となり削除できない場合の対処

結論:サービスロールの権限不足でした
2023.07.04

こんにちは、CX事業本部 Delivery部の若槻です。

以前に下記エントリで、AWS IoT TwinMaker の AWS IoT SiteWise asset sync を構成してみました。

今回は、その時構成した AWS IoT SiteWise connector を削除しようとすると、エラーとなり削除できなくなったので対処した話です。

事象

TwinMaker のコンソールから connector を Disconnect workspace により削除しようとすると、ステータス SYNC DELETING ERROR となり削除できない事象に遭遇しました。

調査、解決

コネクターを連携しているワークスペースの Source を見ると、こちらでもエラーステータスが示されています。Source を開いてみます。

すると詳細なエラーを確認することができました。

ワークスペースのサービスロール twinmaker-workspace-windfarm-XXXXXXXXXXXX-iad で syncJob の削除に必要な権限が不足しているとのことです。

An error occurred when cleaning up entity for deleting syncJob: not authorized to perform sts:AssumeRole. Please update trust policy to trust TwinMaker service for arn:aws:iam::XXXXXXXXXXXX:role/service-role/twinmaker-workspace-windfarm-XXXXXXXXXXXX-iad. Please see role example in https://docs.aws.amazon.com/iot-twinmaker/latest/guide/tm-sw-asset-sync-use.html.

必要な権限は下記で確認できます。

// trust relationships
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                 "Service": [
                    "iottwinmaker.amazonaws.com",
                    "iotsitewise.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

// permissions
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iottwinmaker:*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iotsitewise:Describe*",
                "iotsitewise:List*"
            ],
            "Resource": "*"
        }
    ]
}

しかし該当のサービスロールの権限を確認しようとしたところ、そもそもロール自体が存在していませんでした。何らかの拍子に削除してしまっていたようです。

必要な権限を付与したロールを作成します。

再度削除を試みます。

するとまた同じエラーで削除に失敗しました。

ここでエラーメッセージを再度確認すると、権限が不足しているサービスロールのパスは /service-role/ であると示されていることに気が付きました。

下記を参考にサービスロールを作成し直します。

aws iam create-role \
  --role-name twinmaker-workspace-windfarm-XXXXXXXXXXXX-iad \
  --path /service-role/ \
  --assume-role-policy-document file://trust.json

作成できました。/service-role/が ARN には付いて、ロール名には付かなり形式となるんですね。

再度削除を試みます。

すると今度は別のエラーが発生しました。

An error occurred when cleaning up entity for deleting syncJob: User: arn:aws:sts::XXXXXXXXXXXX:assumed-role/twinmaker-workspace-windfarm-XXXXXXXXXXXX-iad/AWSIoTTwinMaker is not authorized to perform: iottwinmaker:GetEntity on resource: arn:aws:iottwinmaker:us-east-1:XXXXXXXXXXXX:workspace/Windfarm/entity/0681a274-30d2-4a08-9a78-79227272b88c because no identity-based policy allows the iottwinmaker:GetEntity action. Please see role example in https://docs.aws.amazon.com/iot-twinmaker/latest/guide/tm-sw-asset-sync-use.html.

すでに存在しないエンティティ 0681a274-30d2-4a08-9a78-79227272b88c を削除しようとしてエラーとなっているようです。このエンティティは syncJob により作成されたエンティティでしたが、SiteWise 側で削除済みであるため、なぜまた削除しようとしているのかは不明です。

とここで、先程作成したサービスロールにこちらで示されている権限ポリシーをアタッチできていませんでした。

ロールにポリシーをアタッチします。

すると今度こそ削除することができました。

おわりに

AWS IoT SiteWise connector を削除しようとすると、エラーとなり削除できなくなったので対処した話でした。

適切な IAM ロールおよびポリシーが付与されていないという、とても初歩的な見落としによりハマってしまいました。Lambda 関数などと同様にサービスロールの概念が IoT TwinMaker にもあるという意識が抜け落ちていました。本件の解決のため AWS への問い合わせまで行ってしまったため、反省しきりです。

以上