Container Registry
The presented resiliency recommendations in this guidance include Container Registries and dependent resources and settings.
Summary of Recommendations
Recommendation | Category | Impact | State | ARG Query Available |
---|---|---|---|---|
CR-1 - Use Premium tier for critical production workloads | System Efficiency | High | Preview | Yes |
CR-2 - Enable zone redundancy | Availability | High | Preview | Yes |
CR-3 - Enable geo-replication | Disaster Recovery | High | Preview | Yes |
CR-5 - Use Repository namespaces | Access & Security | Low | Preview | No |
CR-6 - Move Container Registry to a dedicated resource group | Governance | Low | Preview | Yes |
CR-7 - Manage registry size | System Efficiency | Medium | Preview | No |
CR-8 - Disable anonymous pull access | Access & Security | Medium | Preview | Yes |
CR-10 - Configure Diagnostic Settings for all Azure Container Registries | Monitoring | Medium | Preview | No |
CR-11 - Monitor Azure Container Registry with Azure Monitor | Monitoring | Medium | Preview | No |
CR-12 - Enable soft delete policy | Disaster Recovery | Medium | Preview | Yes |
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
- Monitoring Azure Container Registry data reference - Resource Logs
- Monitor Azure Container Registry - Enable diagnostic logs
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