👽

CFnスタック作成前にチェックを求められる「アレ」=「CAPABILITY_●●」についての理解をまとめました

2022/10/23に公開

[スタックの作成]ボタンの直前でチェックを求められるあの部分

「The following resource(s) require capabilities: [AWS::xx::xx]」

理由もわからず署名したり、承諾しているのはどの場面でもよくないので調べてみました。
同じチェックするのでも出来れば意味を把握してからにしたいです。

「CAPABILITY」の直訳

(…の)能力、才能、手腕、のできること、能力、(物のもつ)特性、性能、(人・物のもつ) 伸びる素質、将来性、(国家のもつ)戦闘能力
※Weblio検索結果

“capability”は直訳すれば「能力」となりますが、グローバルビジネスの場面で使われると(その会社の)「専門性 expertise」「強み strength」といった意味に近くなります。
参考

単語の意味を考えても残念ながらバシっとくるイメージは湧いてこない...ですね。

「CAPABILITY_●●」の種類は公式ドキュメントによると4種類

公式ドキュメントに以下、4種類が存在する事が記載されています。

・CAPABILITY_IAM
・CAPABILITY_NAMED_IAM
・CAPABILITY_RESOURCE_POLICY
・CAPABILITY_AUTO_EXPAND

CAPABILITY_IAM 及び CAPABILITY_NAMED_IAM

以下Typeが含まれる場合に該当します。

AWS::IAM::AccessKey
AWS::IAM::Group
AWS::IAM::InstanceProfile
AWS::IAM::Policy
AWS::IAM::Role
AWS::IAM::User
AWS::IAM::UserToGroupAddition

今回は例としてどちらもIAMRoleをリソースに含めた例です。
違いは「カスタムで名前をつけたかどうか」だそうです。

以下"RoleName:"項目の有無で表示が変わりました。

・CAPABILITY_IAM("RoleName:"設定無)

・CAPABILITY_NAMED_IAM("RoleName:"設定有)

CAPABILITY_RESOURCE_POLICY

同様に以下Typeが含まれる場合に該当するようです。

AWS::Lambda::LayerVersionPermission
AWS::Lambda::Permission
AWS::Events::EventBusPolicy
AWS::IAM:Policy
AWS::ApplicationAutoScaling::ScalingPolicy
AWS::S3::BucketPolicy
AWS::SQS::QueuePolicy
AWS::SNS::TopicPolicy

AWS::IAM:Policyは上と重複していますが、他は並びを見ると理解出来そうです。

ただ私の手元でAWS::S3::BucketPolicyやAWS::SNS::TopicPolicyの作成を試みた所、他の3つのような確認チェックボックスはコンソール(GUI)上では登場しませんでした。

CAPABILITY_AUTO_EXPAND

公式ドキュメントを見るとこちらは以下Typeが含まれる場合に該当するようです。

AWS::Include(※参考記事)
AWS::Serverles

ドキュメント上ではTypeについて記載は見つからなかったものの、「ネストされたスタック」がある場合という事で、

AWS::CloudFormation::Stack もここに該当します。

CAPABILITY_AUTO_EXPANDに該当する場合の表示例。

※ちなみに直訳するとAUTO_EXPAND=自動_拡大。

結局なんの為にチェックが必要なのか

場合によっては、AWS CloudFormation がスタックを作成するために、スタックテンプレートに特定の機能が含まれていることを明示的に認める必要があります。

「InsufficientCapabilitiesエラーが起きるから」

どれも「そういう事になっている」説明ではありますが「なぜチェックをしないとエラーが起きるのか」に対する本質的な回答は見られませんでした。

ただこちらの方も

(曖昧な回答で恐縮ですが)この内容からAWSのアカウントに接続する際のセキュリティの意味を込めているのだと思われます。

と考察されています。

つまり「本当にいいですか?あなたわかってやっていますか?わかってるよって言わないと危ないから先に進めてあげられないよ」としてくれているだけなのだと解釈しました。

そもそもこちらの記事を読んでいて気付きましたが、何もCloudFormationで作成した場合だけでなく、IAMに関わるエラーだという事ですね。

さらに、

AWS CLIでも同様にIAM関連の処理を入れる場合はパラメータ(CAPABILITY)で指定しないとエラーになるので注意.

とのことなので、CLI利用時も意識が必要そうでした!

以上でした!

皆様の理解の一助になれば幸いです。良い週末をお過ごしください^^

Discussion