awsで "The policy is attached to 0 entities but it must be attached to a single role" エラーが出た場合の対処法

awsで "The policy is attached to 0 entities but it must be attached to a single role" エラーが出た場合の対処法:


はじめに

awsのCodeBuildでビルドプロジェクトを作成しようとしたときに、以下のエラーが出てプロジェクトが作成できないという現象に遭遇しました。

"The policy is attached to 0 entities but it must be attached to a single role"



スクリーンショット 2019-01-08 13.46.47.png


本エラーの発生手順と解決策について以下にまとめます。


結論

本エラーはCodebuild(awsサービス)が自動的に作成し、指定したIAMロールにアタッチしようとしているポリシーA(CodeBuildBasePolicy-プロジェクト名-リージョン名)と同一のポリシーA'が既に存在*しており、かつ、当該IAMロールからポリシーA'がデタッチされていると発生します。

* 過去に同一のプロジェクト名でCodeBuildプロジェクトを作成している場合に存在する

ポリシーA'(CodeBuildBasePolicy-プロジェクト名-リージョン名)を削除すれば、エラーは発生しなくなります。


エラーが出る時

以下の手順で本エラーが発生します(2019/01/08現在)。

1. Codebuildでプロジェクトを作成する(例としてプロジェクト名を"testproject"とする)

※「AWS CodeBuild にこのサービスロールの編集を許可し、このビルドプロジェクトでの使用を可能にする」にチェックを入れて作成する



スクリーンショット 2019-01-08 14.04.34.png


2. 作成したtestprojectを削除する

3. testproject作成時に指定したロール(ここではRoleForCodeBuild)から、testproject作成時にCodeBuildが自動的に作成・アタッチしたポリシーをデタッチする



スクリーンショット 2019-01-08 13.45.52.png


4.CodeBuildプロジェクト作成画面を開きさきほどと同じ名前(testproject)を入力して、作成しようとする (「AWS CodeBuild にこのサービスロールの編集を許可し、このビルドプロジェクトでの使用を可能にする」にチェックを入れる)

「ビルドプロジェクトを作成する」を押すと本エラーが発生します。


エラーの原因

CodeBuildが自動的に作成して、ユーザが指定したロールにアタッチしようとしているポリシーが既に存在し、かつ、それが指定したロールからデタッチされているため、です。

以下のようなケースで起こりうると思います。

CodeBuildプロジェクトを削除しても、その時にCodeBuildが自動的に作成したポリシーは残ります。既存のロールに既に不要なポリシーが残っている(アタッチされている)のは気持ち悪いためロールの管理画面で×ボタンを押してデタッチします。その後、忘れた頃にまたCodeBuildでプロジェクト作るときに、たまたま以前と同じ名前でプロジェクトを作成すると、本エラーが発生します。


エラーの解決策

CodeBuildが自動的に作成したポリシーを削除する。



スクリーンショット 2019-01-08 13.53.04.png


CodeBuildが自動的に作成したポリシーであり、かつ、プロジェクトごとに作成されるポリシーのため、以前に作成されたCodeBuildBasePolicy-xxxポリシーは削除して問題ない。


まとめ

"The policy is attached to 0 entities but it must be attached to a single role"エラーが発生する条件とその解決方法をまとめました。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)