前提条件
- OwnerまたはUser Access Administrator権限を持つAzureサブスクリプション。
- Microsoft Entra IDでアプリ登録を作成する権限。
- アカウントに登録済みの多要素認証。セキュリティ既定値は、多要素認証なしのアプリ登録をブロックします。
ReaderとCost Management Readerがあれば、読み取り専用のエージェントはすべて動作します。エージェントにAzureリソースを変更させる場合のみ書き込みロールを追加してください。
セットアップ
- Azure CLI
- Azureポータル
1
サブスクリプションを選択する
2
サービスプリンシパルを作成する
passwordは一度しか表示されません。3
コストへのアクセスを追加する
4
CloudThinkerで接続を追加する
Connections → Azure に移動し、
appIdをAPP_ID、passwordをCLIENT_SECRET、tenantをTENANT_IDに入力します。AZURE_DEFAULT_REGIONを選択してConnectをクリックします。成功状態: 接続がConnectedステータスで表示されます。Microsoft Customer Agreementの請求
オンラインで購入した従量課金サブスクリプションはMicrosoft Customer Agreement(MCA)を使用します。Cost ManagementはMCAサブスクリプションに対してGiven subscription doesn't have valid WebDirect/AIRS offer typeを返すため、Optimizeは請求プロファイルのスコープでコストを読み取ります。
サービスプリンシパルにそのスコープへのアクセスを付与してください。Cost Management + Billing → 請求アカウント → Billing profiles → 対象のプロファイル → Access control (IAM) → Add に移動し、アプリ登録にBilling profile readerを割り当てます。サブスクリプションのロール割り当ては請求スコープを含みません。
接続の詳細
サブスクリプションは接続フィールドではありません。CloudThinkerはサービスプリンシパルが読み取れるすべてのサブスクリプションを検出します。
必要な権限
Readerだけではコストデータを取得できません。Readerは
*/readを付与しますが、Cost Managementのクエリは*/readに一致しないPOSTアクションです。
エージェントの機能
接続後、エージェントはAzureリソースの分析と最適化を実行できます。接続を確認する
プロンプト例
トラブルシューティング
セキュリティ既定値によるサインインのブロック
セキュリティ既定値によるサインインのブロック
az loginまたはポータルがAADSTS530035: Access has been blocked by security defaultsを返します。セキュリティ既定値は、アプリを登録する前に多要素認証を要求します。aka.ms/mfasetupで認証方法を登録してから再度サインインしてください。--use-device-codeと--allow-no-subscriptionsでは回避できません。認証失敗
認証失敗
APP_ID、CLIENT_SECRET、TENANT_IDを確認します。シークレットが期限切れでないこと、アプリ登録が入力したテナントにあることを確認してください。条件付きアクセスポリシーがサービスプリンシパルのサインインをブロックしていないことも確認してください。
クライアントシークレットの期限切れ
クライアントシークレットの期限切れ
az ad sp credential reset --id <appId>を実行するか、Microsoft Entra ID → App registrations → 対象のアプリ → Certificates & secrets で新しいシークレットを作成します。接続のCLIENT_SECRETを更新してください。Optimizeにコストデータがない
Optimizeにコストデータがない
OptimizeがAzure Cost Management is not readableと表示します。サブスクリプションにCost Management Readerを割り当ててください。サブスクリプションがMicrosoft Customer Agreementの場合は、請求プロファイルにBilling profile readerも割り当てます。ロール割り当ての反映には数分かかります。
Cost Managementが429を返す
Cost Managementが429を返す
新しいサブスクリプションではCost Managementのスロットリングが強く、クエリが
429 Too many requestsを返します。設定の誤りではありません。数分待ってからOptimizeを再読み込みしてください。リソースがない
リソースがない
表示したいすべてのサブスクリプションにReaderロールが割り当てられていることを確認します。サービスプリンシパルが読み取れないサブスクリプションのリソースは表示されません。
セキュリティ
- 最小権限 — エージェントがユースケースに必要な権限のみを付与します。まず読み取り専用から始め、後から拡張してください。
- デフォルトで読み取り専用 — エージェントにこの接続で変更を行わせる場合を除き、読み取り専用の認証情報を使用してください。
- 認証情報のローテーション — 通常のスケジュールに従ってキーとトークンをローテーションしてください。接続を更新すると、CloudThinker が新しい値を自動的に取得します。
- オフボーディング時に失効 — 接続を削除するか、チームメンバーが退職する際には、プロバイダー側で認証情報を無効化してください。
- シークレットの有効期限を設定 — クライアントシークレットには常に有効期限を設定し、期限前にローテーションしてください。
- ロールのスコープを絞る — ReaderとCost Management ReaderはCloudThinkerが必要とするサブスクリプションに割り当て、既定で管理グループレベルには割り当てないでください。
関連
AWS接続
Amazon Web Servicesを接続
Oliverエージェント
Azureコンプライアンス向けセキュリティエージェント