Pepabo Tech Portal
  • ブログ
  • 技術スタック
  • エンジニア組織と制度
  • 研究開発
  • 採用サイト
メニューを開く

メニュー

  • ブログ
  • 技術スタック
  • エンジニア組織と制度
  • 研究開発
  • 採用サイト

最新記事

  • 「刺さる」展示はまず差をつくる。でもちゃんと馴染ませる──RubyKaigi 2025でのブース設計戦略
    2025-05-16
  • フリーナンスにおけるフロントエンドでのファイルフォーマットチェック
    2025-05-08
  • デザイントークンが正しく利用できていることを開発サイクルで継続的に検査する
    2025-05-07
  • CSが優勝! 第一回 競技Vibe Codingを社内で行いました
    2025-05-07
  • minne mobile合宿を実施しました
    2025-05-01
  • Amazon RDSの監査ログを保全する信頼性の高いソフトウェアの設計と実装について
    2025-04-16
  • RubyKaigi 2025 に協賛するので内容を紹介します
    2025-04-14

リンク

  • GMOペパボ株式会社
  • 採用サイト
  • HRブログ
Google Cloud
2024-06-13

Google CloudのOS LoginとIAPによってSSH接続のためのユーザーと踏み台の管理を簡単にする

Google Cloud
  • ツイート
  • このエントリーをはてなブックマークに追加

こんにちは!技術部プラットフォームグループの染矢です。

この記事では、Google CloudのOS Login機能とIdentity-Aware Proxy(IAP)サービスによって、LinuxサーバーにSSHするためのユーザー管理とネットワーク管理を簡易化する方法を紹介します。

背景

クラウド技術によって、複数のVMインスタンスを簡単に作成できるのが当たり前の時代になりました。

しかし、VMインスタンスをセキュアに扱うには、ログインユーザーのセキュアな管理が必要です。VMインスタンスの数が増えれば増えるほど、また管理者が増えれば増えるほど、Linuxユーザーとその鍵の複雑な管理が必要になります。

また、ログインできるネットワーク経路を制限するために、いわゆる「踏み台サーバー」を設置することもあります。踏み台サーバーとは、内部のサーバーにアクセスするために、外部からのログインを受け付けるためのサーバーです。踏み台サーバーを経由してのみ内部のサーバーに接続できるようにすれば、外部と接点を持つインスタンスの数を減らすことができます。しかし、踏み台としての機能しか持たないサーバーのためにインスタンスを保持するコストを払うことになります。さらに、踏み台サーバー自体をセキュアに保つことにもそれなりの労力がかかります。

ここで、サーバーがすべてGoogle CloudのCompute EngineのLinuxサーバーであれば、これらユーザーや踏み台サーバーの管理をすべてGoogle Cloudに任せることが可能です。具体的には、OS Login機能によってLinuxユーザーをGoogle IDに紐付け、IAPサービスによってアクセスポリシーに従ってTCP通信をネットワークの外から対象のインスタンスに転送できます。 なんとどちらの機能も現在は無料です。

それぞれの機能の概要

あとで実装例として記載する事例を理解するために、最低限必要な概念を簡単に説明します。 正確な説明は公式ドキュメントを読んでいただくのがよいです。

OS Login

https://cloud.google.com/compute/docs/oslogin?hl=ja

OS LoginはGoogle Compute Engineの機能の一つです。

それぞれのインスタンスにおいてLinuxユーザーをGoogleアカウントに紐付けて管理してくれます。ログインするための権限はGoogleアカウントに付与されるIAMで管理されます。

Identity-Aware Proxy(IAP)

https://cloud.google.com/iap/docs/concepts-overview?hl=ja

IAPは、Googleアカウントによる認証プロキシサービスであると表現できます。

外部からGoogle Cloudリソースへのアクセスを保護するために使えます。Googleアカウントに付与されたIAMの権限によってアクセスが認可されます。 HTTPアクセスからの保護だけでなく、TCP通信の転送もしてくれます。この記事では、TCP転送を主に取り扱います。

実装例

具体例として、想定シナリオに沿って実装方法を書いていきます。

外部IPを持たないインスタンスに、Googleアカウントの権限でSSHログインできるようにする

プロジェクトmy-projectのゾーンasia-northeast1-aにあるインスタンスmy-instanceに、Googleアカウントme@example.comの権限でSSHログインできるようにします。

インスタンスやアカウントに付与する設定を記述していきます。

OS Login

OS Loginはプロジェクトあるいはインスタンス単位で有効化できます。ここでは、インスタンスmy-instanceでのみ有効化します。

インスタンスmy-instanceのmetadataに次の値を設定します。

  • キー: enable-oslogin
  • 値: TRUE

ちなみに、OS Loginを有効化した時点で、インスタンスにある既存のauthorized_keysは削除されます。ドキュメントに「VM の authorized_keys ファイルを削除します」と書かれている通りです。検証した挙動からの推測ですが、/home/*/.ssh/authorized_keysがすべて削除されるものだと思われます。

また、GoogleアカウントがOS Loginをするためには適切なIAMロールを付与する必要があります。アカウントに必要な権限やアカウントが組織に属するかどうかで必要な権限は変わるのでご注意ください。ここでは、同一組織のユーザーであるme@example.comにroles/compute.osAdminLoginを付与します。

IAP

まず、インスタンスがIAPのソースレンジからのSSHアクセスを受け付けるようにする必要があります。IAPのソースレンジは35.235.240.0/20です。VPCのファイアウォールルールで許可IPを追加しておくとよいでしょう。

また、ユーザーがIAPによるTCP転送を実行するためには適切なIAMロールを付与する必要があります。ここでは、me@example.comにroles/iap.tunnelResourceAccessorを付与します。

接続してみる

次のコマンドで接続できます。gcloud SDKがマシンにインストールされている前提です。

$ gcloud auth login
# 認証とGoogle Cloud SDK へのアクセス許可のためにブラウザが開く
# ブラウザ上でme@example.comとしてログインし、Google Cloud SDKがGoogleアカウントにアクセスすることを許可する
$ gcloud compute ssh my-instance --project=my-project--zone=asia-northeast1-a --tunnel-through-iap 

OS Loginを有効化した後でも、既存のユーザーでSSHログインする

Compute Engineでは、インスタンスのmetadataによって手動でユーザーの鍵を管理できます。 もともとmetadataによってユーザーの鍵が管理されている状態で、検証としてOS Loginを有効化してみたいが、既存の接続方法も残しておきたい、というシナリオを想定してみます。

OS Loginを有効化した後の作業

もともと、インスタンスにuserというユーザーがおり、userユーザーはsudo可能であったとします。

先述の通り、OS Loginを有効化すると、インスタンスのauthorizied_keysは削除されます。 そのためこの場合、OS Loginを有効化した後に次の作業が必要です。

  • authorized_keysの再配置
  • userユーザーのグループ再追加

前者については、ドキュメント中に「OS Login が有効になっている場合でも、ローカル ユーザー アカウントのアクセスをプロビジョニングするように authorized_keys ファイルを構成できます。」と書かれている通りです。 後者については、ドキュメント中に言及されている箇所は見つかりませんでした。Linuxユーザー自体は残るが、sudoersからは外れるという挙動のようです。

OS Loginが有効化されているがuserユーザーではログインできない状態であるため、作業のためにOS Loginでログインします。

me_example_com@my-instance:~$ sudo bash -c 'echo ""ssh-rsa AAAAAAA...THIS_IS_USER_PUBLIC_KEY....==' > /home/user/.ssh/authorized_keys
# 最小権限の原則に沿うために、所有者をuserにし、パーミッションを600にするべきである
me_example_com@my-instance:~$ sudo chown user:user /home/user/.ssh/authorized_keys
me_example_com@my-instance:~$ sudo chmod 600 /home/user/.ssh/authorized_keys
# 元のuserがsudoできるべきなら、グループへの追加が必要である
me_example_com@my-instance:~$ sudo adduser user google-sudoers
# 【補足】Ubuntuでは`adduser username groupname`の構文で追加する
# 参考: https://ubuntu.com/server/docs/user-management#:~:text=sudo%20delgroup%20groupname-,Add%20a%20user%20to%20a%20group,-To%20add%20a

これで、OS Loginを有効化したあとでも、既存のユーザーがこれまでと同様にSSHログインやインスタンスでの作業ができます。

プロジェクトとインスタンスをfuzzyに選択してgcloud compute sshをしたい

便利スクリプトを作ったので置いておきます。

https://github.com/kesompochy/gcloud-ssh/blob/master/gcloud-ssh

おわり

以上、Google Cloudの機能やサービスによって、VMインスタンスへのSSH接続のためのユーザーと踏み台の管理を簡単かつセキュアにする方法の紹介でした。

IaaSがGoogle Cloudだけで完結しているのであればこのような方法をとることができます。ちなみに、GMOペパボの連結企業であるGMOクリエイターズネットワークでは、IaaSとしてGoogle Cloudを全面的に利用しています。GMOクリエイターズネットワークでは、なんと、エンジニアを積極採用中です。よろしくお願いします!!

GMOペパボでは、新しい仲間を募集しています

募集中の職種や、詳しい社内の環境や制度に関しては GMOペパボ株式会社 採用サイト をご覧ください。エンジニア新卒採用に関する情報をまとめたページも公開中!

エンジニア新卒採用
  • ツイート
  • このエントリーをはてなブックマークに追加

書いた人

  • pochy

    すべてのアザラシが幸せでありますように。

    Xアカウント

最新記事

  • 2025-05-16 「刺さる」展示はまず差をつくる。でもちゃんと馴染ませる──RubyKaigi 2025でのブース設計戦略
  • 2025-05-08 フリーナンスにおけるフロントエンドでのファイルフォーマットチェック
  • 2025-05-07 デザイントークンが正しく利用できていることを開発サイクルで継続的に検査する
  • 2025-05-07 CSが優勝! 第一回 競技Vibe Codingを社内で行いました
  • 2025-05-01 minne mobile合宿を実施しました
  • 2025-04-16 Amazon RDSの監査ログを保全する信頼性の高いソフトウェアの設計と実装について
  • 2025-04-14 RubyKaigi 2025 に協賛するので内容を紹介します

タグ

  • イベントレポート (86)
  • デザイン (81)
  • 研修 (49)
  • minne (48)
  • イベント (47)
  • 勉強会 (44)
  • Ruby (42)
  • カラーミーショップ (39)
  • engineering (39)
  • pepabo (29)
  • Android (29)
  • iOS (28)
  • mobile (27)
  • SRE (26)
  • インフラ (24)
  • SUZURI (23)
  • 登壇レポート (23)
  • ECブログリレー (22)
  • PHP (20)
  • CTO (19)
  • hosting (19)
  • プロダクトマネジメント (18)
  • データ基盤 (18)
  • ProductManagement (17)
  • rails (17)
  • 採用 (16)
  • ロリポップ (15)
  • security (15)
  • フロントエンド (15)
  • インターンシップ (14)
  • Rails (14)
  • エンジニア (13)
  • データ分析 (11)
  • 登壇情報 (11)
  • 開発プロセス (11)
  • Go (11)
  • GitHub (10)
  • 鹿児島 (10)
  • management (10)
  • クリエイターズネットワーク (10)
  • 社内向け技術文書 (9)
  • JavaScript (9)
  • 採用目的 (9)
  • event (9)
  • ヘテムル (9)
  • Kubernetes (9)
  • CRE (9)
  • GitHub Actions (9)
  • フリーナンス (9)
  • デザイン戦略チーム (8)
  • Pepabo (8)
  • ナレッジシェア (8)
  • 読書会 (8)
  • データエンジニアリング (8)
  • AWS (8)
  • ディレクター (7)
  • PTF (7)
  • 30days Album (7)
  • ムームードメイン (7)
  • 生成AI (7)
  • CSS (6)
  • グーペ (6)
  • 鹿児島オフィスチーム (6)
  • スクラム開発 (6)
  • デザインリサーチ (6)
  • Slack (6)
  • conference (5)
  • ペパボ (5)
  • リモートワーク (5)
  • CI (5)
  • データサイエンス (5)
  • 機械学習 (5)
  • データベース (5)
  • suzuri (5)
  • ec (5)
  • TDD (5)
  • iOSDC (5)
  • Google Cloud (5)
  • ホスティング (5)
  • ペパボのフロントエンドスタンダード (4)
  • builderscon (4)
  • IT (4)
  • 新卒10期ブログリレー (4)
  • IA (4)
  • 今日話したこと (4)
  • OpenStack (4)
  • 生産性 (4)
  • web3 (4)
  • cloudnative (4)
  • トラブルシューティング (4)
  • notion (4)
  • SwiftUI (4)
  • YAPC (4)
  • 技術基盤 (4)
  • software (4)
  • programming (4)
  • CS (4)
  • Zendesk (4)
  • Vue (4)
  • 技術部 (4)
  • pbtech (3)
  • JUGEM (3)
  • mruby (3)
  • インタビュー (3)
  • Design Scramble (3)
  • サービスデザイン (3)
  • ngx_mruby (3)
  • slack (3)
  • ビジュアルデザイン (3)
  • チームビルディング (3)
  • テックブログ (3)
  • ec-chapter (3)
  • メンタリング (3)
  • Bayt (3)
  • ストレージ (3)
  • ペパボカレッジ (3)
  • MRE (3)
  • 自動テスト (3)
  • productivity (3)
  • RubyGems (3)
  • BigQuery (3)
  • nextjs (3)
  • mail (3)
  • 技術書典 (3)
  • 動画 (3)
  • workshop (3)
  • Nuxt (3)
  • 写真 (2)
  • ペパボのデザイン思考 (2)
  • デザインスプリント (2)
  • ethereum (2)
  • blockchain (2)
  • カラーミーリピート (2)
  • デザイナー交流会 (2)
  • ThinkDESIGN (2)
  • デザインプロセス展 (2)
  • hackathon (2)
  • docker (2)
  • vault (2)
  • image (2)
  • Heroku (2)
  • 情報共有 (2)
  • service (2)
  • flutter (2)
  • 可視化 (2)
  • Customer Ops (2)
  • サーバ (2)
  • UIデザイン (2)
  • 寄稿レポート (2)
  • NFT (2)
  • rubykaigi (2)
  • へテムル (2)
  • ブログリレー (2)
  • ライティング (2)
  • oss (2)
  • Linux Kernel (2)
  • ISR (2)
  • TypeScript (2)
  • git (2)
  • コンテナ (2)
  • Vertex AI (2)
  • nodejs (2)
  • Airbyte (2)
  • OpenAI (2)
  • IaC (2)
  • CEG (2)
  • 情シス (2)
  • Swift (2)
  • SQL (2)
  • ユニットテスト (2)
  • バージョンアップ (2)
  • aws (2)
  • 競技プログラミング (2)
  • 業務効率化 (2)
  • Kotlin (2)
  • EC (2)
  • ロリポップ! for Gamers (2)
  • architecture (2)
  • コミュニティ (2)
  • カンファレンス (2)
  • Kaigi on Rails (2)
  • colorme (2)
  • wordpress (2)
  • Unleash (2)
  • Vibe Coding (2)

リンク

  • GMOペパボ株式会社
  • 採用サイト
  • エンジニアの制度・働き方
  • HR ブログ
  • スタッフインタビュー

Pepabo Tech Portal

  • 会社概要
  • プライバシーポリシー
  • 採用情報
  • よくあるご質問
  • お問い合わせ