AWS::IAM::InstanceProfileの理解

AWS::EC2::Instanceを立ち上げるときに指定できるIamInstanceProfileがよく分からなかった。

  • セキュリティグループやネットワークACLでアクセス制御できるのに...
  • EC2インスタンスからS3へアップロードするとしても、Webアプリケーション内でAWSのユーザ(アクセスキーID、シークレットアクセスキー)を指定すればできるのに...

こんな感じ?不安だけど、今んところの理解を次にまとめてみた。

そもそもAWSのユーザができることは「AWSを操作するAPIをたたくこと」

起動したEC2インスタンスの中に入っていろんな操作はできない。RDSで起動したMySQLの操作は「MySQLクライアント」から行う。

ロールとプロファイルについて

  • S3のバケット一覧が参照できるよ、S3へアップロードできるよという権限の集まり
  • ユーザにロールをつけておけば、その権限で許可されている操作ができる
  • プロファイルは複数のロールをまとめたもの

結局、プロファイルをEC2インスタンスにつけると何が良いのか

  • EC2インスタンス自体がS3やCloudSearchを操作できる権限を得る
  • アプリケーションのソースコードにユーザのアクセスキーIDとシークレットアクセスキーを含める必要が無くなる

そもそもユーザは退職などでカジュアルに削除することがあるので、アクセスキーIDとシークレットアクセスキーをソースコードにハードコーディングするのは危険。動かなくなる恐れがある。

あと、あまりユーザに直接ロールをつけたりしない。ユーザをグループでまとめ、グループに対してロールをつけるとよい。