![[小ネタ] CloudFormationが自動で生成するIAMロール名は、スタック名や論理IDが長いとどのように切り詰められるのか確かめてみた](https://devio2024-media.developers.io/image/upload/f_auto,q_auto,w_3840/f_auto,q_auto/v1790870737/eyecatch/acbedf6qbbklkr30bzky.png)
[小ネタ] CloudFormationが自動で生成するIAMロール名は、スタック名や論理IDが長いとどのように切り詰められるのか確かめてみた
こんにちは、林です。
CloudFormationで RoleName を指定せずにIAMロールを作成すると、<スタック名>-<論理ID>-<ランダムな文字列> の名前が自動で生成されます。
スタック名と論理IDが長く、IAMロール名の上限の64文字を超える場合に、名前がどのように生成されるのかを確かめてみました。
先に結論
- ロール名に使用されるスタック名と論理IDは、合計で50文字まで
- スタック名と論理IDがどちらも25文字を超える場合は、それぞれ先頭の25文字が使用される
- IAMポリシーの
Resourceにrole/<スタック名>-*を指定している場合は、スタック名が切り詰められたロールが一致しないため、スタック名を25文字以下にするか、RoleNameを指定する
ドキュメントから分かること
自動で生成される名前は、スタック名、論理ID、一意のIDの組み合わせと記載されています。
RoleName の上限は64文字と記載されています。
上限を超える場合に、どの部分が何文字使用されるのかは、ドキュメントから確認できませんでした。
検証方法
東京リージョンで、AWS::IAM::Role を対象に検証しました。
RoleName を指定しないIAMロールを5つ定義したテンプレートを用意しました。
| 論理ID | 文字数 |
|---|---|
Role |
4 |
OrderWorkerExecutionRole |
24 |
OrderApiTaskExecutionRole |
25 |
OrderBatchJobExecutionRole |
26 |
OrderApiPipelineDeployStageCodeBuildProjectServiceRole |
54 |
このテンプレートから、スタック名の長さが異なる5つのスタックを作成しました。
| スタック名 | 文字数 |
|---|---|
dev-app-common |
14 |
stg-order-api-batch-base |
24 |
prod-order-api-monitoring |
25 |
prod-order-api-application |
26 |
stg-order-management-api-ecs-service-deploy-pipeline |
52 |
ロール名は describe-stack-resources で確認しました。
aws cloudformation describe-stack-resources --stack-name dev-app-common \
--query 'StackResources[].[LogicalResourceId,PhysicalResourceId]' --output text
結果
ロール名は、いずれも <スタック名>-<論理ID>-<ランダムな12文字> の形式でした。
ハイフン2つとランダムな12文字で14文字のため、スタック名と論理IDに使用されるのは合計50文字までです。
| スタック名と論理IDの文字数 | 切り詰め |
|---|---|
| 合計が50文字以下 | なし |
| 合計が50文字を超え、片方が25文字以下 | もう片方を残りの文字数まで |
| どちらも25文字を超える | それぞれ先頭の25文字まで |
組み合わせごとの結果です。
切り詰められた側と、切り詰め後の文字数を記載しています。
| スタック名 | 論理ID 4文字 | 24文字 | 25文字 | 26文字 | 54文字 |
|---|---|---|---|---|---|
| 14文字 | - | - | - | - | 論理ID 36 |
| 24文字 | - | - | - | - | 論理ID 26 |
| 25文字 | - | - | - | 論理ID 25 | 論理ID 25 |
| 26文字 | - | - | スタック名 25 | 両方 25 | 両方 25 |
| 52文字 | スタック名 46 | スタック名 26 | スタック名 25 | 両方 25 | 両方 25 |
切り詰められたロール名の例
スタック名が26文字、論理IDが25文字の組み合わせでは、スタック名の末尾の1文字が切り詰められました。
スタック名: prod-order-api-application
ロール名: prod-order-api-applicatio-OrderApiTaskExecutionRole-9w02y8Ta3WrL
スタック名の25文字目がハイフンの場合は、ハイフンが2つ連続しました。
スタック名: stg-order-management-api-ecs-service-deploy-pipeline
ロール名: stg-order-management-api--OrderApiTaskExecutionRole-IfDGwdvtuFnP
IAMポリシーでロールをワイルドカード指定している場合の注意点
特定のスタックが作成したロールに限定して操作を許可するときに、IAMポリシーの Resource にスタック名を前提にしたワイルドカードを指定することがあります。
iam:PassRole を許可する例です。
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::123456789012:role/prod-order-api-application-*"
}
スタック名が切り詰められたロールは、この Resource に一致しないため、許可の対象になりません。
prod-order-api-applicatio-OrderApiTaskExecutionRole-9w02y8Ta3WrL
スタック名の先頭25文字とワイルドカードで指定すると、今回のすべての組み合わせに一致しました。
arn:aws:iam::123456789012:role/prod-order-api-applicatio*
この指定は、先頭25文字が同じ別のスタックのロールにも一致します。
ロール名を固定する場合は、RoleName を指定します。
RoleName を指定したロールは、置き換えが発生する更新を実行できません。
まとめ
CloudFormationが自動で生成するIAMロール名の切り詰められ方を確かめてみました。
- ロール名に使用されるスタック名と論理IDは、合計で50文字まで
- スタック名と論理IDがどちらも25文字を超える場合は、それぞれ先頭の25文字が使用される
- IAMポリシーの
Resourceにrole/<スタック名>-*を指定している場合は、スタック名が切り詰められたロールが一致しないため、スタック名を25文字以下にするか、RoleNameを指定する
この記事がどなたかの参考になれば幸いです。最後までご覧いただきありがとうございました!
参考







