電気ひつじ牧場

技術メモ

Post: "https://cognito-idp.ap-northeast-1.amazonaws.com/": x509: certificate signed by unknown authority" となるエラー

概要

Post \"https://cognito-idp.ap-northeast-1.amazonaws.com/\": x509: certificate signed by unknown authority"

プログラムからAWSのリソース(今回はcognito)にアクセスしようとしたときにこのようなエラーになった。 利用していたDockerfileは次の通り。Golangのアプリケーションをマルチステージビルドして、実行イメージとしてはDebian slimを利用した。

FROM golang:1.16 AS builder
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY app ./app
COPY main.go ./
RUN go build -ldflags="-w -s" -o myapp

FROM debian:10-slim
COPY --from=builder /src/myapp .
EXPOSE 8080
CMD [ "./myapp" ]

原因

なんとなくAWSのロールやポリシー周りのミスかと思いきやそうではなく、証明書にまつわるエラーだった。AWS SDKAPIリクエストを投げるときにTLSを利用するが、debian-slimにはルート証明書が含まれていないため、この通信が失敗していた。

解決方法

ca-certificateパッケージをインストールする。 Dockerfileはこうなる。

FROM golang:1.16 AS builder
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY app ./app
COPY main.go ./
RUN go build -ldflags="-w -s" -o myapp

FROM debian:10-slim
RUN apt update && apt install -y ca-certificates   # 追記
COPY --from=builder /src/myapp .
EXPOSE 8080
CMD [ "./myapp" ]