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エンドポイント経由では使えない!
実際の設定で気をつけたポイント
-
ECRのpull操作には4つのアクションが必要
ecr:GetAuthorizationToken
ecr:BatchCheckLayerAvailability
ecr:GetDownloadUrlForLayer
ecr:BatchGetImage
-
VPCエンドポイント特有の制約
- IPアドレス制限(
aws:SourceIp
)は効かない - 代わりに
aws:SourceVpc
やaws:SourceVpce
を使う
- IPアドレス制限(
-
段階的な制限レベル
- 開発環境:ロール指定のみ
- 本番環境:ロール + VPC + HTTPS強制
まとめ
特定のアカウントからのアクセスを許可可能
そのアカウント内もアクセス権を制御可能