概要
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 SDKはAPIリクエストを投げるときに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" ]