AppServieでアプリを動かす場合にDBのパスワードやトークンなど公開すべきでない情報はKeyVaultに文字列を登録してAppServiceからのみ参照できるように制御するのが推奨されているように思います。テスト用アプリで動かしたので備忘録として残しておきます。
やりたいこと
・パスワードなどの文字列はKeyVaultで管理する
・アプリケーションはAppServiceで動かしアプリケーション設定経由で文字列を渡す
・Goの標準パッケージのosから環境変数として取得する
AppServiceでDockerを動かす
Goのプログラム
main.go
import (
"fmt"
"net/http"
"os"
)
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":80", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World."+os.Getenv("password"))
}
DockerFile
Dockerfile
FROM golang:1.20
WORKDIR /usr/src/app
COPY go.mod go.sum ./
RUN go mod download && go mod verify
COPY *.go ./
RUN go build -v -o /app
EXPOSE 80
CMD ["/app"]
AppServiceのオブジェクトID(プリンシパル)取得
KeyVault側に参照権限を付与する
KeyVaultのシークレット識別子をコピーする
AppServiceのアプリケーション設定に追加する
以下の文字列を追加する
@Microsoft.KeyVault(SecretUri=<シークレット識別子)
結果の確認
一連の流れで文字列の追加とAppServiceからの参照を試しました。