OSログイン
IAMでSSHログインを制御できる
IAMでSSH鍵を管理する
GCEインスタンスに特定のユーザーからログインしたい時SSH鍵をインスタンスに登録する必要がある→鍵管理の面倒さ
コンセプトとしてはSSHキーの登録とローテーションをIAMユーザに紐付けて行ってくれるということ
インスタンスへの接続にSSH以外の技術を使うわけではなく、それをラップして便利にするということ→接続には当然sshキーは使用される
hiroki.icon結局GCEインスタンスに最初に接続する時にはSSH鍵を使用しているよね!?
gcloudコマンドから接続するときは自動でsshキーを生成してくれるだけで
→ある一つのSSHキーを大事に保管してそれを使いまわして接続する、というのではなく、IAMの認証ができればそのSSHキーをGCEインスタンスに簡単に登録してくれて便利といった感じの便利さということなのか
gcloud コマンドライン ツールまたは OS Login API を使用して SSH 認証鍵を自分のアカウントに追加できます。
まぁ逐一GCEインスタンスに追加されたSSHがOSログインの機能によってIAMに紐付いてrootとかLinuxユーザと自動で紐付いてくれるというのは確かに便利だ
紐づき関係
IAM⇔OSログインのsshキー達⇔GCEインスタンスのSSHとLinuxユーザ
結論
OSログインを使っても接続する時にSSHキーは必要である
gcloudコマンド
gcloud compute os-login ssh-keys add --key-file=... --ttl=30m
IAMアカウントにsshキーを関連付ける。30分で期限切れ
code:http
{
"key": "SSH_KEY",
"expirationTimeUsec": "EXPIRATION_TIMESTAMP"
}
gcloud compute os-login describe-profile
自分のユーザ名とホームディレクトリ、紐付いてるsshキーを確認する
code:txt
name: '110124307276415694163'
posixAccounts:
- accountId: ohnohiroki
gid: '1088183115'
homeDirectory: /home/scala1117_gmail_com
name: users/scala1117@gmail.com/projects/ohnohiroki
operatingSystemType: LINUX
primary: true
uid: '1088183115'
username: scala1117_gmail_com
sshPublicKeys:
...
gcloud compute os-login ssh-keys list
osログインに登録されている鍵を一覧する
サービスアカウントからOSログインする実験
目的
roles/compute.osLoginが付与されるとOSログインできるがrootになれない
roles/compute.osAdminLoginが付与されるとOSログインできてrootになれる
どちらも付与されないとOSログイン(ssh接続)できない
手順
サービスアカウントを作成する
インスタンスを作成してカスタムメタデータにenabel-oslogin=TRUEを設定してOSログインを有効化する
gcloud compute instances add-metadata VM_NAME --metadata enable-oslogin=TRUE
/icons/point.iconこの時にサービスアカウントを設定したインスタンス(instance-sa)とサービスアカウントなしのインスタンス(instance-nosa)二つ作成する
gcloud compute ssh instancename→権限エラー
saにroles/compute.osLoginを付与する
gcloud compute ssh instance-sa→インスタンスに設定されているSAを使用する権限エラー
gcloud compute ssh instance-nosa→ログイン成功
sudo su - rootには失敗する
saにroles/compute.osAdminLoginを付与する
gcloud compute ssh instance-sa→インスタンスに設定されているSAを使用する権限エラー
gcloud compute ssh instance-nosa→ログイン成功
sudo su - rootもできる
https://gyazo.com/2002da4b821a772352bbdd6e9c0407a6
saにroles/iam.serviceAccountUserも加えて付与
gcloud compute ssh instance-sa→ログイン成功
sudo su - rootもできる
hiroki.icon当初roles/iam.serviceAccountUserを付与しておらずsshログインができなくて分けわからなかった。
ネットワークの問題(ファイアーウォール)、インスタンスの設定の問題、IAM権限の問題で原因を切り分けて可能性を消していって解決した。
まとめ
インスタンスのOSログインを有効にする
roles/iam.serviceAccountUserはまず付与したほうがいい
roles/compute.osAdminLogin,roles/compute.osLoginで使い分ける
OSログインのユーザ名
サービスアカウントの場合
sa_105238737086194044199
sa_ + id
Directory APIでユーザ名を変更できる
OSログインに同時に鍵を登録すると反映されない問題
一定時間(15秒とか)sleepして反映されるまで待ってからssh接続すれば成功する