rsync over sshをAWS Session manager経由で使う設定方法

AWS

要件

  • AWS Systems Manager Session Manager (以降AWS Session Manager)経由でEC2インスタンスにログインする。
  • AWS Session Manager経由でログインするとssm-userでログインされてしまうが、IAMごとに別のユーザでログインする。
  • rsync over sshできる。

前提となる環境

AWS上でのIAM設定

  • policyを作成する。
    • policyレベルでユーザを指定したい場合は、TagsにSSMSessionRunAsを追加してValueにユーザ名を指定する。

特定のインスタンスにSession Manager経由でログインできるようにする例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ssm:StartSession",
            "Resource": [
                "arn:aws:ssm:*:*:document/AWS-StartSSHSession",
                "arn:aws:ec2:ap-northeast-1:*:instance/i-xxxxxxxxxxxxxxxx"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeSessions",
                "ssm:GetConnectionStatus",
                "ssm:DescribeInstanceProperties",
                "ssm:DescribeInstanceInformation",
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "ssm:TerminateSession",
            "Resource": "arn:aws:ssm:*:*:session/${aws:username}-*"
        }
    ]
}
  • 個人のIAMアカウントを作成する
    • 上で作ったpolicyをattachする。
    • IAMユーザレベルでshellアカウントを指定する場合はSSMSessionRunAsタグを設定して、値にログインさせたいsshアカウントを指定する

ログイン先端末での設定

  • 公開鍵をログインしたいホスト上のログインさせたいユーザのauthorized_keysに登録しておく。

ログイン元端末での設定

  • 必須プログラム
    • aws-cli
    • aws session manager plugin
  • aws configure などを使ってcredentialを設定ファイルに記述しておく
  • AWS Session managerを使ってi-xxxxxxxxxxxxxxxxにssh接続テストしてみる
    • aws ssm start-session --target i-xxxxxxxxxxxxxxxx
  • ~/.ssh/config へ以下の設定を追加する
    • もし、複数のprofileを使っている場合は AWS_PROFILE 環境変数に設定してsshコマンド経由でも同じawsのcredentialを使うように注意する必要がある。
host i-* mi-*
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
  • sshコマンドで接続してみる
    • ssh username@i-xxxxxxxxxxxxxxxx
    • SSMSessionRunAsで設定したユーザ名を指定する必要がある。
  • rsyncコマンド経由でファイルを転送してみる
    • rsync -aruzv -e ssh <source> <username>@i-xxxxxxxxxxxxxxxxx:<destination>

考察

  • rsyncをする場合はAWS Session Managerの設定と、sshの設定の両方が必要になる。

コメント