Azure Administrator対策「サブスクリプションおよびリソースを管理」

はじめに

AZ-103「Azure Administrator」対策として、Microsoft Learnなどを要約したものを記載。

サブスクリプション

Azure でリソースをプロビジョニングするために使用される論理コンテナーまた、Azureにおける課金の単位。

仮想マシン(VM)やデータベースなどのすべてのリソースの詳細が保持される。

月単位で課金され、請求期間の終了後10日以内に自動的に請求される。

サブスクリプションは以下のような単位で設定することができる。

  • 環境による分割 : 商用、開発、テストなどの個別の環境を設定する必要がある場合

  • 組織構造による分割 : 部門、チーム、またはプロジェクト別に課金を整理する必要がある場合

サブスクリプションの制限

サブスクリプションにはいくつかの制限がある。

※ 例

サブスクリプションごとの Express Route 回線の最大数は 10。

制限されている値を超えて利用をする場合、Azureポータルからサポートチケットを開いてクォータ(割当て量)の増加を依頼する必要がある。

https://docs.microsoft.com/ja-jp/azure/azure-resource-manager/management/azure-subscription-service-limits


タグ

タグはリソース、リソースグループ、サブスクリプションを割り当てることで、 それぞれを分類して整理する機能。

タグはタグ名とタグの値からなるキーバリュー形式で設定を行う。

※ 例 : タグ名「Environment」、タグの値「Production」

主な制約事項

  • タグ名は大文字と小文字を区別されない

    ※ リソースプロバイダーは、タグ名に指定した大文字小文字を保持する場合がある

  • タグの値は大文字と小文字が区別される

  • リソースグループおよびサブスクリプションに適用されたタグはリソースに継承されない

    ※「Azureポリシー」でタグの設定が必要

  • タグ名は512文字に、タグ値は256文字に制限

    ※ ストレージアカウントの場合、タグ名は128文字に制限され、タグ値は256文字に制限

  • タグ名は、以下の記号を含めることができない

    :<、>、%、&

https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/tag-resources

タグごとのコストを表示

Azure portalから[コストの管理と請求] > [コスト管理] > [コスト分析]を指定。

[グループ化]をクリックし、タグを選択するとタグ別のコストが表示できる。

https://docs.microsoft.com/ja-jp/azure/cost-management-billing/costs/cost-analysis-common-uses#view-costs-for-a-specific-tag


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に指定できるリソースプロバイダーは下記のドキュメントに記載されている。

https://docs.microsoft.com/ja-jp/azure/role-based-access-control/resource-provider-operations#microsoftresources

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/rbac-and-directory-admin-roles#azure-roles

https://docs.microsoft.com/ja-jp/azure/role-based-access-control/built-in-roles

Azure ADロール

ユーザー、グループ、ドメインなどの、Azure ADのリソースを管理するロール。

https://docs.microsoft.com/ja-jp/azure/role-based-access-control/rbac-and-directory-admin-roles#azure-ad-roles

グローバル管理者

グローバル管理者ロールに割り当てられているユーザーは、Azure AD 組織内のすべての管理設定の読み取りと変更を行うことができる。

管理者ロールを委任できるのはグローバル管理者と特権ロール管理者だけ。

https://docs.microsoft.com/ja-jp/azure/active-directory/users-groups-roles/directory-assign-admin-roles

カスタムロール

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を利用することで、ブラウザからでも利用可能。

Azure PowerShellの命名規約