🍣

【Gamelift】フリートインスタンスにSSHログイン

2021/05/18に公開

フリートインスタンスにSSHログインしてみたので、手順をメモとして残しておきます。

参考:https://docs.aws.amazon.com/ja_jp/gamelift/latest/developerguide/fleets-remote-access.html

必要なもの

  • AWS CLI Version2
  • SSHクライアントツール

事前準備

AWS アクセスキーの取得と登録

AWSのIAMサービスよりコマンドライン用のアクセスキーを取得する。
IAM > ユーザー > ユーザー選択 > 認証情報タブ > アクセスキーを作成ボタンを押下

取得したアクセスキーをAWS CLIに登録します。

$ aws configure
AWS Access Key ID [None]: <取得したAccess Keyを入力>
AWS Secret Access Key [None]: <取得したSecret Access Keyを入力>
Default region name [None]: None
Default output format [None]: None

アクセス手順

インスタンスIDの取得

以下のコマンドを実行し、ログイン対象のインスタンスのIDを取得する。
$ aws gamelift describe-instances --fleet-id <fleet ID> --output json --region <region>
fleet IDはGameliftサービスのダッシュボードで確認できる。

下記のようなレスポンスが帰ってくる。「InstanceId」がインスタンスID。

{
    "Instances": [
        {
            "FleetId": "fleet-Xxxxxxxxxxxxxxxxxxxxxxxxxx",
            "FleetArn": "arn:aws:gamelift:",
	    "InstanceId": "i-XxxXXXXXX",
            "IpAddress": "YY.YYY.YYY.YYY",
            "DnsName": "~",
            "OperatingSystem": "AMAZON_LINUX",
            "Type": "c5.large",
            "Status": "Active",
            "CreationTime": "2021-05-13T10:04:35.028000+09:00",
            "Location": "ap-northeast-1"
        }
    ]
}

ログイン用の認証情報を取得

以下のコマンドを実行し、認証情報ファイル(pemファイル)を取得する。
aws gamelift get-instance-access --fleet-id <fleet ID> --instance-id <先の手順で取得したInstanceId> --region <region> --query "InstanceAccess.Credentials.Secret" --output text > MyPrivateKey.pem

SSH用のポートを開放

以下のコマンドを実行し、対象のインスタンスのSSHのポートを開放する。
aws gamelift update-fleet-port-settings --fleet-id <fleet ID> --inbound-permission-authorizations "FromPort=22,ToPort=22,IpRange=<作業PCのグローバルIPアドレス>/32,Protocol=TCP" --region <region> --output json

セキュリティリスクが低ければIpRange=0.0.0.0/0でもいい。
エラーが出力されなければ成功。

SSHログイン

以下コマンドでSSHログイン
ssh -i MyPrivateKey.pem gl-user-remote@<先の手順で取得したインスタンスのIpAddress>

SSH用のポートを閉塞

ログインが終わり必要がなくなれば、以下のコマンドで開いたポートを閉じる。
aws gamelift update-fleet-port-settings --fleet-id <fleet ID> --inbound-permission-revocations "FromPort=22,ToPort=22,IpRange=<開放時と同じ設定>,Protocol=TCP" --region <region> --output json

Discussion