0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS】CloudFormation実行時のロールの仕組みを理解〜コンソールではロールなしで動くのに、CodePipelineだと必要なのはなぜ?〜

Posted at

はじめに

CloudFormationについて、

  • CodeDeployでデプロイするときは、CloudFormation用のロールを指定している
  • 一方で、コンソールから直接実行したときは、ロールを指定しなくても各種リソースを作成できた

ということがあり、疑問に思いました。これって、どういう違いなんでしょうか?

この記事では、その「ロールが必要になるケースとならないケースの違い」を明確に整理します。


CloudFormationの権限使用パターンは2つある

CloudFormationがAWSリソースを作成・更新する際、2つの権限パターンがあります。

ケース ロール指定 CloudFormationが使う権限な利用シーン
デフォルト(指定なし) スタックを作成したIAMユーザーまたはAssumed Roleの権限 コンソールやCLIから直接作成する場合
サービスロールを使用(指定あり) 指定したIAMロールの権限 CodePipelineやCodeDeployなど、他サービス経由の場合

【デフォルト】コンソールやCLIでの動作:ユーザー権限を使用

CloudFormationをコンソールから直接作成した場合(コンソールでサービスロールを指定しなかった場合)、
実行ユーザーのIAM権限が代わりに使われます。

つまり:

ユーザーが、S3やEC2を作成できる権限を持っていればOK ということです。

  • 参考:AWS公式ドキュメントより

If you don’t specify a service role, AWS CloudFormation uses the credentials of the user who is creating the stack.


【サービスロールを使用】 CodeDeploy経由での実行:サービスロールが必要

CodePipelineやCodeDeployのようなサービスからCloudFormationを呼び出す場合は話が変わります。
これらのサービスはCloudFormationがリソースを直接操作する権限を持たないためです。

このため、CloudFormationが自分でリソースを作成するための サービスロール を指定する必要があります。

↑ CodPpipeline作成時、ユーザーに代わってCloudFormationがリソースを作成するための許可の記載を求められる。


まとめ

  • CloudFormationは サービスロール を明示しない場合、呼び出し元のIAMユーザー権限を使う

  • しかしCodePipelineやCodeDeployなど、他サービスが代わりに実行する場合はCloudFormation専用のサービスロールが必須

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?