Podman で 403 エラーが発生した場合、認証には成功していますがリソースへのアクセス権限がない状態です。プライベートリポジトリへのアクセスやシステムのセキュリティポリシーが原因となることがほとんどです。

よくある原因

プライベートリポジトリへの権限不足

プライベートコンテナレジストリ(Quay.io、Docker Hub のプライベートリポジトリ、組織内レジストリなど)に対して、ログイン済みのユーザーが読み取り・書き込み権限を持たないために発生します。認証トークンやクレデンシャル(認証情報)は有効ですが、そのユーザー・サービスアカウント(プログラムが用いるアカウント)が対象リポジトリへのアクセス許可を受けていないため、403 が返されます。

コンテナレジストリの組織ポリシー制限

企業内のコンテナレジストリでは、チームごと・プロジェクトごとにアクセス権限を分けていることがあります。あなたのユーザーアカウントがそのチームに属していない、または組織の設定で該当リポジトリへのアクセスが明示的に禁止されている場合に 403 が発生します。

SELinux のポリシーがコンテナプロセスをブロック

Red Hat 系の Linux(RHEL、CentOS、Fedora など)で SELinux が有効な場合、コンテナプロセスがホストのファイルシステムやネットワークリソースへのアクセスを SELinux ポリシーで拒否されることがあります。認証は Podman で成功していても、SELinux の粒度の細かいアクセス制御により、403 相当の動作となります。

解決手順

ステップ 1:認証情報が正しく保存されているか確認

まず、Podman に登録されているログイン情報を確認します。

podman login <registry-url>

プロンプトでユーザー名とパスワード(またはアクセストークン)を入力し、ログインに成功することを確認してください。ログイン情報は ~/.config/containers/auth.json に保存されます。

ステップ 2:リポジトリ権限をコンテナレジストリの管理画面で確認

Docker Hub、Quay.io などのレジストリの Web UI にログインして、対象リポジトリの権限設定を確認します。

  • Docker Hub: アカウント設定 → Organizations → 対象組織 → Members で、自分のロール(Owner、Write、Read など)を確認
  • Quay.io: Settings → Permissions タブで、チームメンバーシップと権限レベルを確認
  • 組織内レジストリ: 管理者に権限付与を依頼

ここで自分のアカウントが「Read(読み取り)」のみであれば、プッシュはできません。必要に応じてリポジトリオーナーに権限昇格を依頼してください。

ステップ 3:SELinux が有効な環境での場合、ポリシーを一時的に無効化して検証

SELinux が有効な場合、以下のコマンドでコンテナの SELinux ラベリングを無効化して実行してみます。

podman run --security-opt label=disable -it <image-name> /bin/sh

このコマンドで 403 エラーが消える場合、SELinux のポリシーが原因です。本番環境では label=disable 全体の無効化ではなく、より限定的なポリシー調整をセキュリティチームに相談してください。

ステップ 4:プル・プッシュ操作を再実行

権限確認後、改めて Podman でプル・プッシュを試みます。

# プル
podman pull <registry-url>/<repository>:<tag>

# プッシュ
podman push <local-image-name> <registry-url>/<repository>:<tag>

レジストリ URL は quay.iodocker.io、または企業内レジストリのホスト名などです。

ステップ 5:ログインキャッシュをクリアして再認証

既存の認証情報が古い、または破損している可能性があります。

podman logout <registry-url>
podman login <registry-url>

その後、再度プル・プッシュを試します。

それでも解決しない場合

  • Podman のバージョンを確認: podman --version で古いバージョンを使用していないか確認し、必要に応じてアップデートしてください。
  • プロキシ・ファイアウォール経由のアクセス: 企業ネットワーク内からのアクセスの場合、プロキシ設定が ~/.config/containers/registries.conf に正しく記述されているか確認してください。
  • コンテナレジストリの管理者に問い合わせ: リポジトリの権限設定が正しく機能しているか、レジストリ側のアクセスログを確認してもらうことで、より詳細な拒否理由が判明することもあります。

免責事項:本記事の内容は、執筆時点の公開情報をもとに作成したものです。ソフトウェアの仕様は予告なく変更されることがあります。最新の情報は各ツールの公式サポートページをご確認ください。本記事の情報を利用した結果生じたいかなる損害についても、著者および運営者は責任を負いかねます。