ECRプライベートリポジトリでのタグのイミュータビリティ設定について

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。

今回は、Amazon ECR (Elastic Container Registry) のプライベートリポジトリで、イメージタグの上書きが許可されている状態について、そのリスクと対策を解説します。

リスク

Amazon ECRは、Dockerコンテナイメージを保存、管理、デプロイするためのフルマネージドサービスです。コンテナイメージにはバージョン管理のためにタグが付けられますが、このタグが上書き可能になっていると、以下のような重大なリスクが発生します。

  • コンテナイメージの信頼性喪失: タグが上書き可能だと、同じタグ(例: latestv1.0)が、別の内容を持つコンテナイメージを参照する可能性があります。これにより、「このタグのイメージは常にこれだ」という信頼性が失われ、どのバージョンのコンテナが実際にデプロイされているかが不明確になります。
  • 意図しない本番環境の更新: v1.0タグで本番環境にデプロイしたコンテナがあったとします。もし、誰かがこのタグを新しい、しかしテストが不十分なイメージに上書きした場合、CI/CDパイプラインが自動的にその新しいイメージをデプロイしてしまう可能性があります。これにより、本番環境で予期せぬ不具合や脆弱性が発生し、サービスの安定性が損なわれます。
  • セキュリティ侵害のリスク: 悪意のあるユーザーが、脆弱性のあるコンテナイメージに意図的にタグを上書きする可能性があります。これにより、正規のコンテナイメージとしてデプロイされたものが、バックドアやマルウェアを含む不正なイメージに置き換えられ、セキュリティ侵害につながるリスクがあります。
  • 監査と追跡の困難さ: 同じタグが複数の異なるイメージを参照できるため、監査やインシデント発生時の原因究明が非常に困難になります。「いつ、誰が、どのイメージをデプロイしたか」という記録が不正確になり、フォレンジック調査の妨げになります。

対策

ECRのプライベートリポジトリでイメージタグの上書きを禁止する(タグをイミュータブルにする) ことは、上記のすべてのリスクを軽減し、コンテナイメージの信頼性とセキュリティを確保するための重要なベストプラクティスです。

  • コンテナイメージの信頼性向上: タグをイミュータブルにすることで、各タグが一意のイメージダイジェスト(SHA-256ハッシュ)と紐付けられます。これにより、同じタグが常に同じコンテナイメージを参照することが保証され、デプロイの信頼性が大幅に向上します。
  • 予期せぬ変更の防止: タグの上書きができないため、CI/CDパイプラインや手動デプロイ時に、意図しないコンテナイメージがデプロイされることを防ぎます。新しいバージョンのイメージをプッシュするには、新しいタグを使用する必要があります。
  • 攻撃対象領域の減少: 悪意のあるユーザーが既存のタグを乗っ取って不正なイメージをデプロイする攻撃手法を無効化することで、攻撃対象領域(アタックサーフェス)が減少し、セキュリティ体制が強化されます。
  • 監査と追跡の簡素化: タグが静的になるため、イメージのバージョン管理が明確になります。ログやCI/CDの履歴から、どのタグがどのイメージを参照しているかが常に一意に定まり、監査やトラブルシューティングが容易になります。

修復方法

ECRプライベートリポジトリでイメージタグの上書きを禁止する方法は、AWSコンソールまたはTerraformで行えます。この設定は、リポジトリの作成時または既存のリポジトリの編集時に設定できます。

AWSコンソールでの修復手順

AWSコンソールを使用して、ECRリポジトリのタグイミュータビリティ設定を変更します。

  1. ECRサービスへ移動: AWSコンソールにログインし、ECR サービスを開きます。
  2. リポジトリを選択: 左側のナビゲーションペインで「リポジトリ」を選択し、設定を変更したいリポジトリを選択します。
  3. 「編集」ボタンをクリック: リポジトリの詳細ページで「編集」をクリックします。
  4. 「一般設定」の変更:
    • 編集画面が表示されたら、「一般設定」セクションまでスクロールします。
    • タグのイミュータビリティ」のドロップダウンメニューで、「イミュータブル」 を選択します。
  5. 変更の適用:
    • 変更内容を確認し、「リポジトリ設定を保存」をクリックして、設定を保存します。

これで、このリポジトリの既存および新しいイメージタグはすべてイミュータブルとなり、上書きが禁止されます。

Terraformでの修復手順

TerraformでECRプライベートリポジトリのタグイミュータビリティを有効にするには、aws_ecr_repository リソースの image_tag_mutability パラメータを "IMMUTABLE" に設定します。

# ECRプライベートリポジトリ
resource "aws_ecr_repository" "my_secure_repository" {
  name = "my-secure-app-repo"
  
  # **重要: タグをイミュータブルに設定**
  image_tag_mutability = "IMMUTABLE"

  image_scanning_configuration {
    scan_on_push = true
  }

  tags = {
    Environment = "Production"
    Owner       = "TeamAlpha"
  }
}

# (オプション) リポジトリポリシーも設定してアクセスを制限
resource "aws_ecr_repository_policy" "my_secure_repo_policy" {
  repository = aws_ecr_repository.my_secure_repository.name

  policy = jsonencode({
    Version = "2008-10-17",
    Statement = [
      {
        Sid = "AllowPushPull",
        Effect = "Allow",
        Principal = {
          AWS = "arn:aws:iam::123456789012:role/MyCICDServiceRole"
        },
        Action = [
          "ecr:GetDownloadUrlForLayer",
          "ecr:BatchGetImage",
          "ecr:BatchCheckLayerAvailability",
          "ecr:PutImage",
          "ecr:InitiateLayerUpload",
          "ecr:UploadLayerPart",
          "ecr:CompleteLayerUpload"
        ]
      }
    ]
  })
}

上記のTerraformコードでは、aws_ecr_repository リソースの image_tag_mutability パラメータを "IMMUTABLE" に設定することで、タグの上書きを禁止しています。

  • image_tag_mutability = "IMMUTABLE": この設定により、リポジトリのタグは上書きできなくなります。既存のリポジトリにこの変更を適用すると、既存のイメージはそのまま保持されますが、それ以降は同じタグで新しいイメージをプッシュしようとするとエラーになります。
  • image_tag_mutability = "MUTABLE" (デフォルト): タグの上書きが許可されます。

この設定を適用することで、コンテナイメージのバージョン管理が厳格になり、セキュリティが向上します。

最後に

この記事では、ECRプライベートリポジトリでイメージタグの上書きを禁止することの重要性について解説しました。タグのイミュータビリティは、コンテナの信頼性、デプロイの安全性、およびセキュリティ体制を大幅に向上させるための重要な設定です。 貴社のECRリポジトリでは、タグの上書きが禁止されていますか?この機会にぜひ設定を確認・強化してみてください。 こちらの内容の検出は弊社が提供するSecurifyのCSPM機能で簡単に検出及び管理する事が可能です。運用が非常にラクに出来る製品になっていますのでぜひ興味がある方はお問い合わせお待ちしております。

最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。

この記事をシェアする

クラウドセキュリティ対策実践集一覧へ戻る

貴社の利用状況に合わせた見積もりを作成します。

料金プランを詳しく見る