AWS:【QA】CodeArtifactの認証エラー問題~npm
皆さん、こんばんは。ちゃみみです。
本日は、CICD周りでCodeArtifactの認証エラーが出ると開発側から騒がれて色々調査した結果、CodeArtifact独自?の問題が出たため、今後の備忘録も兼ねて記録を残しておこうと思いました。
では早速ですが今回の内容になります。
【経緯】
開発側のほうから、CodeArtifact側でS3に関してのエラーが出ている。
Gatewayエンドポイントを追加してほしい←既に追加してるっつー話
CodeBuildから見るエラー内容:
npm http fetch GET 403 https://assets-660~~(AWS指定のS3バケットのEndpoint)~~~
npm verb stack Error 403 Forbidden-GET https://assets-660~~(AWS指定のS3バケットのEndpoint)~~
Cloudtrailで見る限りのエラーイベント:ReadFromRepository
errorMessage: Unauthenticated: request did not include an Authorization header. Please provide your credentials.
【サンプル構成】
よくあるCICDの構成だったりするとは、思うんですよね。
CodeArtifactにパッケージなどを保存するときは、ナレッジにも明記されているのですがS3を使うようでEndpointのポリシーには、AWS指定のEndpointを指定する必要があったりします。(なので見え方としてCodeArtifact≒S3をストレージに利用という風に捉えてもOKかと)
参考URL:
他にも、CodeArtifactにはapiやrepositoryといったEndpointも必要なため、プライベートサブネットにbuildを動かす場合には合計で3つのEndpointを作成する必要があります。
参考URL:
で、話は戻って今回のケースだとbuildでのエラーメッセージを見る限りでS3へのGatewayエンドポイントが足らんのだろう!!と騒がれるのですが実際のところCloudtrailを見ると認証系でミスっているようでAWSへ問い合わせをさせて頂いたところ以下の回答が来ました。
回答一部引用~~
過去の事例を確認いたしますと、ご確認いただいたメッセージは CodeArtifact リポジトリへのアクセスに対して認証情報が含まれないような場合に発生する記録がございました。 例えば、.npmrc の registry に CodArtifact のリポジトリ URL を設定したものの認証情報の設定をしていないなどの場合であれば、 ReadFromRepository API の呼び出しが AccessDenied となり同様のエラーの記録を確認いたしました。 (参考情報[1] の 「4. npm config set コマンドを使用して、npm 設定に認可トークンを追加します。」の設定がない場合など) 当方の環境におきまして VPC エンドポイントを設定し確認した場合におきましても、上記の認可トークンの設定がない場合に同様の記録を確認しております。 ~~
振り返ってみればという所ですが、トラフィックが全てOutbound用のVPCにあるProxyを経由していくことから認証を情報を含んでいてもproxyのほうにそれらを仕込む?ことができていない/連携できていないようであれば、結局↑の認証エラーが出てしまう形となってしまいます。
確認したところ、認証情報自体は仕込んでいるようでということもありBuild側でno_proxyなどの設定を見直したところ認証が無事問題なくパスされ、buildが動くようになったという経緯がありこのあたりの特にCodeArtifactへの接続など含めてのエラー情報さして無いこともあり結構泣きそうだったので記録にのこしました。
参照URL:
↑の認証エラーが出た場合の対処として
・認証情報の確認をすること
・build側でno_proxyやHTTP_PROXYなどの設定を見直す
ということを実施してみるとよいでしょう。
2022年10月17日
以下、宣伝です。
仲間も募集中なので、気になる方は↓の記事を覗いてみてくださいませ。
いい会社だと思いますよ。