Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

Azure VMでHPC Pack 入りの イメージギャラリーを使ったらハマった

Azure VM のイメージギャラリーにHPCパック入りが用意されていたので、試していたんですが、 Azureノードテンプレート作成部分でハマっのでメモ。

ヘッドノードからAzureサブスクリプションにアクセスできるよう、サブスクリプションIDと証明書を指定するのですが、証明書はデフォルトでHPC Packが用意してくれてます。

Requirements to Add Azure Nodes with Microsoft HPC Pack からの引用。

Use the Default Microsoft HPC Azure Management certificate that is generated automatically on the head node when HPC Pack is installed. This certificate is self-signed and unique to your installation of HPC Pack on the head node. This certificate is intended only for testing purposes and proof-of-concept deployments. This certificate file is located in the following location on the head node computer: %CCP_HOME%\bin\hpccert.cer.

hpccert.cer が用意されていて、証明書ストアにも入っているのでコレを使うと楽チンです。対象のAzureサブスクリプションに管理ポータルにアップロードしておけばOKなんですが、何度やっても以下のエラーがでる。

f:id:StateMachine:20141212134042p:plain

なんかこの時期のSSL絡みのエラーなんで、例の脆弱性がからんでいるかと思っていろいろやってみましたが、解決しませんでした。

結局、自分で証明書を作り、ストアに入れ、管理ポータルにもアップしてやってみたら、ちゃんと認識しました。

といわけで、hpcceret が使えない原因は分かってません。

Azureのエンドポイントを一括して定義

Azureのエンドポイントは、レンジを指定することができないので、ループでぐるぐる回す備忘録。ただ登録数にも上限があるので、あまりたくさんは開けなかったはず。

$startPort = 9000
$endPort   = 9100
$prefix    = "Port-"

$vm = Get-AzureVM -ServiceName cloudserviename -Name vmname

For($port = $startPort; $port -le $endPort; $port++) 
{
    $name = $prefix + $port
    $vm = $vm | Add-AzureEndpoint -Name $name -Protocol tcp -PublicPort $port -LocalPort $port
}

$vm | Update-AzureVM

Azure と 組織アカウント と 私

Azure(だけではありませんが)を利用するためのアカウントとして、

  • Microsoft アカウント
  • 組織アカウント

と2種類の物があります。

利用者にとっては、どーでもいい話だったりしますが、あるメールアドレスがMSアカウントであるかつ、組織アカウントな場合もあるわけです。

細かい違いなどは、マイクロソフト 双子のクラウド - 一般消費者向けと企業向けクラウド - ビジネスプロダクティビティ製品チーム - Site Home - TechNet Blogs を見ると書かれているらしいです。

Azure では

最近のAzureのコマンドラインツールでは、従来の証明書型認証に加えて、これらのアカウントで認証できるようになりました。

Azure PowerShell で以下を実行すると、認証のダイアログがでて、MSアカウントでも組織アカウントでも認証できます。たまにバグって組織アカウントしか機能しなくなってしまうことがあるみたいですが。

Add-AzureAccount

二つ目に、Credential を指定して認証することもできるのですが、この場合、組織アカウントでのみ機能します。

$userName = "ユーザ名"
$password = "パスワード"
$secPassword = ConvertTo-SecureString $password -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential( $userName,$secPassword )
Add-AzureAccount -Credential $Credential

3つ目に、Azure Cross-Platform Command Line Tools (Azure CLI) でも最近、このような認証が出来るようになりました。

azure login 

上記実行すると、User/Passwordを聞かれますが、やはり組織アカウントのみです。

以下でも書かれています。

http://azure.microsoft.com/ja-jp/documentation/articles/xplat-cli/

ログインによる方法は組織のアカウントで機能します。

Workaround

で、通常はMSアカウトにAzureサブスクリプションが紐付いていることが多い(自分)ので、オレオレ組織アカウントを1つ作成しておくのが、面倒がなくて良いかと思います。 手順は、上記URLにも書いてありますが、

  1. Azureにログイン
  2. Azure Active Directoryを開き、既存のディレクトリに任意の組織アカウントユーザを追加
  3. 多分、hogefuga@xxxxx.onmicrosoft.com みたいな名前
  4. 管理にいって、↑のアカウントを共同管理者(Co-Admin)に設定。
  5. いちど、その組織アカウントでログインして、パスワードを再設定する

ことで、組織アカウントを求められる部分で、利用できるかと思います。

ほんと、ID管理はよく分かりませんね、それではまた。