こんにちは、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
というエラーが発生します。
- 存在していない。
- ワークスペース削除に必要な権限が付与されていない。
今回の場合は、実行ロールの存在を確認してみると削除されてしまっていました。
$ 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 スタック削除時にリソースが中途半端に残ってしまった際によく今回の事象に遭遇します。
同様の事象に遭遇した方の参考になれば幸いです。
以上