SSM Agent を介してルートレベルコマンドへのアクセスを制限する
AWS Systems Manager Agent (SSM Agent) は、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス上でルートアクセス許可 (Linux) または SYSTEM アクセス許可 (Windows Server) を使用して実行されます。最高レベルのシステムアクセス許可が存在するため、SSM Agent にコマンドを送信する許可が付与されている信頼されたエンティティにはルートまたは SYSTEM アクセス許可があります (AWS において、AWS 内でアクションを実行してリソースにアクセスできる信頼されたエンティティはプリンシパルと呼ばれます。プリンシパルは AWS アカウントのルートユーザー、ユーザー、ロールのいずれかになります)。
このレベルのアクセスは、プリンシパルが承認済みの Systems Manager コマンドを SSM Agent に送信するために必要です。ただし、これによりプリンシパルが SSM Agent の潜在的な脆弱性を悪用して、悪意のあるコードを実行できるようになります。
特に、SendCommand および StartSession コマンドを実行するアクセス許可は慎重に制限する必要があります。適切な最初のステップは、組織内の選ばれたプリンシパルのみに各コマンドに対するアクセス権限を付与することです。ただし、プリンシパルがこれらのコマンドを実行できる対象マネージドノードを制限して、セキュリティ体制をさらに強化することをお勧めします。これは、プリンシパルに割り当てられた IAM ポリシーで実行できます。IAM ポリシーに特定のタグまたはタグの組み合わせが付けられたマネージドノードのみでコマンドを実行できるようにユーザーを制限する条件を含めることができます。
たとえば、テスト用と本番稼働用の 2 つのEC2 インスタンスフリートがあることを想定します。ジュニア (短経歴) エンジニアに指定された IAM ポリシーでは、そのユーザーが ssm:resourceTag/testServer
でタグ付けされたインスタンスでのみコマンドを実行できるように指定します。ただし、すべてのインスタンスへのアクセスが必要な、主任エンジニアの小さなグループでは、ssm:resourceTag/testServer
と ssm:resourceTag/productionServer
の両方でタグ付けされたインスタンスへのアクセス権を付与します。
この方法を使用すると、ジュニアエンジニアが本番稼働用インスタンスでコマンドを実行しようとした場合、アクセスを拒否されます。割り当てられている IAM ポリシーに ssm:resourceTag/productionServer
でタグ付けされたインスタンスへの明示的なアクセスが許可されていないからです。
詳細情報および例については、次のトピックを参照してください。