オンプレ環境のサーバーの場合は、BIOS の SerialNumber や hostname からサーバー自身が自分の識別情報を得ることができますが、クラウド上に構築した Windows インスタンスにはこの手が使えません。
AWS の場合は、Web API と、EC2 インスタンスにプレインストールされている PowerSehell の AWS 拡張で Name TAG 等の識別情報を得ることができます。
Web API で取得できる情報は、http://169.254.169.254/latest/meta-data/ で確認できます。
PS C:\> Invoke-RestMethod -Uri
http://169.254.169.254/latest/meta-data/ ami-id ami-launch-index ami-manifest-path block-device-mapping/ hostname instance-action instance-id instance-type local-hostname local-ipv4 mac metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups services/ |
これを見ると、instance-id と local-hostname が識別子に使えそうです。
値を取得するには、以下のようにします。
PS C:\> Invoke-RestMethod -Uri
http://169.254.169.254/latest/meta-data/local-hostname ip-172-31-10-149.ap-northeast-1.compute.internal PS C:\> Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/instance-id i-07b89f6831aaf62d4 |
これらの値は、AWS が割り当てる値なので、管理に使いにくいという事であれば、EC2 インスタンスに出来る Name TAG が便利でしょう。
Name TAG は、PowerShell の AWS 拡張コマンドレットの Get-EC2Tag
で取得できるのですが、このコマンドレットを使うには IAM で発行した AccessKey と SecretKey が必要です。
(EC2
の外から特定インスタンスの Name TAG を取得するのと同じ事を EC2 内で実行します)
必要以上の権限を持ったユーザーを使うのはセキュリティ上好ましくないので、必要最低限の権限を持ったユーザーを作成し、そいつの AccessKey SecretKey を使うのがお勧めです。
AWS の既存ポリシーを使うのであれば、AmazonEC2ReadOnlyAccess あたりが良いでしょう。
ちなみに、EC2 の PS 実行ポリシーが、AllSigned になっているので、AWS PowerShell
拡張ロード時に対話処理が入ります。
これがうざいので、RemoteSigned に変更しておくのがお勧めです。
# PowerShell 実行ポリシー設定 Set-ExecutionPolicy RemoteSigned -Force # AccessKey、SecretKey は架空の値です $Region = "ap-northeast-1" $AccessKey = "HOGEHOGE123456789012" $SecretKey = "APK60uPn5dJ2CqYCysgsAPK60uPn5dJ2CqYCysgs" # EC2 タグの取得 [array]$EC2Tags = Get-EC2Tag -Region $Region -AccessKey $AccessKey -SecretKey $SecretKey |
Get-EC2Tag で取得したタグは、自分の EC2 インスタンス以外のものも含まれているので、自分のインスタンスIDで自分のタグに絞ります。
### 自分の TAG だけにする # インスタンス ID $InstanceId = Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/instance-id # インスタンス ID で自分のタグだけを取り出す [array]$MyTags = $EC2Tags | ? {$_.ResourceId -eq $InstanceId} |
Name タグは、Key に "Name" がセットされています。
# Name TAG の値を取り出す $NameTagData = $MyTags | ? {$_.Key -eq "Name"} # Name TAG の値を表示 echo $NameTagData.Value |
これで、自分自身の Name TAG 情報を取得することが出来ました。
一連の処理を関数にするとこんな感じです
|
関数を PowerShell プロンプトで実行する
http://www.vwnet.jp/Windows/PowerShell/2016100401/UseFunctionInPsPrompt.htm
スケジュールジョブ(PowerShell)でパスワードをセキュアに使う(証明書編)
http://www.vwnet.jp/Windows/WS12R2/Password/CertPassword.htm
Copyright © MURA All rights reserved.