Azure Policy 定義の modify 効果
modify
効果は、作成時または更新時に、サブスクリプションまたはリソースのプロパティまたはタグを追加、更新、または削除するために使用されます。 一般的な例としては、コスト センターなどのリソースでタグを更新することが挙げられます。 準拠していない既存のリソースは、修復タスクで修復できます。 1 つの Modify 規則には、任意の数の操作を含めることができます。 Modify として設定された有効なポリシー割り当てには、修復を行うための マネージド ID が必要です。
modify
効果では、次の操作がサポートされます。
- リソース タグの追加、置換、または削除。 タグに関して、ターゲット リソースがリソース グループでない限り、Modify ポリシーでは常に mode が
indexed
に設定されている必要があります。 - 仮想マシンと Virtual Machine Scale Sets のマネージド ID の種類 (
identity.type
) の値の追加または置換。 仮想マシンまたは Virtual Machine Scale Sets では、identity.type
のみを変更できます。 - 特定のエイリアスの値の追加または置換。
modify
で使用できるエイリアスの一覧を取得するには、Azure PowerShell 4.6.0 以降でGet-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' }
を使用します。
重要
タグを管理している場合は、Append ではなく Modify を使用することをお勧めします。Modify ではより多くの操作タイプと、既存のリソースを修復する機能が提供されるためです。 ただし、マネージド ID を作成できない場合や、リソース プロパティのエイリアスが Modify でまだサポートされていない場合は、Append を使用することをお勧めします。
Modify の評価
リソースを作成中または更新中に、リソース プロバイダーによって要求が処理される前に Modify による評価が行われます。 ポリシー ルールの if
条件が満たされた場合、要求コンテンツに modify
操作が適用されます。 各 modify
操作では、適用されるタイミングを決定する条件を指定できます。 false 条件の評価を含む操作はスキップされます。
エイリアスを指定すると追加のチェックが実行され、要求コンテンツが modify
操作によって、リソース プロバイダーに拒否されるような形に変更されることがないようにします。
- エイリアスのマップ先のプロパティは、要求の API バージョンでは Modifiable としてマークされています。
modify
操作のトークンの種類は、要求の API バージョンのプロパティで想定されるトークンの種類と一致します。
これらのチェックのいずれかが失敗した場合、ポリシー評価は指定された conflictEffect
にフォールバックします。
重要
エイリアスを含む Modify の定義では、audit conflict 効果を使用して、マッピングされたプロパティが Modifiable でないバージョンの API を使用して要求を送信した場合に、その要求が失敗する事態を避けることをお勧めします。 API バージョン間で同じエイリアスの動作が異なる場合は、条件付き modify 操作を使用して、各 API バージョンで使用される modify
操作を決定できます。
modify
効果を使用するポリシー定義が評価サイクルの一部として実行される場合、既存のリソースに対する変更は行われません。 代わりに、if
条件を満たすリソースが非準拠とマークされます。
Modify のプロパティ
modify
効果の details
プロパティには、修復に必要なアクセス許可を定義するすべてのサブプロパティと、タグ値の追加、更新、または削除に使用する operations
が含まれます。
roleDefinitionIds
(必須)- このプロパティには、サブスクリプションでアクセス可能なロールベースのアクセス制御ロール ID と一致する文字列の配列を含める必要があります。 詳細については、修復 - ポリシー定義の構成に関するページを参照してください。
- 定義されたロールには、Contributor ロールに与えられているすべての操作が含まれている必要があります。
conflictEffect
(省略可)- 複数のポリシー定義によって同じプロパティが変更された場合、または
modify
操作が指定したエイリアスで動作しない場合に、どのポリシー定義を "優先" するかを決定します。- 新規または更新されたリソースについては、Deny を持つポリシー定義が優先されます。 Audit のポリシー定義では、すべての
operations
がスキップされます。 複数のポリシー定義に Deny 効果がある場合、その要求は競合として拒否されます。 すべてのポリシー定義に Audit がある場合、競合しているポリシー定義のどのoperations
も処理されません。 - 既存のリソースについては、複数のポリシー定義に Deny 効果がある場合、コンプライアンス状態は競合になります。 Deny 効果があるポリシー定義が 1 つ以下の場合、各割り当ては非準拠のコンプライアンス状態を返します。
- 新規または更新されたリソースについては、Deny を持つポリシー定義が優先されます。 Audit のポリシー定義では、すべての
- 使用可能な値は、Audit、Deny、Disabled です。
- 既定値は Deny です。
- 複数のポリシー定義によって同じプロパティが変更された場合、または
operations
(必須)- 一致するリソースで完了されるすべてのタグ操作の配列です。
- プロパティ:
operation
(必須)- 一致するリソースに対して実行するアクションを定義します。 オプションは、addOrReplace、Add、Remove です。 Add は、append 効果に似た動作をします。
field
(必須)- 追加、置換、または削除するタグです。 タグ名は、他の fields と同じ名前付け規則に従う必要があります。
value
(省略可)- タグに設定する値です。
- このプロパティは、
operation
が addOrReplace または Add の場合に必要です。
condition
(省略可)- true または false として評価されるポリシー関数による Azure Policy 言語式を含む文字列です。
field()
、resourceGroup()
、subscription()
の各ポリシー関数はサポートされていません。
Modify の操作
operations
プロパティ配列を使用すると、1 つのポリシー定義から複数のタグを異なる方法で変更できます。 各操作は、operation
、field
、および value
プロパティで構成されます。 operation
では、修復タスクがタグに対して行う処理を決定し、field
では、どのタグを変更するかを決定し、value
では、そのタグの新しい設定を定義します。 次の例では、次のようにタグを変更します。
environment
タグを "Test" に設定する (たとえ異なる値で既に存在している場合でも)。- タグ
TempResource
を削除する。 Dept
タグを、ポリシーの割り当てで構成されたポリシー パラメーター DeptName に設定する。
"details": {
...
"operations": [
{
"operation": "addOrReplace",
"field": "tags['environment']",
"value": "Test"
},
{
"operation": "Remove",
"field": "tags['TempResource']",
},
{
"operation": "addOrReplace",
"field": "tags['Dept']",
"value": "[parameters('DeptName')]"
}
]
}
operation
プロパティには、次のオプションがあります。
操作 | 説明 |
---|---|
addOrReplace |
プロパティまたはタグが別の値で既に存在する場合でも、定義されたプロパティまたはタグと値をリソースに追加します。 |
add |
定義されたプロパティまたはタグと値をリソースに追加します。 |
remove |
定義されたプロパティまたはタグをリソースから削除します。 |
Modify の例
例 1:environment
タグを追加し、既存の environment
タグを "Test" に置き換えます。
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
],
"operations": [
{
"operation": "addOrReplace",
"field": "tags['environment']",
"value": "Test"
}
]
}
}
例 2:env
タグを削除し、environment
タグを追加するか、既存の environment
タグをパラメーター化された値に置き換えます。
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
],
"conflictEffect": "deny",
"operations": [
{
"operation": "Remove",
"field": "tags['env']"
},
{
"operation": "addOrReplace",
"field": "tags['environment']",
"value": "[parameters('tagValue')]"
}
]
}
}
例 3: ストレージ アカウントで BLOB のパブリック アクセスが許可されていないことを確認します。次のように、modify
操作は、API バージョンが 2019-04-01
以上の要求を評価する場合にのみ適用されます。
"then": {
"effect": "modify",
"details": {
"roleDefinitionIds": [
"/providers/microsoft.authorization/roleDefinitions/17d1049b-9a84-46fb-8f53-869881c3d3ab"
],
"conflictEffect": "audit",
"operations": [
{
"condition": "[greaterOrEquals(requestContext().apiVersion, '2019-04-01')]",
"operation": "addOrReplace",
"field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess",
"value": false
}
]
}
}
次のステップ
- Azure Policy のサンプルを確認します。
- 「Azure Policy の定義の構造」を確認します。
- プログラムによってポリシーを作成する方法を理解します。
- コンプライアンス データを取得する方法を学習します。
- 準拠していないリソースを修復する方法を学習します。
- Azure 管理グループを確認する。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示