Azure Administrator対策「サブスクリプションおよびリソースを管理」
はじめに
AZ-103「Azure Administrator」対策として、Microsoft Learnなどを要約したものを記載。
サブスクリプション
Azure でリソースをプロビジョニングするために使用される論理コンテナーまた、Azureにおける課金の単位。
仮想マシン(VM)やデータベースなどのすべてのリソースの詳細が保持される。
月単位で課金され、請求期間の終了後10日以内に自動的に請求される。
サブスクリプションは以下のような単位で設定することができる。
-
環境による分割 : 商用、開発、テストなどの個別の環境を設定する必要がある場合
-
組織構造による分割 : 部門、チーム、またはプロジェクト別に課金を整理する必要がある場合
サブスクリプションの制限
サブスクリプションにはいくつかの制限がある。
※ 例
サブスクリプションごとの Express Route 回線の最大数は 10。
制限されている値を超えて利用をする場合、Azureポータルからサポートチケットを開いてクォータ(割当て量)の増加を依頼する必要がある。
タグ
タグはリソース、リソースグループ、サブスクリプションを割り当てることで、 それぞれを分類して整理する機能。
タグはタグ名とタグの値からなるキーバリュー形式で設定を行う。
※ 例 : タグ名「Environment」、タグの値「Production」
主な制約事項
-
タグ名は大文字と小文字を区別されない
※ リソースプロバイダーは、タグ名に指定した大文字小文字を保持する場合がある
-
タグの値は大文字と小文字が区別される
-
リソースグループおよびサブスクリプションに適用されたタグはリソースに継承されない
※「Azureポリシー」でタグの設定が必要
-
タグ名は512文字に、タグ値は256文字に制限
※ ストレージアカウントの場合、タグ名は128文字に制限され、タグ値は256文字に制限
-
タグ名は、以下の記号を含めることができない
:<、>、%、&
https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/tag-resources
タグごとのコストを表示
Azure portalから[コストの管理と請求] > [コスト管理] > [コスト分析]
を指定。
[グループ化]
をクリックし、タグを選択するとタグ別のコストが表示できる。
Azure Resource Managerテンプレート
デプロイするリソースの情報を定義したJSON形式のテンプレートファイル。
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/template-syntax
https://docs.microsoft.com/ja-jp/learn/modules/create-azure-resource-manager-template-vs-code/
テンプレートの形式
ARMテンプレートは、次のセクションから構成される。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "",
"apiProfile": "",
"parameters": { },
"variables": { },
"functions": [ ],
"resources": [ ],
"outputs": { }
}
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/template-syntax
$schema
テンプレート言語のバージョンが記述されているJSONスキーマファイルの場所。
contentVersion
テンプレートのバージョン (1.0.0.0 など)。
この要素には任意の値を指定。
apiProfile
リソースの種類に対するAPIのバージョンのコレクションとして機能するAPIバージョン。
parameters
リソースをデプロイするときにパラメーターとして入力できる値の形式を指定。
"parameters": {
"<parameter-name>" : {
"type" : "<type-of-parameter-value>",
"defaultValue": "<default-value-of-parameter>",
"allowedValues": [ "<array-of-allowed-values>" ],
"minValue": <minimum-value-for-int>,
"maxValue": <maximum-value-for-int>,
"minLength": <minimum-length-for-string-or-array>,
"maxLength": <maximum-length-for-string-or-array-parameters>,
"metadata": {
"description": "<description-of-the parameter>"
}
}
}
要素名 | 必須 | 説明 |
---|---|---|
parameter-name | はい | パラメーターの名前。 |
type | はい | パラメーター値の型。 string、securestring、int、bool、object、secureObject、array |
defaultValue | いいえ | パラメーターの既定値。 |
allowedValues | いいえ | パラメーターとして入力を許可する値のリスト。 |
minValue | いいえ | int 型パラメーターの最小値。 |
maxValue | いいえ | int 型パラメーターの最大値。 |
minLength | いいえ | string 型、securestring 型、array 型パラメーターの長さの最小値。 |
maxLength | いいえ | string 型、securestring 型、array 型パラメーターの長さの最大値。 |
description | いいえ | ポータルを通じてユーザーに表示されるパラメーターの説明。 |
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/template-syntax#parameters
variables
テンプレート内で利用できる任意の値を定義した変数。
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/template-syntax#variables
functions
テンプレート内で使用できるユーザー定義関数。
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/template-syntax#functions
resources
デプロイされるリソースの種類。
要素名 | 必須 | 説明 |
---|---|---|
condition | いいえ | このデプロイの間にリソースがプロビジョニングされるかどうかを示すブール値。 |
type | はい | リソースの種類。 この値は、リソース プロバイダーの名前空間と、リソースの種類の組み合わせです (例: Microsoft.Storage/storageAccounts)。 |
apiVersion | はい | リソースの作成に使用する REST API バージョン。 |
name | はい | リソースの名前。 この名前は、RFC3986 で定義されている URI コンポーネントの制限に準拠する必要があり。 |
comments | いいえ | テンプレート内にドキュメント化するリソースについてのメモ。 |
location | 場合により異なる | 指定されたリソースのサポートされている地理的な場所。 |
dependsOn | いいえ | このリソースが配置される前に配置される必要があるリソース。 |
tags | いいえ | リソースに関連付けられたタグ。 |
sku | いいえ | デプロイする SKU を定義する。 たとえば、ストレージ アカウントの冗長性の種類を指定。 |
kind | いいえ | デプロイするリソースの種類を定義する。 たとえば、ストレージ アカウントの種類を指定。 |
copy | いいえ | 複数のインスタンスが必要な場合に作成するリソースの数。 |
plan | いいえ | デプロイするプランを定義する値が許可されます。 |
properties | いいえ | リソース固有の構成設定。 |
resources | いいえ | 定義されているリソースに依存する子リソース。 |
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/template-syntax#resources
outputs
デプロイ後に返される値。
https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/templates/template-syntax#outputs
テンプレートのデプロイ
Azure Policy
Azure上でリソースをデプロイする際のルールを作成するサービス。
例えば、東日本リージョンにのみリソースのデプロイを許可するといったポリシーを作成することが可能。
https://docs.microsoft.com/ja-jp/learn/modules/intro-to-governance/
https://docs.microsoft.com/ja-jp/azure/governance/policy/overview
ポリシー定義
ポリシー定義はJSON形式で定義する。
ポリシー定義の例として、下記のようなものがある。
- 許可されていないリソースの種類 (Not allowed resource types)
指定した種類のリソースのデプロイを禁止する。
- 使用できるリソースの種類 (Allowed Resource Type)
デプロイできるリソースの種類を定義。 定義リストに含まれていないリソースのデプロイが禁止される。
- 許可されている場所 (Allowed Locations)
リソースを作成できるリージョンを制限する。
下記の例は、リソースをデプロイする際のリージョンを特定のリージョンに制限するポリシー定義。
{
"properties": {
"displayName": "Allowed locations",
"description": "リソースがデプロイされるリージョンを制限するポリシー",
"mode": "Indexed",
"metadata": {
"version": "1.0.0",
"category": "Locations"
},
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "リソースをデプロイするときに指定できるリージョンのリスト",
"strongType": "location",
"displayName": "Allowed locations"
},
"defaultValue": [ "japaneast" ]
}
},
"policyRule": {
"if": {
"not": {
"field": "location",
"in": "[parameters('allowedLocations')]"
}
},
"then": {
"effect": "deny"
}
}
}
}
displayName
AzurePortalなどで表示する際のポリシー定義の表示名。
displayNameの最大長は128文字。
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/definition-structure
description
ポリシー定義の説明文。
descriptionの最大長は512文字。
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/definition-structure
mode
ポリシー定義の評価対象のリソースの種類が指定する。
-
all
リソース グループ、サブスクリプション、およびすべてのリソースの種類を評価
-
indexed
タグと場所をサポートするリソースの種類のみを評価
ほとんどの場合、mode はallに設定しておくことが推奨されている。
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/definition-structure
metadata
ポリシー定義に関する情報が格納されている。
- version (string)
ポリシー定義の内容のバージョンに関する詳細を追跡。
- category (string)
ポリシー定義が表示される Azure portal 内のカテゴリを指定。
- preview (boolean)
ポリシー定義がpreviewであるかどうかを示す
- deprecated (boolean)
ポリシー定義がdeprecatedとマークされているかどうかを示す
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/definition-structure
parameters
parametersは定義した値を変更することで、ポリシーを再利用性を高めることができる仕組み。
parametersのプロパティ
- name
パラメーターの名前。
上記の例では allowedLocations
。
- type
パラメーターの型。
string、array、object、boolean、integer、float、datetimeからを選択。
- metadata
Azure portalで主に使用するサブプロパティを定義。
ユーザーにとって親切な情報を表示。
- description
パラメーターが何に使用されるかの説明。
許可される値の例を提示するために使用。
- displayName
ポータル内に表示されるパラメーターの表示名。
- strongType:(省略可能)
サポートされる “リソースの種類” または許可される値を指定する。
ポータル経由でポリシー定義を割り当てるときにstrongTypeに定義した値から複数選択リストを提供できる。
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/definition-structure#strongtype
- assignPermissions:(省略可能)
ポリシーの割り当て中にAzure portalにロールの割り当てを作成させるには、trueに設定。
このプロパティは、割り当てスコープ外でアクセス許可を割り当てたい場合に便利。
ロールの割り当ては、ポリシーのロール定義ごと1つある。
- defaultValue:(省略可能)
値が指定されていない場合、割り当ての中でパラメーターの値を設定。
割り当てられている既存のポリシー定義を更新するときは、必須。
- allowedValues:(省略可能)
割り当て中にパラメーターが許可する値の配列を指定。
policyRule
ポリシーが適用される条件をif-thenで指定する。
{
"if": {
<condition> | <logical operator>
},
"then": {
"effect": "deny | audit | append | auditIfNotExists | deployIfNotExists | disabled"
}
}
論理演算子
- “not”: {condition or operator}
一般的なプログラミング言語ののNOT論理演算と同様の動作をする。
条件の結果を反転する。
- “allOf”: [{condition or operator},{condition or operator}]
一般的なプログラミング言語ののAND論理演算と同様の動作をする。
すべての条件が真であるかを判定する。
- “anyOf”: [{condition or operator},{condition or operator}]
一般的なプログラミング言語のOR論理演算と同様の動作をする。
1つ以上の条件が真であるかを判定。
条件
field または value アクセサーが特定の基準を満たすかどうかを評価。
“equals”、“notEquals"などがある。
サポートされている条件は下記のドキュメントに記載されている。
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/definition-structure#conditions
field
条件文で利用する際のリソースの状態が記載された項目。
以下の項目がサポートされている。
- name
- fullName
- kind
- type
- location
- identity.type
- tags
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/definition-structure#fields
また、fieldに指定できるリソースプロバイダーは下記のドキュメントに記載されている。
effect
ポリシーの効果を定義する。
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/effects
- deny
監査ログでイベントを生成し、リソース要求を失敗させる。
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/effects#deny
- audit
監査ログで警告イベントを生成しますが、リソース要求を失敗させる。
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/effects#audit
- append
定義したフィールドセットをリソース要求に追加。
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/effects#append
- AuditIfNotExists
定義した条件に合致するリソースが存在しない場合に監査を有効。
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/effects#auditifnotexists
- DeployIfNotExists
定義した条件に合致するリソースが存在しない場合にリソースをデプロイ。
https://docs.microsoft.com/ja-jp/azure/governance/policy/concepts/effects#deployifnotexists
イニシアチブ定義
一連のポリシーをグループ化したもの。
Azure Blueprints
サブスクリプション環境設定をAzure上で定義し、他の環境で再利用できるするにするサービス。
以下の項目を定義することができる。
- ロールの割り当て(RBAC)
- Azure Policy
- Azure Resource Managerテンプレート
ブループリント = 設計図、業務要件やシステム要件の意味。
https://docs.microsoft.com/ja-jp/azure/governance/blueprints/overview
https://docs.microsoft.com/ja-jp/learn/modules/intro-to-governance/
Azure RBAC
Azure リソースのアクセス権を詳細に管理できるシステム。
RBACは、ロールベースのアクセス制御の略。
Azure RBACのロールはロールが複数種類用意されており、以下の2種類のロールについて理解することが重要。
- Azureロール
- Azure ADロール
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/
Azureロール
コンピューティングやストレージなどの Azure リソースに対するアクセス管理をするロール。
Azure portal では、 [アクセス制御 (IAM)] ブレードに表示される。
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/built-in-roles
Azure ADロール
ユーザー、グループ、ドメインなどの、Azure ADのリソースを管理するロール。
グローバル管理者
グローバル管理者ロールに割り当てられているユーザーは、Azure AD 組織内のすべての管理設定の読み取りと変更を行うことができる。
管理者ロールを委任できるのはグローバル管理者と特権ロール管理者だけ。
カスタムロール
Azureの組み込みロールが要件を満たさない場合に作成する独自のカスタムロール。
{
"Name": "Virtual Machine Operator",
"Id": "88888888-8888-8888-8888-888888888888",
"IsCustom": true,
"Description": "Can monitor and restart virtual machines.",
"Actions": [
"Microsoft.Storage/*/read",
"Microsoft.Network/*/read",
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/start/action",
"Microsoft.Compute/virtualMachines/restart/action",
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Insights/alertRules/*",
"Microsoft.Insights/diagnosticSettings/*",
"Microsoft.Support/*"
],
"NotActions": [],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
"/subscriptions/{subscriptionId1}",
"/subscriptions/{subscriptionId2}",
"/providers/Microsoft.Management/managementGroups/{groupId1}"
]
}
プロパティ | 必須 | Type | 説明 |
---|---|---|---|
Name roleName | はい | String | カスタムロールの表示名。 |
Id name | はい | String | カスタムロールのID。 |
IsCustom roleType | はい | String | ロールタイプ。 true または CustomRole ⇒ カスタムロール false または BuiltInRole ⇒ 組み込みロール |
Description description | はい | String | カスタムロールの説明。 |
Actions actions | はい | String[] | 対象のロールで実行を許可する操作。 |
NotActions notActions | いいえ | String[] | 許可された Actions から除外する操作。 → 許可しない操作を指定 |
DataActions dataActions | いいえ | String[] | 対象のオブジェクト内のデータに対して、ロールで実行できるデータ操作。 |
NotDataActions notDataActions | いいえ | String[] | 許可された DataActions から除外されるデータ操作。 |
AssignableScopes assignableScopes | はい | String[] | 割り当てにカスタムロールを使用できるスコープ。 |
https://docs.microsoft.com/ja-jp/azure/role-based-access-control/custom-roles
Azure PowerShell
Azure PowerShell は、コマンドレットと呼ばれるAzure 固有のコマンドをWindowsのPowerShellに追加するアドオンパッケージ。
最近は、Linuxおよび、MacOSでも利用可能になった。
また、Azure Cloud Shellを利用することで、ブラウザからでも利用可能。