[運用小ネタ] RAMとECSのTag機能でECSインスタンスを保護する

皆さん、こんにちは。ソリューションアーキテクトの Q (@joe_qiubinbin)です。
記念すべき第一回目のブログ投稿になります。

背景

先日弊社のSAから webコンソールからの操作をソースIPアドレスで制限する 方法を紹介しました。今回はRAM (Resource Access Managementの略)とECSのTagを活用したECSインスタンスを保護する方法を紹介させていただきます。

システムをクラウド上に構築する際に、複数の環境(商用、検証等)をVPCで分けて、1つのアカウントで管理するやり方がありますが、管理するECSインスタンスの数が増えるとともに、ECSの管理画面がカオスになりがちです。

下記のように、Tag機能を活用して、Tagごとにインスタンスを表示することもできますが、(人はミスを犯すもので)手運用の際にうっかり商用のECSインスタンスを停止したり、削除したりする可能性が十分あります。

ECSインスタンスの保護方法

ちょっとした運用ネタになりますが、ECSインスタンスに対する誤操作はRAMとECSのTagで防ぐことができます。

RAMはAlibaba Cloudのリソースへのアクセスを制御するサービスになります。RAMの詳細については、弊社公式のドキュメントにてご確認ください。

ECSインスタンスを保護する方法は、下記のようなRAMポリシーを対象ユーザーに適応するだけです。
※ “< >”で囲まれている変数は自分の環境に合わせてください

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "ecs:DeleteInstance",
        "ecs:RebootInstance",
        "ecs:StopInstance"
      ],
      "Resource": "acs:ecs:<region>:<accountId>:instance/*",
      "Effect": "Deny",
      "Condition": {
        "StringEquals": {
          "ecs:tag/<tageName>": "<value>"
        }
      }
    }
  ]
}

このサンプルポリシーは特定のTagをつけられているECSに対して、ユーザーがリリース(DeleteInstance)、再起動(RebootInstance)、停止(StopInstance)ができないようにするポリシーになっています。

ActionやResourceなどの要素の説明は「ポリシーの基本要素」にてご確認ください。
Condition要素には、ポリシーが適応される 条件 を設定することができます。このサンプルポリシーですと、特定のTagをつけられているのが条件になります。

実際にポリシーが適用されるユーザーが保護対象のECSインスタンスに対して、リリース、停止、再起動をやってみると、下記のように操作する権限がないと表示されます。

注意点

サンプルポリシーでは、ECSインスタンスを保護するためのポリシーだけ定義しています。このポリシーが適応されても、(悪意のある)ユーザーがわざっとTagを削除してから、ECSインスタンスをリリースしたり、停止したりすることができてしまいます。いわゆる内部犯行はこのポリシーだけでは防ぐことができません。必要に応じて、対象ユーザーにTagの削除やRAMポリシーの変更を禁止するように設定していただければと思います。

最後

今回はRAMとECSのTag機能でECSインスタンスを保護する方法について、紹介させていただきました。

セキュリティは開発スピード、運用保守のしやすさとのトレードオフです。RAM権限がゆるすぎると、セキュリティ事故に繋がります。逆にRAM権限が厳しすぎると、権限を管理する側も開発や運用側も疲弊してしまうおそれがあります。RAMポリシーはセキュリティの要件に応じて、適切に設計しましょう。

弊社ではAlibaba Cloudを活用したソリューションの提案や導入支援を行っております、Alibaba Cloudに興味ある、もしくはAlibaba Cloudの導入をご検討されている場合は是非公式の「お問い合わせ」にてご連絡ください。

 

 

 

 

 

この記事をシェアする