mackerelのAWSインテグレーション用IAM Userをcloudformationで作る

  • 0
    いいね
  • 0
    コメント
    この記事は最終更新日から1年以上が経過しています。

    概要

    Mackerelいいですよね。導入がとても楽です。
    https://mackerel.io/ja/

    少し前にAWSからメトリックを取得して、Mackerelでモニタリングに利用できる機能ができていました。
    https://mackerel.io/ja/blog/entry/weekly/20160513
    https://mackerel.io/ja/docs/entry/integrations/aws

    ドキュメントを読むと、下記のようなことをやれば良いみたいです。

    1. AWS上にメトリックのRead権限を持ったIAM Userを作成
    2. IAM UserのアクセスキーをMackerelに登録
    3. (+α)特定のタグを含むAWSリソースだけ登録したい場合、タグ情報を取得できる権限を1のIAM Userに付与する

    タグを指定しない場合、対象となるリソース全てを取得してしまいます。
    なので、今回はELBのメトリックを取得できるIAM Userを作ってみました。

    IAM Userの作成

    cloudformation定義

    下記のようなcloudformationの定義でcreate-stackを行えば終わりです()

    {
      "AWSTemplateFormatVersion" : "2010-09-09",
      "Description" : "IAM User for Mackerel's AWS Integration",
      "Resources" : {
        "MackerelAWSIntegrationUser" : {
          "Type" : "AWS::IAM::User",
          "Properties" : {
            "ManagedPolicyArns": [
              "arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess"
            ]
          }
        },
        "MackerelAWSIntegrationIamGetUser" : {
          "Type" : "AWS::IAM::Policy",
          "Properties" : {
            "PolicyName" : "MackerelAWSIntegrationIamGetUser",
            "PolicyDocument" : {
              "Statement": [{
                "Effect"   : "Allow",
                "Action"   : "iam:GetUser",
                "Resource" : {"Fn::GetAtt": ["MackerelAWSIntegrationUser", "Arn"]}
              }]
            },
            "Users": [{"Ref": "MackerelAWSIntegrationUser"}]
          },
          "DependsOn": "MackerelAWSIntegrationUser"
        }
      },
      "Outputs" : {
        "MackerelAWSIntegrationUser" : {
          "Value" : {"Ref": "MackerelAWSIntegrationUser"},
          "Description" : "MackerelAWSIntegrationUser"
        },
        "MackerelAWSIntegrationIamGetUser" : {
          "Value" : { "Ref" : "MackerelAWSIntegrationIamGetUser" },
          "Description" : "MackerelAWSIntegrationIamGetUser"
        }
      }
    }
    

    create-stackの実行

    $ls
    mackerel.json
    
    $aws cloudformation create-stack --stack-name "MackerelIntegrationIamUser" --template-body file://./mackerel.json --capabilities CAPABILITY_IAM
    {
        "StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxxx:stack/MackerelIntegrationIamUser/6b208770-3d2f-11e6-a5ad-50a68a455c82"
    }
    
    $aws cloudformation describe-stacks --stack-name "MackerelIntegrationIamUser"
    {
        "Stacks": [
            {
                "StackId": "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxxx:stack/MackerelIntegrationIamUser/6b208770-3d2f-11e6-a5ad-50a68a455c82",
                "Description": "IAM User for Mackerel's AWS Integration",
                "Tags": [],
                "Outputs": [
                    {
                        "Description": "MackerelAWSIntegrationUser",
                        "OutputKey": "MackerelAWSIntegrationUser",
                        "OutputValue": "MackerelIntegrationIamUse-MackerelAWSIntegrationUs-1CJ6RWI4E6O1T"
                    },
                    {
                        "Description": "MackerelAWSIntegrationIamGetUser",
                        "OutputKey": "MackerelAWSIntegrationIamGetUser",
                        "OutputValue": "Macke-Mack-1IX625ZIS1EWV"
                    }
                ],
                "CreationTime": "2016-06-28T12:54:15.152Z",
                "Capabilities": [
                    "CAPABILITY_IAM"
                ],
                "StackName": "MackerelIntegrationIamUser",
                "NotificationARNs": [],
                "StackStatus": "CREATE_COMPLETE",
                "DisableRollback": false
            }
        ]
    }
    

    結果のAWSコンソール

    AWS コンソール

    感想とか

    これで出来たIAM Userのアクセスキーをぽちぽち手動でMackerelの管理画面に入れればELBが1 Hostとして扱われてメトリックが表示されます。
    便利!
    ここもmkrコマンドでできたら楽なのかなぁとか思ったけど、今のところそんな大変じゃないので、まあいっかという感じです。