LoginSignup
0
0

EC2 に SSM 接続するための IAM ポリシー設定サンプル

Posted at

2024年2月からの、AWS IPv4 の有料化に伴い、EC2 にパブリック IP を付与しなくなるケースが多くなりました。そして、そうすると、外側から気軽にEC2への SSH 接続ができなくなります。

その時に使えるのが SSM 接続です。

今回はそのサンプルポリシーを書き留めておきます。

SSM でアクセスできるようにする IAM ポリシー

[アカウントID][1台目のインスタンスID] [2台目のインスタンスID]などを書き換え、インスタンス数を増減することも可能。

また IP 制限も加えます。aws:SourceIp に許可する IP アドレスの範囲を追加してください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:document/AWS-StartSSHSession",
                "arn:aws:ec2:ap-northeast-1:[アカウントID]:instance/[1台目のインスタンスID]",
                "arn:aws:ec2:ap-northeast-1:[アカウントID]:instance/[2台目のインスタンスID]"
            ],
            "Condition": {
                "BoolIfExists": {
                    "ssm:SessionDocumentAccessCheck": "true"
                },
                "IpAddress": {
                    "aws:SourceIp": [
                        "【許可するIPアドレス】/32"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession",
                "ssm:ResumeSession"
            ],
            "Resource": [
                "arn:aws:ssm:*:*:session/${aws:username}-*"
            ]
        }
    ]
}

参考
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html

IAM ユーザー管理用

IAM ユーザーが自身で、パスワード、MFA を設定変更できるポリシー + MFA を設定しないとパスワード変更、アクセスキー生成、MFA の設定外は何もできない IAM ポリシーを作成し、
上記の IAM ユーザーにアタッチしていただけると、
ユーザー自身で、IAM User のパスワード更新、Aceess Key の更新を行うことができます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowViewAccountInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetAccountPasswordPolicy",
                "iam:ListVirtualMFADevices"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowManageOwnPasswords",
            "Effect": "Allow",
            "Action": [
                "iam:ChangePassword",
                "iam:GetUser"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowManageOwnAccessKeys",
            "Effect": "Allow",
            "Action": [
                "iam:CreateAccessKey",
                "iam:DeleteAccessKey",
                "iam:ListAccessKeys",
                "iam:UpdateAccessKey"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowUserToCreateVirtualMFADevice",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice"
            ],
            "Resource": "arn:aws:iam::*:mfa/*"
        },
        {
            "Sid": "AllowUserToManageTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:EnableMFADevice",
                "iam:GetMFADevice",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowUserToDeactivateTheirOwnMFAOnlyWhenUsingMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice"
            ],
            "Resource": [
                "arn:aws:iam::*:user/${aws:username}"
            ],
            "Condition": {
                "Bool": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        }
    ]
}

参考記事: MFA を有効化しないと、自身の認証設定以外は何もできなくなる IAM ポリシーサンプル
https://qiita.com/katzueno/items/fbcc2088829322f40d5c
私が作成したサンプルから、AccessKey, マネージメントコンソールパスワード、MFAの設定だけを取り出した者です。

Mac 側 (クライアント側) での設定

Mac のターミナルなどから、

ssh [1台目ホストネーム]
ssh [2台目ホストネーム]

で SSM を通じて EC2 にログインするための IAM User 設定です。

インストール手順

AWS マネージメントコンソールにログイン

  • IAM ユーザーのパスワード設定
  • MFA デバイスを設定して ARN を取得

Mac で、以下の設定ファイルを設定

IAM ユーザーの認証情報は [profile プロフィール名] をつけて設定する想定です。

.aws/config

[profile プロフィール名]
    region = ap-northeast-1
    mfa_serial = [MFA の ARNをここに書く]

.aws/credential

[profile プロフィール名]
aws_access_key_id = [アクセスキーを取得]
aws_secret_access_key = [アクセスシークレットを取得]

.ssh/config

# SSH demo
## 1台目 のインスタンス
host [1台目ホストネーム]
    ProxyCommand    sh -c "aws  --profile=[profile プロフィール名] ssm start-session --target [1台目のインスタンスID] --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
    IdentityFile    "[鍵を保存した場所]"
    IdentitiesOnly  yes
    TCPKeepAlive    yes
    User            ec2-user もしくは他の SSH ユーザー名
## 2台目 のインスタンス
host [2台目ホストネーム]
    ProxyCommand    sh -c "aws  --profile=[profile プロフィール名] ssm start-session --target [2台目のインスタンスID] --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
    IdentityFile    "[鍵を保存した場所]"
    IdentitiesOnly  yes
    TCPKeepAlive    yes
    User            ec2-user もしくは他の SSH ユーザー名

参考

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html
ポリシーは違う
https://baresupport.jp/blog/2022/03/14/82/

0
0
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
0
0