TerraformでAzure Kubernetes Serviceを作成してOrca Securityでスキャンしてセキュリティリスクがどの程度あるか診断してみました。この記事は手順の備忘録です。
前提条件
前提条件です。Orca Securityのテナント払い出しは営業担当者経由で実施します。こちらからコンタクトお願いします。
- Azureのアカウントが払い出されていて有効化されたSubscriptionが1つ以上ある
- Orca Securityのテナントが払い出されている
- MacBookにAzure CLI, Git, Terraformがインストール済
作業ログ
Azure Kubernetes Serviceクラスタの作成
Azure CLIで該当のAzureテナントにLoginします。Chomeが起動してLogin認証を求められます。ご自身のアカウントでLoginお願いします。
$ az login
TerraformのAzureサンプルをGit RepoからCloneします。
$ git clone git@github.com:hashicorp/terraform-provider-azurerm.git
terraform-provider-azurerm/examples/kubernetes/basic-cluster/outputs.tfを編集して各々のブロックに"sensitvie = true"を追加します。以下編集後の状態です。
output "id" {
value = azurerm_kubernetes_cluster.example.id
sensitive = true
}
output "kube_config" {
value = azurerm_kubernetes_cluster.example.kube_config_raw
sensitive = true
}
output "client_key" {
value = azurerm_kubernetes_cluster.example.kube_config.0.client_key
sensitive = true
}
output "client_certificate" {
value = azurerm_kubernetes_cluster.example.kube_config.0.client_certificate
sensitive = true
}
output "cluster_ca_certificate" {
value = azurerm_kubernetes_cluster.example.kube_config.0.cluster_ca_certificate
sensitive = true
}
output "host" {
value = azurerm_kubernetes_cluster.example.kube_config.0.host
sensitive = true
}
Terraformを初期化します。
$ terraform init
Initializing the backend...
Initializing provider plugins...
- Reusing previous version of hashicorp/azurerm from the dependency lock file
- Using previously-installed hashicorp/azurerm v3.12.0
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
applyしてAzure Kubernetes Serviceクラスタを作成します。var.localtionには任意のAzure Regionを、var.prefixには任意の文字列を指定します。
$ terraform apply
var.location
The Azure Region in which all resources in this example should be provisioned
Enter a value: East US
var.prefix
A prefix used for all resources in this example
Enter a value: cookiewanwan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
--omit--
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Outputs:
--omit--
Resourceが作成できているか確認します。
$ az resource list
[
{
"changedTime": "2022-07-04T02:39:03.390194+00:00",
"createdTime": "2022-07-04T02:35:10.654842+00:00",
"extendedLocation": null,
"id": "/subscriptions/adbf3b45-677e-427b-af99-4bfa3c1f27a4/resourceGroups/cookiewanwan-k8s-resources/providers/Microsoft.ContainerService/managedClusters/cookiewanwan-k8s",
"identity": {
"principalId": "27f52891-62ab-42eb-9db1-fed3d388b4c8",
"tenantId": "6a5f91fe-6a84-4d5b-a7f1-dbab8a01b1e4",
"type": "SystemAssigned",
"userAssignedIdentities": null
},
"kind": null,
"location": "eastus",
"managedBy": null,
"name": "cookiewanwan-k8s",
"plan": null,
"properties": null,
"provisioningState": "Succeeded",
"resourceGroup": "cookiewanwan-k8s-resources",
"sku": null,
"tags": null,
"type": "Microsoft.ContainerService/managedClusters"
},
{
"changedTime": "2022-07-03T23:49:38.179685+00:00",
"createdTime": "2022-07-03T23:39:37.783959+00:00",
"extendedLocation": null,
"id": "/subscriptions/adbf3b45-677e-427b-af99-4bfa3c1f27a4/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_eastus",
"identity": null,
"kind": null,
"location": "eastus",
"managedBy": null,
"name": "NetworkWatcher_eastus",
"plan": null,
"properties": null,
"provisioningState": "Succeeded",
"resourceGroup": "NetworkWatcherRG",
"sku": null,
"tags": null,
"type": "Microsoft.Network/networkWatchers"
}
]
Orca Securityでスキャン
ChromeでOrca SecurityのコンソールにLogin、右下の"Settings"-->"Connect Account"をクリック、"Microsoft Azure"を選択します。
該当のテナントIDを取得します。
$ az account show | jq .tenantId
"6a5f91fe-6a84-4d5b-a7f1-dbab8a01b1e4"
該当のSubscriptionIDを取得します。
$ az account list --query "[?state == 'Enabled'].id" -o tsv --all
adbf3b45-677e-427b-af99-4bfa3c1f27a4
コンソールに戻って取得した値をペーストします。"APPROVE THE APP"をクリックしてAzure AD Enterprise Applicationを作成することを承認します。"Run the onboarding template by clicking here HERE"をクリックして、Orca Securityがスキャンするために必要なAzureリソースを作成します。
右下の"Connect Account"をクリックするとスキャンが開始します。
数十分後にスキャンが完了します。Alertのサンプルを掘り下げて見てみます。Terraformで作成したデフォルトのRoleが持つ権限が広範囲なPermissionを持ちすぎているので注意と怒られます。細かいですね。
おわりに
最後までお付き合い頂きありがとうございます。この記事では作成したk8sクラスタは空のためPII等気密性の高い情報は含まれていませんが、実運用では住所やマイナンバー等、PIIに該当する情報がPublicなS3バケットに暗号化されていない状態で置かれていて簡単に漏洩してしまうケースもあるかと思います。Orca Securityはそのような状態を緊急Alertとして上げてSecurityチームに直ちに対処するように促します。