EC2への接続(Session Manager/EC2 Instance Connect Endpoint)をSCPでIP制限してみた

EC2への接続(Session Manager/EC2 Instance Connect Endpoint)をSCPでIP制限してみた

SCPで、キーペアが不要なEC2インスタンスへの接続方法(Session Manager、EC2 Instance Connect、EC2 Instance Connect Endpoint)を特定のIPアドレスに制限する
2025.09.17

はじめに

EC2インスタンスに接続する際、キーペアが不要な接続方法をSCP(サービスコントロールポリシー)でIP制限してみました。

AWS IAM Identity Centerで管理している環境において、許可セットではAdminとRead権限のみを作成している運用の場合、EC2インスタンスへの接続を特定のユーザーに制限したいケースがあります。今回は、特定のIPアドレス以外からのアクセスを制限する方法を紹介します。

なお、キーペアが必要なEC2インスタンスの接続方法については、キーペアを配布しないことで接続者を制限できるため、本記事では省略します。

EC2インスタンスに接続する方法として、AWSドキュメントでは以下の方法が挙げられています。OSによって対応可否があります。

  • SSH client
  • EC2 Instance Connect
  • PuTTY
  • RDP client
  • Fleet Manager
  • Session Manager
  • EC2 Instance Connect Endpoint
    cm-hirai-screenshot 2025-09-11 11.35.35

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html

この中でキーペアが不要な接続方法は、以下の3つです。

  • Session Manager
  • EC2 Instance Connect
  • EC2 Instance Connect Endpoint

今回は、上記3つの接続方法について、特定のIPアドレス以外からのアクセスを制限するSCPを作成して制限します。

SCP

適用するSCPは以下です。

各EC2の接続方法において、特定のIPアドレス以外からのアクセスの場合、接続を拒否します。

SSM Session Manager
対象アクション:ssm:StartSession

EC2 Instance Connect
対象アクション:ec2-instance-connect:SendSSHPublicKey

EC2 Instance Connect Endpoint
対象アクション:ec2-instance-connect:OpenTunnel

			
			{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "ec2-instance-connect:OpenTunnel",
        "ec2-instance-connect:SendSSHPublicKey"
      ],
      "Resource": "*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "xx.xx.xx.xx/32",
            "xx.xx.xx.xx/24"
          ]
        }
      }
    },
    {
      "Effect": "Deny",
      "Action": "ssm:StartSession",
      "Resource": "arn:aws:ssm:*:*:document/SSM-SessionManagerRunShell",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": [
            "xx.xx.xx.xx/32",
            "xx.xx.xx.xx/24"
          ]
        }
      }
    }
  ]
}

		

動作検証

SCPをアカウントに適用後、許可されていないIPアドレスからEC2に接続を試してみます。

Session Manager

以下の記事を参考に接続可能なセットアップを行い、許可されたIPアドレスからは正常に接続できることは確認しました。
https://dev.classmethod.jp/articles/ec2-access-with-session-manager/

許可されていないIPアドレスからコンソールで接続を試してみます。cm-hirai-screenshot 2025-09-11 13.06.06

以下のエラーが発生しました。
cm-hirai-screenshot 2025-09-05 17.21.33

CloudTrailログでもDenyされていることを確認できました。

			
			{
  ~中略~
    "eventSource": "ssm.amazonaws.com",
    "eventName": "StartSession",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "aa.aa.aa.aa",
    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::アカウントID:assumed-role/cm-hirai.yuji/cm-hirai.yuji is not authorized to perform: ssm:StartSession on resource: arn:aws:ssm:ap-northeast-1:アカウントID:document/SSM-SessionManagerRunShell with an explicit deny in a service control policy",

		

なお、AWS CloudShellから実行した場合も同様にエラーとなります。

			
			aws ssm start-session --target i-0f86c13a06d6c00a1

An error occurred (AccessDeniedException) when calling the StartSession operation: User: arn:aws:sts::アカウントID:assumed-role/cm-hirai.yuji/cm-hirai.yuji is not authorized to perform: ssm:StartSession on resource: arn:aws:ssm:ap-northeast-1:アカウントID:document/SSM-SessionManagerRunShell with an explicit deny in a service control policy

		

cm-hirai-screenshot 2025-09-11 13.27.53

EC2 Instance Connect

以下の記事を参考に接続可能なセットアップを行い、許可されたIPアドレスからは正常に接続できることは確認しました。

https://dev.classmethod.jp/articles/amazon-ec2-instance-connect-setup-and-test/

許可されていないIPアドレスからコンソールで接続を試してみます。
cm-hirai-screenshot 2025-09-11 13.06.00

以下のエラーが発生しました。

Failed to connect to your instance
Access denied by EC2 Instance Connect. Either your AWS credentials are not valid or you do not have access to the EC2 instance.

cm-hirai-screenshot 2025-09-05 17.23.34

CloudTrailログでもDenyされていることを確認できました。

			
			{
  ~中略~
    "eventSource": "ec2-instance-connect.amazonaws.com",
    "eventName": "SendSSHPublicKey",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "aa.aa.aa.aa",
    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::アカウントID:assumed-role/cm-hirai.yuji/cm-hirai.yuji is not authorized to perform: ec2-instance-connect:SendSSHPublicKey on resource: arn:aws:ec2:ap-northeast-1:アカウントID:instance/i-xxx with an explicit deny in a service control policy"

		

EC2 Instance Connect Endpoint

以下の記事を参考に接続可能なセットアップを行い、許可されたIPアドレスからは正常に接続できることは確認しました。

https://dev.classmethod.jp/articles/update-ec2-instance-connect-endpoint/

許可されていないIPアドレスからコンソールで接続を試してみます。

cm-hirai-screenshot 2025-09-11 13.06.12

EC2 Instance Connectと同じエラーが発生しました。

Failed to connect to your instance
Access denied by EC2 Instance Connect. Either your AWS credentials are not valid or you do not have access to the EC2 instance.

cm-hirai-screenshot 2025-09-05 17.23.34

CloudTrailログでもDenyされていることを確認できました。

			
			{
  ~中略~
    "eventSource": "ec2-instance-connect.amazonaws.com",
    "eventName": "OpenTunnel",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "aa.aa.aa.aa",
    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::アカウントID:assumed-role/cm-hirai.yuji/cm-hirai.yuji is not authorized to perform: ec2-instance-connect:OpenTunnel on resource: arn:aws:ec2:ap-northeast-1:アカウントID:instance-connect-endpoint/eice-xxx with an explicit deny in a service control policy",

		

まとめ

SCPを使用することで、キーペアが不要なEC2インスタンスへの接続方法(Session Manager、EC2 Instance Connect、EC2 Instance Connect Endpoint)を特定のIPアドレスに制限できることを確認しました。

この方法により、IAM Identity Centerで管理されている環境において、許可セットの権限を変更することなく、特定の場所からのみEC2への接続を許可する運用が可能になります。

参考

https://dev.classmethod.jp/articles/iam-ssm-connection-restrict/

この記事をシェアする

FacebookHatena blogX

関連記事