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}-*"
]
}
]
}
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 CLI をインストール
brew install awscli
- エージェントをインストール
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/