VPCエンドポイント環境でのECRクロスアカウント制御メモ

VPCエンドポイント環境でのECRクロスアカウント制御メモ

課題

特定のアカウントからのアクセスを許可したい。
そのアカウント内もアクセス権を制御したい。

VPCエンドポイント環境での基本制御

1. 特定ロールのみアクセス許可

一番基本的なパターン。アカウントは指定するが、実際のアクセスは特定ロールのみに制限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Condition": {
        "StringEquals": {
          "aws:PrincipalArn": "arn:aws:iam::123456789012:role/ECRAccessRole"
        }
      }
    }
  ]
}

2. VPC制限との組み合わせ

特定のVPCからのアクセスのみ許可。これでネットワークレベルでも制限できる:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Condition": {
        "StringEquals": {
          "aws:PrincipalArn": "arn:aws:iam::123456789012:role/ECRAccessRole",
          "aws:SourceVpc": "vpc-12345678"
        }
      }
    }
  ]
}

3. VPCエンドポイント指定での制限

さらに厳しくしたい場合、特定のVPCエンドポイント経由のみ許可:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Condition": {
        "StringEquals": {
          "aws:PrincipalArn": "arn:aws:iam::123456789012:role/ECRAccessRole",
          "aws:SourceVpce": "vpce-1a2b3c4d"
        }
      }
    }
  ]
}

4. 複数条件での多層防御

本番環境など:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": [
        "ecr:GetAuthorizationToken",
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Condition": {
        "StringEquals": {
          "aws:PrincipalArn": "arn:aws:iam::123456789012:role/ECRAccessRole",
          "aws:SourceVpc": "vpc-12345678",
          "aws:SourceAccount": "123456789012"
        },
        "Bool": {
          "aws:SecureTransport": "true"
        }
      }
    }
  ]
}

VPCエンドポイント環境で使える条件キー

条件キー 説明 使いどころ
aws:PrincipalArn 特定ロール/ユーザー指定 必須。アカウント内の制限
aws:SourceVpc 特定VPC指定 ネットワークレベル制限
aws:SourceVpce 特定VPCエンドポイント指定 より厳密な制限
aws:SourceAccount アカウント二重チェック 念のため確認用
aws:SecureTransport HTTPS強制 本番では必須

注意aws:SourceIpはVPCエンドポイント経由では使えない!

実際の設定で気をつけたポイント

  1. ECRのpull操作には4つのアクションが必要

    • ecr:GetAuthorizationToken
    • ecr:BatchCheckLayerAvailability
    • ecr:GetDownloadUrlForLayer
    • ecr:BatchGetImage
  2. VPCエンドポイント特有の制約

    • IPアドレス制限(aws:SourceIp)は効かない
    • 代わりにaws:SourceVpcaws:SourceVpceを使う
  3. 段階的な制限レベル

    • 開発環境:ロール指定のみ
    • 本番環境:ロール + VPC + HTTPS強制

まとめ

特定のアカウントからのアクセスを許可可能
そのアカウント内もアクセス権を制御可能

Last modified: 2025-07-08

Author