<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>SecretManager on LIFELOG</title>
    <link>/tags/secretmanager/</link>
    <description>Recent content in SecretManager on LIFELOG</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <copyright>© 2026 0222-nnn</copyright>
    <lastBuildDate>Fri, 04 Sep 2026 00:00:00 +0900</lastBuildDate><atom:link href="/tags/secretmanager/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>TerraformでGKEのPodにSecret Managerの値をファイルとしてマウントしてみた</title>
      <link>/blog/20260904_terraform_gcp_advanced_gke_secret_manager_csi/</link>
      <pubDate>Fri, 04 Sep 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260904_terraform_gcp_advanced_gke_secret_manager_csi/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;/blog/20260811_terraform_gcp_secret_manager/&#34;&gt;Terraformのwrite-only argumentでSecret Managerへ値を登録する&lt;/a&gt;では、シークレットを保管するところまでを扱いました。保管した値をPodからどう取り出すかは残ったままです。&lt;/p&gt;
&lt;p&gt;環境変数で渡す方法は手軽ですが、&lt;code&gt;kubectl describe pod&lt;/code&gt;やプロセス一覧から値が見えてしまいます。GKEのSecret Manager add-onを使うと、Podのファイルシステムにマウントする形で渡せます。&lt;/p&gt;
&lt;p&gt;ただ「マウントできた」だけでは運用に足りません。シークレットを更新したら自動で反映されるのか。権限を剥がしたら動いているPodはどうなるのか。ログに何が残るのか。運用に入ってから調べ直すのでは遅いので、この3点を先に確かめておく必要があります。&lt;/p&gt;
&lt;p&gt;対象読者は、GKEでPodを動かしたことがあり、Secret Managerに値を入れたことがある人です。それぞれの入門は扱いません。&lt;/p&gt;
&lt;p&gt;環境変数への同期（&lt;code&gt;secretObjects&lt;/code&gt;）は扱いません。シークレットの自動ローテーションも扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証すること 
    &lt;div id=&#34;検証すること&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Podの中でマウントしたファイルが読めること。Pod specに値が現れないこと&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;シークレットを更新したとき、稼働中のPodに自動で反映されるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IAM権限を剥がしたとき、稼働中のPodと新しいPodがそれぞれどうなるか&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Cloud Loggingに何が残るか&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;前提環境 
    &lt;div id=&#34;前提環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e5%89%8d%e6%8f%90%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Google Cloud CLI、Terraform、Docker&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;GKE、Secret Manager、Compute Engineを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.3、google 7.46.0&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;使用するTerraformコード 
    &lt;div id=&#34;使用するterraformコード&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e4%bd%bf%e7%94%a8%e3%81%99%e3%82%8bterraform%e3%82%b3%e3%83%bc%e3%83%89&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/tech-0222/terraform-gcp-examples/tree/main/Advanced-Examples/19-gke-secret-manager-csi&#34; target=&#34;_blank&#34;&gt;Advanced-Examples/19-gke-secret-manager-csi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;今回の構成 
    &lt;div id=&#34;今回の構成&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e4%bb%8a%e5%9b%9e%e3%81%ae%e6%a7%8b%e6%88%90&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;div class=&#34;mermaid&#34; align=&#34;center&#34;&gt;
  &lt;pre&gt;
flowchart TB
    subgraph GCP[&#34;Google Cloud&#34;]
        SM[&#34;Secret Manager&lt;br/&gt;（値はTerraform管理外）&#34;]
        subgraph Project[&#34;Project&#34;]
            subgraph VPC[&#34;VPC&#34;]
                subgraph GkeSubnet[&#34;GKE Subnet（外部IPなし）&#34;]
                    CSI[&#34;CSIドライバ&lt;br/&gt;DaemonSet&#34;]
                    Pod[&#34;Pod&lt;br/&gt;/var/secrets/db-password.txt&#34;]
                end
                Bastion[&#34;踏み台&#34;]
            end
        end
    end

    CSI --&gt;|&#34;Private Google Access&#34;| SM
    CSI --&gt;|&#34;ファイルとして配置&#34;| Pod
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;ノードには外部IPがありません。Secret Manager APIへはPrivate Google Access経由で到達します。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>TerraformでCloud RunからCloud SQL for PostgreSQLへ接続してみた</title>
      <link>/blog/20260811_terraform_gcp_advanced_cloudrun_cloudsql_postgresql/</link>
      <pubDate>Tue, 11 Aug 2026 00:00:00 +0900</pubDate>
      
      <guid>/blog/20260811_terraform_gcp_advanced_cloudrun_cloudsql_postgresql/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;概要 
    &lt;div id=&#34;概要&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a6%82%e8%a6%81&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;Cloud RunからCloud SQLへ接続する際、Database Passwordをどこへ渡すかで迷います。環境変数へ直接書けば手軽ですが、Terraform StateやCI Logへ残るとSecretが漏れる経路になります。&lt;/p&gt;
&lt;p&gt;そこでDatabase PasswordはSecret Managerへ保存します。Cloud RunのRuntime Service Accountには必要な権限だけを付与する設計です。接続自体もIPアドレスではなくUnix Socketを使い、Cloud SQL Auth Proxyの経路に任せます。&lt;/p&gt;
&lt;p&gt;Terraformの基本操作とDockerコマンドは前提としています。Cloud Run、Cloud SQL、Secret Managerを個別には触ったことがある方向けです。&lt;/p&gt;
&lt;p&gt;Private IP、Connection Pooling、HA構成は扱いません。Password Rotationの自動化も扱いません。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;検証すること 
    &lt;div id=&#34;検証すること&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e6%a4%9c%e8%a8%bc%e3%81%99%e3%82%8b%e3%81%93%e3%81%a8&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Cloud Run、Cloud SQL、Secret Manager、Artifact Registryを連携できること&lt;/li&gt;
&lt;li&gt;Write-only ArgumentでDatabase PasswordをStateへ保存せず登録できること&lt;/li&gt;
&lt;li&gt;Runtime Service Accountへ必要最小限の権限を付与できること&lt;/li&gt;
&lt;li&gt;Cloud RunからUnix Socket経由でPostgreSQLへ接続できること&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;前提環境 
    &lt;div id=&#34;前提環境&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e5%89%8d%e6%8f%90%e7%92%b0%e5%a2%83&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Google Cloud CLI、Terraform 1.11以降、Docker&lt;/li&gt;
&lt;li&gt;Billingが有効な検証用Google Cloud Project&lt;/li&gt;
&lt;li&gt;Cloud Run、Cloud SQL、Secret Manager、Artifact Registry、IAMを操作できるGoogleアカウント&lt;/li&gt;
&lt;li&gt;検証時のバージョン：Terraform 1.14.3、google 7.43.0&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class=&#34;relative group&#34;&gt;今回の構成 
    &lt;div id=&#34;今回の構成&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100&#34;&gt;
        &lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34;
            style=&#34;text-decoration-line: none !important;&#34; href=&#34;#%e4%bb%8a%e5%9b%9e%e3%81%ae%e6%a7%8b%e6%88%90&#34; aria-label=&#34;アンカー&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;        
    
&lt;/h2&gt;
&lt;p&gt;Cloud RunとCloud SQLはどちらもVPCの外にあります。接続にはUnix Socketを使います。&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
