Container Registry


The presented resiliency recommendations in this guidance include Container Registries and dependent resources and settings.

Summary of Recommendations

Recommendations Details

CR-1 - 重要な運用ワークロードに Premium レベルを使用します

Category: System Efficiency

Impact: High

Guidance

パフォーマンスのニーズを満たす Azure Container Registry のサービス レベルを選択します。Premium レベルでは、大規模なデプロイ時に最大の帯域幅と同時読み取りおよび書き込み操作のレートが最大になります。作業の開始には Basic、ほとんどの運用アプリケーションには Standard、ハイパースケール パフォーマンスと geo レプリケーションには Premium を使用します。

Resources

Resource Graph Query

// Azure Resource Graph Query
// Find all Container Registries that are not using the Premium tier
resources
| where type =~ "microsoft.containerregistry/registries"
| where sku.name != "Premium"
| project recommendationId = "cr-1", name, id, tags, param1=strcat("SkuName: ", tostring(sku.name))
| order by id asc



CR-2 - ゾーン冗長性を有効にします

Category: Availability

Impact: High

Guidance

Azure Container Registry では、オプションのゾーン冗長性がサポートされています。ゾーン冗長性は、特定のリージョン内のレジストリまたはレプリケーション リソース (レプリカ) に回復性と高可用性を提供します。

Resources

Resource Graph Query

// Azure Resource Graph Query
// Find all Container Registries that do not have zone redundancy enabled
resources
| where type =~ "microsoft.containerregistry/registries"
| where properties.zoneRedundancy != "Enabled"
| project recommendationId = "cr-2", name, id, tags, param1=strcat("zoneRedundancy: ", tostring(properties.zoneRedundancy))
| order by id asc



CR-3 - geo レプリケーションを有効にします

Category: Disaster Recovery

Impact: High

Guidance

コンテナーを複数のリージョンにデプロイする場合は、Azure Container Registry の geo レプリケーション機能を使用します。ローカル データ センターから世界中のお客様にサービスを提供している場合でも、開発チームがさまざまな場所にいる場合でも、レジストリを geo レプリケートすることで、レジストリ管理を簡素化し、待機時間を最小限に抑えることができます。また、リージョン Webhook を構成して、イメージがプッシュされたときなど、特定のレプリカのイベントを通知することもできます。

geo レプリケーションは、Premium レジストリで使用できます。

Resources

Resource Graph Query

// Azure Resource Graph Query
// Find all Container Registries that do not have geo-replication enabled
resources
| where type =~ "microsoft.containerregistry/registries"
| project registryName = name, registryId = id, tags, primaryRegion = location
| join kind=leftouter (
    Resources
    | where type =~ "microsoft.containerregistry/registries/replications"
    | project replicationRegion=name, replicationId = id
    | extend registryId=strcat_array(array_slice(split(replicationId, '/'), 0, -3), '/')
    ) on registryId
| project-away registryId1, replicationId
| where isempty(replicationRegion)
| project recommendationId = "cr-3", name=registryName, id=registryId, tags
| order by id asc



CR-5 - リポジトリ名前空間を使用します

Category: Access & Security

Impact: Low

Guidance

リポジトリ名前空間を使用すると、組織内の複数のグループ間で 1 つのレジストリを共有できます。レジストリは、デプロイ間およびチーム間で共有できます。Azure Container Registry では、入れ子になった名前空間がサポートされており、グループの分離が可能です。ただし、レジストリは、すべてのリポジトリを階層としてではなく、個別に管理します。

Resources

Resource Graph Query

// cannot-be-validated-with-arg


CR-6 - コンテナー レジストリを専用リソース グループに移動します

Category: Governance

Impact: Low

Guidance

コンテナー レジストリは複数のコンテナー ホストで使用されるリソースであるため、レジストリは独自のリソース グループに存在する必要があります。

Azure Container Instances などの特定のホストの種類を試すこともできますが、完了したらコンテナー インスタンスを削除することをお勧めします。ただし、Azure Container Registry にプッシュしたイメージのコレクションを保持することもできます。レジストリを独自のリソース グループに配置することで、コンテナー インスタンスのリソース グループを削除するときに、レジストリ内のイメージのコレクションを誤って削除するリスクを最小限に抑えることができます。

Resources

Resource Graph Query

// Azure Resource Graph Query
// List container registries that contain additional resources within the same resource group.
resources
| where type =~ "microsoft.containerregistry/registries"
| project registryName=name, registryId=id, registryTags=tags, resourceGroupId=strcat('/subscriptions/', subscriptionId, '/resourceGroups/', resourceGroup), resourceGroup, subscriptionId
| join kind=inner (
    resources
    | where not(type =~ "microsoft.containerregistry/registries")
    | summarize recourceCount=count() by subscriptionId, resourceGroup
    | where recourceCount != 0
) on resourceGroup, subscriptionId
| project recommendationId = "cr-6", name=registryName, id=registryId, tags=registryTags, param1=strcat('resourceGroupName:',resourceGroup), param2=strcat('resourceGroupId:',resourceGroupId)



CR-7 - レジストリ サイズを管理します

Category: System Efficiency

Impact: Medium

Guidance

各コンテナー レジストリ サービス レベルのストレージの制約は、一般的なシナリオ (作業を開始する場合は Basic、ほとんどの運用アプリケーションの場合は Standard、ハイパースケール パフォーマンスと geo レプリケーションの場合は Premium) に合わせて調整することを目的としています。レジストリの有効期間中は、未使用のコンテンツを定期的に削除してサイズを管理する必要があります。また、アイテム保持ポリシーを有効にして、タグ付けされていないイメージ マニフェストを自動的に削除し、ストレージ領域を解放することも検討してください。

Resources

Resource Graph Query

// Azure Resource Graph Query
// Find all Container Registries that have their retention policy disabled
resources
| where type =~ "microsoft.containerregistry/registries"
| where properties.policies.retentionPolicy.status == "disabled"
| project recommendationId = "cr-7", name, id, tags, param1='retentionPolicy:disabled'
| order by id asc



CR-8 - 匿名プルアクセスを無効化します

Category: Access & Security

Impact: Medium

Guidance

既定では、Azure コンテナー レジストリからコンテンツをプルまたはプッシュするためのアクセスは、認証されたユーザーのみが使用できます。匿名 (認証されていない) プル アクセスを有効にすると、すべてのレジストリ コンテンツを読み取り (プル) アクションで公開できるようになります。警告: 匿名プル アクセスは、現在、レジストリ内のすべてのリポジトリに適用されます。リポジトリ スコープのトークンを使用してリポジトリ アクセスを管理する場合、すべてのユーザーは、匿名プルが有効になっているレジストリ内のリポジトリからプルできます。匿名プル アクセスが有効になっている場合は、トークンを削除することをお勧めします。

Resources

Resource Graph Query

// Azure Resource Graph Query
// Find all Container Registries that have anonymous pull access enabled
resources
| where type =~ "microsoft.containerregistry/registries"
| where properties.anonymousPullEnabled == "true"
| project recommendationId = "cr-8", name, id, tags
| order by id asc



CR-10 - すべての Azure コンテナー レジストリの診断設定を構成します

Category: Monitoring

Impact: Medium

Guidance

リソース ログは、診断設定を作成して 1 つ以上の場所にルーティングするまで収集および保存されません。

Resources

Resource Graph Query

// cannot-be-validated-with-arg


CR-11 - Azure Monitor を使用して Azure Container Registry を監視します

Category: Monitoring

Impact: Medium

Guidance

Azure リソースに依存する重要なアプリケーションやビジネス プロセスがある場合は、それらのリソースの可用性、パフォーマンス、操作を監視する必要があります。Azure Container Registry は、他のクラウドやオンプレミスのリソースに加えて、Azure リソースを監視するための完全な機能セットを提供する Azure のフル スタック監視サービスである Azure Monitor を使用して監視データを作成します。

Resources

Resource Graph Query

// cannot-be-validated-with-arg



CR-12 - 論理的な削除ポリシーを有効にします

Category: Disaster Recovery

Impact: Medium

Guidance

論理的な削除ポリシーを有効にすると、ACR は、削除された成果物を、保持期間が設定された論理的に削除された成果物として管理します。これにより、論理的に削除された成果物を一覧表示、フィルター処理、および復元できます。保持期間が完了すると、論理的に削除されたすべての成果物が自動的に消去されます。

Resources

Resource Graph Query

// Azure Resource Graph Query
// Provides a list of Azure Container Registry resources that do not have soft delete enabled
resources
| where type =~ "microsoft.containerregistry/registries"
| where properties.policies.softDeletePolicy.status == "disabled"
| project recommendationId = "cr-12", name, id, tags
| order by id asc