LoginSignup
4
1

More than 1 year has passed since last update.

AWS Systems Manager Session Managerが繋がらないときのチェックリスト【プライベートサブネット・NATなし】

Last updated at Posted at 2021-06-08

はじめに

Session Managerを使用した接続で詰まったので、自分用に作成しました。

接続先インスタンスのNW状態やSession Managerの設定は以下を想定しています。

  • インスタンスはプライベートサブネットに配置
  • NATなし
  • S3,CloudWatch Losgにロギング
    • インスタンスが上記NW状態の場合、ロギングで使用するサービスのVPCエンドポイントも必要になるので注意
  • ログはKMSで暗号化
    • S3はAWSマネージドCMK、CloudWatch LogsはカスタマーマネージドCMK

私の場合、上記3つ目のロギング設定で、CloudWatch LogsのVPCエンドポイントを作成していなかったので接続できませんでした。

コンソール画面でSession ManagerのStart Sessionを始めると、プロンプトが表示されない黒い画面のままずっと変化がない上、エラー文が出ないので困ってしまいました。

本記事の情報は2021.6.8現在の情報ですので、参考にする際はお気をつけください。

チェックリスト

チェック項目 確認事項 根拠
エージェント 接続先インスタンスにSSMエージェントがインストールされているか。バージョンは必要とする機能をサポートしているか https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/ssm-agent-technical-details.html#ami-preinstalled-agent
インスタンスのIAMロール Session Managerを使用するために必要な権限を有しているか https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-create-iam-instance-profile.html
インスタンスのセキュリティグループ アウトバウンドは443を許可しているか(宛先:VPCエンドポイントが使用するNWインターフェースのプライベートIPアドレス。もちろんデフォルトの全て許可でも通る) https://aws.amazon.com/jp/premiumsupport/knowledge-center/systems-manager-ec2-instance-not-appear/
VPCエンドポイント 必要なVPCエンドポイントを作成しているか。Session Managerでロギングする場合、S3やCloudWatch LogsのVPCエンドポイントも必要。AWS KMSのエンドポイントは必要に応じて(暗号化を有効化する場合に必要) https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-systems-manager-vpc-endpoints/
VPCエンドポイントの場所 適切なVPC、サブネットに作成しているか 同上
VPCエンドポイントのセキュリティグループ インバウンドの443を許可しているか(ソース:インスタンスが存在するVPCのCIDR) 同上
VPCのDNS VPCのDNSホストネームとDNSサポートが有効になっているか 同上
CloudWatch LogsのCMKキーポリシー(CloudWatch LogsでKMSを使用している場合) キーポリシーでCloudWatch Logsをプリンシパルとして暗号・復号等のアクションを許可しているか。していない場合、Session Managerは接続できるがCloudWatch Logsのログが見れない(ログストリームはあるものの、中身が空の状態だった)。 検証した結果
キーポリシー抜粋
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.ap-northeast-1.amazonaws.com"
            },
            "Action": [
                "kms:Encrypt*",
                "kms:Decrypt*",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:Describe*"
            ],
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:ap-northeast-1:{Account-Id}:log-group:{CloudWatchLogs-LogGroupName}"
                }
            }
        }
インスタンスのIAMロール
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateControlChannel",
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenControlChannel",
                "ssmmessages:OpenDataChannel",
                "ssm:UpdateInstanceInformation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::{Bucket-Name}/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetEncryptionConfiguration"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey",
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:ap-northeast-1:{Account-Id}:key/xxxxxx-635f-4454-8f2f-xxxxxxxxxxx"
        }
    ]
}

上記kms:Decryptはセッションデータの暗号化をしなければ不要。
セッションデータの暗号化をする際のアクセス許可は以下のとおりにすればよい。

参考情報

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1