Slide 1

Slide 1 text

クラウドにおけるシークレット管理 Copyright © 3-shake, Inc. All Rights Reserved. 2025-09-19 スリーシェイクエンジニア勉強会 (社内) すずきまさし

Slide 2

Slide 2 text

Copyright © 3-shake, Inc. All Rights Reserved. おまえだれよ 2 ● すずきまさし/masasuzu/@masasuz ● 株式会社スリーシェイクSreake事業部所属 ● クラウドインフラなんでも屋さんをしてます ○ お客様の外部から ■ 設計、運用、構築等の技術支援を行います。 ○ お客様の内部から ■ インフラチームの一員として内製化支援も行います。 ● 得意領域 ○ AWS ■ AWS Community Builder Cloud Operation Since 2024 ■ 2025 Japan All AWS Certifications Engineers ○ Google Cloud ○ Terraform

Slide 3

Slide 3 text

● はじめに ● アプリケーション側の視点 ● インフラ側の視点 ● まとめ Copyright © 3-shake, Inc. All Rights Reserved. 目次 3

Slide 4

Slide 4 text

Copyright © 3-shake, Inc. All Rights Reserved. はじめに 01 4

Slide 5

Slide 5 text

ここで言うシークレットとはDBのパスワードやAPIキーなどの秘匿すべき情報のことを指 します。 AWSやGoogle Cloudなどでインフラやアプリケーションでシークレットをどう扱えばよい かをお話したいです。 Copyright © 3-shake, Inc. All Rights Reserved. はじめに 5

Slide 6

Slide 6 text

Copyright © 3-shake, Inc. All Rights Reserved. アプリケーション側の視点 02 6

Slide 7

Slide 7 text

アプリケーション側の実装で避けるべきアンチパターンを載せます ● ソースコードに直接記述 ● 設定ファイルに平文で記述 ● 環境変数に平文で記述 ● base64エンコード Copyright © 3-shake, Inc. All Rights Reserved. シークレット管理のアンチパターン 7

Slide 8

Slide 8 text

ソースコードや設定ファイルに平文でシークレットを保存するとgit操作などのミスで漏洩 の可能性があります。 暗号化鍵を使用しないBase64などのエンコード処理も形式さえ別れば簡単にデコード できてしまうので、平文保存と変わりません。 シークレットを平文でレポジトリに保存するのは避けるべきです。 Copyright © 3-shake, Inc. All Rights Reserved. 平文保存ゼッタイダメ 8

Slide 9

Slide 9 text

平文がだめならKMSキーで暗号化すればよいのでは? 以下のようなフローが取れると思います。 1. アプリケーション起動時に KMSのから鍵を取得 2. 取得した鍵を利用して暗号化されたシークレットを復号 3. 平文のシークレット情報をアプリで利用する Copyright © 3-shake, Inc. All Rights Reserved. KMSによる暗号化の検討 9

Slide 10

Slide 10 text

シークレットの復号化はアプリケーションの責務なのか? インフラ側に移譲できないか? Copyright © 3-shake, Inc. All Rights Reserved. 一見良い気がするが? 10

Slide 11

Slide 11 text

シークレットの復号およびシークレットの管理自体をシークレットストアに任せてアプリ ケーション側はそれを利用するのが望ましい ● AWS ○ Parameter Store (SecureString) ○ Secrets Manager ● Google Cloud ○ Secret Manager Copyright © 3-shake, Inc. All Rights Reserved. シークレットストアの利用 11

Slide 12

Slide 12 text

Copyright © 3-shake, Inc. All Rights Reserved. インフラ側の視点 03 12

Slide 13

Slide 13 text

クラウドリソースの管理をどうするかの検討 ● 手動でコンソールから設定 ● シークレットの値を平文で IaC管理(tfvarsファイルを git管理から外す ) ● シークレットの値を暗号化して IaCで管理 ● シークレットストアを IaCで管理、値は手動設定 Copyright © 3-shake, Inc. All Rights Reserved. シークレットストアの管理 13

Slide 14

Slide 14 text

シークレットが少ないときはこれはこれであり。 ● ただし、シークレットが増えてきたときに ○ 煩雑 ○ 設定ミスの可能性増大 Copyright © 3-shake, Inc. All Rights Reserved. 手動で設定 14

Slide 15

Slide 15 text

シークレットの値だけ、gitignoreしたtfvarsで管理する。 ● ミスでコミットされてしまう懸念 Copyright © 3-shake, Inc. All Rights Reserved. シークレットの値を平文でIaC管理 15

Slide 16

Slide 16 text

sops providerを使うことでKMSを用いてシームレスに復号できます。 ただし、以下の懸念があります。 ● KMSキーの管理が別途必要 ● TerraformのStateファイルには平文で保存される Copyright © 3-shake, Inc. All Rights Reserved. シークレットの値を暗号化してIaC管理 16

Slide 17

Slide 17 text

シークレットリソースは管理しつつ、実際の値は手動で管理します。 シークレットの値はignore_changeにすることにより差分を発生させないようにします。 ● 値が管理されないので漏洩の心配がない ● 一番バランスが取れいている Copyright © 3-shake, Inc. All Rights Reserved. シークレットストアのリソースはIaC管理、値は手動管理 17

Slide 18

Slide 18 text

Copyright © 3-shake, Inc. All Rights Reserved. まとめ 04 18

Slide 19

Slide 19 text

現時点で私が考える望ましい方法としては以下のとおりです。 ● アプリケーション ○ クラウドのシークレットストア (Secrets Managerなど)と実行環境(ECS, Cloud Runなど)の統合機能 を使い、環境変数またはファイルとしてシークレットを読み込む。 ● インフラ ○ クラウドのシークレットストアのリソース自体は Terraformで管理する。 ○ 実際のシークレットの値は ignore_changes を活用して手動で設定し、 Gitの管理から分離する。 もちろん要件によって取りうる手段は変わるとは思います。他になにか良い方法をご存知でしたら教えて下さ い。 それでは良いシークレットライフを ! Copyright © 3-shake, Inc. All Rights Reserved. まとめ 19