目の前に僕らの道がある

勉強会とか、技術的にはまったことのメモ

2025年AWS Community Builderの活動報告

今年はブログ4本(純粋なAWSの記事はなし)、登壇5本(内社内2本)という結果でした。

勉強会参加自体はそこそこしてたんですが、アウトプットという点では少し物足りない結果になったなという感想です。

要因としてはGoogle Cloud関連の活動が比較的多くて、AWS関連にリソースを割けなかったというのもあります。第二の理由としては今年後半が特に業務が多忙で身動きが取れない月があったのも事実です。とはいえ忙しいは言い訳に過ぎないので、なんとアウトプットする仕組み作りをしていきたいとことです。

来年はもっとアウトプットを増やしていきたいです。そこで以下の数値を目標にやっていきたいと考えています。

  • 社外登壇: 月0.5本
  • AWSテーマのブログ: 月1本以上

やってくぞ。

以下今年のアウトプットを置いておきます。

ブログ

AWS関連

なし

クラウドニュートラル

blog.masasuzu.net diary.masasuzu.net diary.masasuzu.net blog.masasuzu.net

登壇

AWS関連

speakerdeck.com speakerdeck.com speakerdeck.com

クラウドニュートラル

speakerdeck.com speakerdeck.com

初めての海外カンファレンス(KubeCon NA 2024 in Salt Lake City)

この記事は3-shake Advent Calendar 2025です。

qiita.com

吉祥寺.pm #37で話した内容となります。

kichijojipm.connpass.com

speakerdeck.com

厳密には10年以上前に行ったことあるんですが、完全に忘れているので実質今回が初回ということでお願いします。 今回は業務として、KubeCon NAへ行かせてもらったのでその体験を共有いたします。セッション内容については触れません。

旅程的には11/11-17となっており、KubeCon NAの開催期間としては11/12-15となっています。

以下の目次で送らせていただきます。

  • 出国準備
    • 5ヶ月前
    • 1か月前
    • 前日まで
    • 随時
  • 往路
  • 現地
  • 復路
  • 事後
  • まとめ
続きを読む

Google Cloud で目指す クラウド二刀流エンジニア講座第3回に登壇してきました。

11/14に Google Cloudで目指すクラウド二刀流エンジニア講座第3回 に登壇してきました。

cloudonair.withgoogle.com

第1回でパネルディスカッションに出てきたのに引き続き、今回は Fargate との差分で理解する、Cloud Run のシンプルな魅力 と題して登壇させていただきました。

AWSをもうすでに使ってる方向けにECS Fargateと比較しつつCloud Runのシンプルな魅力を紹介するセッションとなっていました。視聴登録すればこちらから動画が見れるかと思います。資料も後ほどこちらに上がると思います。

内容としては以下のような話をしました。

  • Cloud Runの概要紹介
  • ECS FargateとCloud Runのアプリケーションアーキテクチャ比較
  • ネットワーク機能の紹介
  • セキュリティ機能の紹介
  • 運用監視機能の紹介

今回はCloud Runを使ってない人向けに概要紹介するセッションだったので、深入りできていない部分や説明不足、端折ったところがたくさんあります。これについてはどこかでエントリ書きたいと思ってます。

とにかくCloud Runはいいぞ!ということが伝わっていれば何よりです。Cloud Runの良さを伝えたつもりですが、あくまでなんでも適材適所でFargateが向いているコンテキストに無理やり変える必要はなく、比較検討できる選択肢の一つとしてCloud Runを入れていただけたらと思います。

スライドにもう少し図表を入れた方が伝わったかなとか反省点はありつつも、40分トークは初めてだったのですごくいい経験になりました。今後ももっと大きなところで登壇できるように精進していきます。

クラウド環境におけるシークレットの扱い

この内容は、社内のエンジニア勉強会で話した内容です。

speakerdeck.com

みなさん。プロダクション環境のシークレット情報をどう扱っていますか?

クラウドネイティブなアプリケーション開発において、DBのパスワードや外部APIキーといったシークレットの管理は、セキュリティを確保する上で避けては通れない課題です。

この記事では、アプリケーションとインフラそれぞれの視点から、クラウド環境におけるシークレット管理のアンチパターンとベストプラクティスを探っていきます。

ここで言うシークレットとはDBのパスワードやAPIキーなどの秘匿すべき情報のことを指します。

アプリケーション側の視点

まずは、アプリケーションがどのようにシークレットを扱うべきかを見ていきましょう。

管理のアンチパターン

最初に管理方法のアンチパターンとしては以下のものがあります

  • ソースコードに直接記述
  • 設定ファイルに平文で記述
  • 環境変数に平文で記述(Dockerfileや.envファイルでgit管理するなど)
  • base64エンコードして保存

ソースコードに記述すれば、すべての環境で同じ値しか使えず柔軟性がありません。設定ファイルや環境変数に平文で記述し、それをGitで管理してしまうと、何かのミスでリポジトリが流出した際にシークレットも漏れてしまいます。

また、隠しているつもりでBase64エンコードするのも同様に危険です。Base64は暗号化ではなく、誰でも簡単に元の文字列に戻せるため、平文で保存しているのと大差ありません。

KMSによる暗号化の検討

次に考えられるのが、暗号鍵を使った暗号化です。AWSのKMSやGoogle CloudのCloud KMSといった鍵管理サービスを利用する方法が考えられます。

フローとしては以下のようになりますでしょうか

  • アプリケーション起動時にKMSのから鍵を取得
  • 取得した鍵を利用して暗号化されたシークレットを復号
  • 平文のシークレット情報をアプリで利用する

一見これで良さそうですが、復号処理をアプリケーションの責務にすると、コードが複雑になるだけでなく、KMSの復号権限をアプリケーション自体に付与する必要があり、管理の懸念点が増えてしまいます。

クラウド側のシークレットストアの利用

そこで推奨されるのが、クラウドが提供するシークレット管理の仕組みを利用することです。

  • AWS
    • AWS Secrets Manager
    • AWS Systems Manager Parameter Store(SecureString)
  • Google Cloud
    • Secret Manager

これらのサービスは、ECS FargateやCloud Runなどのコンテナ実行環境と統合されています。コンテナの起動時に、これらのストアに保存されたシークレットを、自動的に環境変数やファイルとしてマウントしてくれるのです。

これによりアプリケーション側では、シークレットがどこで管理されているかを意識することなく、従来通り環境変数やファイルから値を読み込むだけで済むようになり、責務をシンプルに保つことができます。

インフラ側の視点

さて、アプリケーションの課題は解決しました。次に、インフラ側で、そのシークレットストアをどう管理するかという課題に移りましょう。

取れる手段としては主に以下ものが考えられます。

  • 手動でコンソールから設定
  • シークレットの値を平文でIaC管理(tfvarsファイルをgit管理から外す)
  • シークレットの値を暗号化してIaCで管理
  • シークレットストアをIaCで管理、値は手動設定

まず手動で管理ですが、これはこれでありだと思ってます。ただし、扱うシークレットの数が増えてきたときに作業が煩雑であったり、手作業がゆえに起こるリソースタグなどの付け間違いなどのミスが発生しうるので、規模が大きくなると現実的ではありません。

2つ目ですが、シークレットの値だけあつかるtfvarsファイルをgitignoreしてあげることでレポジトリが漏れてもシークレットの値が漏れないことになります。が、うっかりシークレットの値を人為的なミスでコミットしうるので完全に安全とはいいにくいです。

3つ目ですが、これはsops providerを利用するパターンです。これを使うことでKMSキーを利用して暗号/復号がterraformとシームレスに統合できます。一見これで良さそうですが、2点課題があります。

  • KMSリソースを余計に管理なくてはならない
  • Stateには平文で保存される

前者は必要経費としていいとして、後者は課題となります。Terraformにおいてはstateを見る権限がある人にはシークレットも見れてしまうという懸念があります。

シークレットのリソースと値を分離する

この方法の利点は、IaCでシークレット リソースが存在することは管理しつつ、その実際の値はGitの管理下から完全に分離できる点です。初回適用後にコンソールから実際のシークレット値を設定すれば、それ以降 terraform apply を実行しても値がダミー値で上書きされることはありません。

これにより、コードレビューなどで誤ってシークレットが漏洩するリスクを原理的に防ぐことができ、非常にバランスの取れた管理方法と言えます。

以下サンプルコードです。

resource "aws_ssm_parameter" "db_password" {
  type     = "SecureString"
  name     = "/test/db_password"
  value    =  "Dummy"
  lifecycle {
    ignore_changes = [value]
  }
}

まとめ

現時点でのクラウドにおけるシークレット管理のベストプラクティスは、以下のようにまとめることができるでしょう。

  • アプリケーション
    • クラウドのシークレットストア(Secrets Managerなど)と実行環境(ECS, Cloud Runなど)の統合機能を使い、環境変数またはファイルとしてシークレットを読み込む。
  • インフラ(IaC)
    • クラウドのシークレットストアのリソース自体はTerraformで管理する。
    • 実際のシークレットの値は ignore_changes を活用して手動で設定し、Gitの管理から分離する。

もちろん要件によって取りうる手段は変わるとは思います。他になにか良い方法をご存知でしたら教えて下さい。

それでは良いシークレットライフを!

関連ページ

blog.masasuzu.net

Google Cloud で目指す クラウド二刀流エンジニア講座 第1回 でパネルディスカッションに出てきました。

先日、2025年6月4日に開催された 「Google Cloud で目指すクラウド二刀流エンジニア講座」 の第1回にて、「スペシャリストが語る!Google Cloud のメリットを活かすネットワーク、セキュリティのあり方とは?」 と題したパネルディスカッションに登壇いたしました。

イベントから少し時間が経ちましたが、当日の内容を振り返り、話したことや、時間の都合上話しきれなかった点などをまとめていきたいと思います。

cloudonair.withgoogle.com

ページとセッションでの資料は以下のとおりです。

以下パネルディスカッションでお話しした内容と補足を記載します。

続きを読む