[AWS IoT TwinMaker] ワークスペースを削除しようとすると “Could not assume the role provided, verify permissions” というエラーとなる場合の対処

2023.10.19

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

AWS IoT TwinMaker を利用する際には、すべてのリソースの最上位のコンテナとなる「ワークスペース (Workspace)」をはじめにに作成し、その中にデジタルツインの構築に必要なリソースを作成していくことになります。

今回は、このワークスペースを削除しようとすると `Could not assume the role provided, verify permissions`` というエラーとなる場合の対処方法のご紹介です。

事象

AWS IoT TwinMaker のマネジメントコンソールからワークスペースを削除しようとすると、次のようにエラーが発生して削除に失敗してしまいます。

Unable to delete workspace "< ワークスペース名 >"
Could not assume the role provided, verify permissions

原因

ワークスペースは他の AWS サービスと連携するために実行ロール(Execution Role)を必ず持ちます。

ワークスペース削除時にエラーとなる原因としては、このワークスペース実行ロールが以下のいずれかの場合に Could not assume the role provided, verify permissions というエラーが発生します。

  1. 存在していない。
  2. ワークスペース削除に必要な権限が付与されていない。

今回の場合は、実行ロールの存在を確認してみると削除されてしまっていました。

$ aws iam get-role --role-name CdkSampleStack-WorkspaceExecutionRole1C2472E3-dqgfSRPpaH4x

An error occurred (NoSuchEntity) when calling the GetRole operation: The role with name CdkSampleStack-WorkspaceExecutionRole1C2472E3-dqgfSRPpaH4x cannot be found.

対処

次のような IAM ロールを作成します。ここでは CDK を使用していますが、好みの作成方法で構いません。

cdk-sample-stack.ts

import { aws_iam, Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';

export class CdkSampleStack extends Stack {
  constructor(scope: Construct, id: string, props: StackProps) {
    super(scope, id, props);

    const WORKSPACE_RESOURCE_BUCKET_NAME =
      'cdksamplestack-workspaceresourcebucketeecc84e2-1156w65bird4o';
    const WORKSPACE_EXECUTION_ROLE_NAME =
      'CdkSampleStack-WorkspaceExecutionRole1C2472E3-dqgfSRPpaH4x';
    const WORLSPACE_NAME = "CdkDemoWorkspace"

    // ワークスペース実行ロール
    new aws_iam.Role(this, 'WorkspaceExecutionRole', {
      roleName: WORKSPACE_EXECUTION_ROLE_NAME,
      assumedBy: new aws_iam.ServicePrincipal('iottwinmaker.amazonaws.com'),
      inlinePolicies: {
        readWorkspaceResourceBucket: aws_iam.PolicyDocument.fromJson({
          Version: '2012-10-17',
          Statement: [
            // ワークスペース削除時に必要な権限
            {
              Effect: 'Allow',
              Action: ['s3:DeleteObject'],
              Resource: [
                `arn:aws:s3:::${WORKSPACE_RESOURCE_BUCKET_NAME}/DO_NOT_DELETE_WORKSPACE_${WORLSPACE_NAME}`,
              ],
            },
          ],
        }),
      },
    });
  }
}

  • IAM ロール名は、コンソールから確認した実行ロールと同名とします。
  • IAM ロールの権限は、同じくコンソールから確認できるリソースバケット内の DO_NOT_DELETE_WORKSPACE_${WORLSPACE_NAME} オブジェクトを削除可能な権限を最低でも付与します。
  • リソースバケットは実際に存在している必要はありません。

これで、ワークスペースの削除が可能になります。

おわりに

AWS IoT TwinMaker でワークスペースを削除しようとすると `Could not assume the role provided, verify permissions`` というエラーとなる場合の対処についてでした。

私の場合は下記ブログで紹介しているように TwinMaker のリソースを CDK で作成した際に、依存関係の設定忘れなどによって CDK スタック削除時にリソースが中途半端に残ってしまった際によく今回の事象に遭遇します。

同様の事象に遭遇した方の参考になれば幸いです。

以上