【やってみた】利用者毎にEC2に自動でタグ付け

記事タイトルとURLをコピーする

サーバーワークス カスタマーサポート課 伊藤です。

いつもはZabbixの記事を中心にお送りしておりますが、
今回はEC2への自動タグ付けについてお知らせします。

教育現場や、社内のリソース管理など1つのAWSアカウントを複数人で使う場合、IAMのポリシーでConditionパラメータを指定することで、特定のタグを持ったリソースだけを操作するという手法がよく使われます。

ですが、このタグを付け忘れる事などがよくあります。
そこで今回は、EC2インスタンスを作成したユーザー情報を自動的にタグに設定し、そのそのタグが付いているリソースだけを操作可能とする方法をご紹介します。

この手法は、AWSのSecurity Blogで紹介されているものです。

設定方法

  1. CloudFormation による展開
    CloudFormation template をダウンロードして、CloudFormationの Create stackからアップーロードします。2016-10-04_16h21_41
  2. CloudFormationによって、設定に必要なリソースが展開されます。
  3. IAMユーザを作成し、CloudFormationによって作成されたIAMポリシ-を付与するもしくはIAMグループに所属させます。2016-10-04_17h40_19
  4. IAMユーザでEC2インスタンスを作成します。
  5. Lambdaにより、自動的にEC2,EBS,ENIにタグが設定されます。2016-10-04_17h42_33 2016-10-04_17h43_58 2016-10-04_17h44_42
  6. このユーザでは、自分が作成したEC2以外は操作することができません。自分が作成していないインスタンスを操作しようとするとエラーが返されます。2016-10-04_17h47_38

これで、自分で作成したインスタンスしか操作できないユーザを作成することが出来ました。

中身解説

  • IAMポリシー
    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Action": [
    "ec2:Describe*",
    "ec2:RunInstances"
    ],
    "Resource": [
    "*"
    ],
    "Effect": "Allow",
    "Sid": "LaunchEC2Instances"
    },
    {
    "Condition": {
    "StringEquals": {
    "ec2:ResourceTag/PrincipalId": "${aws:userid}"
    }
    },
    "Action": [
    "ec2:StopInstances",
    "ec2:StartInstances",
    "ec2:RebootInstances",
    "ec2:TerminateInstances"
    ],
    "Resource": [
    "*"
    ],
    "Effect": "Allow",
    "Sid": "AllowActionsIfYouAreTheOwner"
    }
    ]
    }
    IAMポリシ-ではConditionのなかでuseridを指定して、Stop,Start,Reboot,Terminateを許可しています。
    このままですと、インスタンスのリソース状況が確認出来ないので、ポリシーを修正するか、CloudWatchReadOnlyAccessポリシ-を追加されることをおすすめします。
  • CloudWatch Event2016-10-04_18h00_54

    CloudWatch Eventでは、New-EC2Resource-EventをトリガーにしてLambda関数を実行するように設定されています。
  • Lambda関数
    2016-10-04_18h03_36 2016-10-04_18h04_09
    Lambda関数はPython2.7で実装されており、Ownerタグ(IAMユーザ名)とPrincipalIdタグ(IAMユーザID)をEC2関連リソースに対して設定するようになっています。

まとめ

AWSのSecurity Blogで公開されているCloudFormation template を利用することで、EC2インスタンスへのタグ付けを自動化することが出来ました。
この設定を利用することで、作成した人だけがEC2を操作できる環境を構築することが出来ます。
ハンズオン環境や、学校など、みんなで同じAWSアカウントを使いながら、他人にEC2を操作されたくない環境などで役に立つのではないでしょうか。

CloudFormation template やIAMロールを修正することで、RDSでも同様の仕組みを構築することもできます。
なお、CloudFormation template の権限では、セキュリティグループを編集することはできないので、
ネットワーク管理者とサーバ管理者が分かれているような環境ではさらにおすすめです。