Microsoft Entra ID でのサービス プリンシパルを使用した認証
あなたの会社のスタッフは、日々の業務で複数のオンプレミス アプリケーションを使用しています。 最近、会社全体のセキュリティ監査が完了しました。 監査で、複数のアプリケーションにおいて設計上の欠陥が明らかになりました。 監査で、アプリケーション ソース コードか関連付けられている構成ファイルに格納されているユーザー名とパスワードが見つかりました。
レポートでは、ユーザー名とパスワードをコードまたは構成ファイル内に格納することについて、次のようなセキュリティの問題が示されました。
- プレーンテキストで保存されているパスワードに、誰でもアクセスできる。
- 侵害されたユーザーの資格情報により、エンタープライズのネットワーク セキュリティが脅かされている。
- 侵害されたユーザー資格情報を使用することにより、売上データやマーケティング データなどの機密リソースにアクセスできる。
- 現在の資格情報ストレージ方法では、不要なオーバーヘッドが発生する。 資格情報の有効期限が切れると、アプリケーションを更新して再デプロイする必要がある。
- 現在の資格情報ストレージ ソリューションでは、アプリケーションがオンプレミスに制限される。 大幅な変更を加えることなく、アプリケーションをクラウド使用に拡張することができない。
あなたは開発者として、これらの問題を修正することを求められています。 監査レポートでは、アプリケーションのセキュリティを向上させるために、Azure サービス プリンシパルの使用が提案されていました。
このユニットでは、Azure サービス プリンシパルについてさらに詳しく調べます。 これらの背景にある概念と、Azure リソースにアクセスするためにこれらを実装する方法について学習します。
Azure サービス プリンシパルとは
Azure サービス プリンシパルは、アプリまたはサービスを表すプロキシ アカウント (ID) と考えることができます。 Microsoft Entra ID でこのアカウントを管理します。 必要な Azure リソースへのアクセス権をサービス プリンシパルに付与します。 資格情報を埋め込んだり、アプリのダミー アカウントを作成したりする代わりに、サービス プリンシパルを使用します。
サービス プリンシパルは、Azure のテナント レベルに存在します。 これらは、そのテナント内のリソースへのアクセスを許可するために使用されます。
Azure portal で、アプリを表す Microsoft Entra アプリケーションを作成できます。 次に、このアプリケーション オブジェクトをサービス プリンシパルに関連付けることができます。
すべてのリソースが同じテナント内にある場合は、1 つのサービス プリンシパルを関連付けるだけでかまいません。 アプリで別のテナントの Azure リソースにアクセスする必要がある場合は、テナントごとにサービス プリンシパルが必要です。
サービス プリンシパルは、次のいずれかのオプションを使用して作成できます。
- ポータルを使用する
- PowerShell を使用する
- CLI コマンドを使用する
- API 呼び出しを使用する
アプリケーションで Microsoft ID プラットフォームを使用する
Microsoft ID プラットフォームを使うと、Microsoft Entra ID でのアプリケーションの認証方法が簡単になります。 アプリを認証するための統一された方法が提供されます。 アプリケーションは、Microsoft Entra ID で正常に認証されると、一意のトークンを受け取ります。 アプリケーションでは、API の呼び出しまたはサービスへのアクセスの呼び出しを行うたびに、このトークンが使用されます。 アプリケーションをビルドするには、Microsoft Authentication Library (MSAL) を使用して、シングル サインオンのサポートを提供します。
Microsoft ID プラットフォーム用にアプリケーションをプロビジョニングするには、複数の方法があります。 ここでは、ポータルを使用して Azure にアプリケーションを登録します。
Azure portal にサインインして、[Microsoft Entra ID] を選びます。
[アプリの登録] を選択します。
左上隅にある [新規登録] を選択します。
アプリの表示名を入力します。
サポートされているアカウントの種類のいずれかを指定します。 次の項目から選択できます。
- 自分の会社の Microsoft Entra テナント内のアカウント。
- 任意の会社の Microsoft Entra テナント内のアカウント。
- 任意の組織アカウントと個人アカウント (Microsoft や Xbox など)。
("省略可能") [リダイレクト URI] パラメーターを選択します。 使用可能なのは、Web とパブリック クライアントの 2 種類です。 リダイレクト URI は、Web リンク (HTTPS) の形式をとります。 このリンクは、パブリック クライアントを選択しない限り、有効である必要はありません。
手順を完了すると、アプリケーションが Microsoft Entra ID に登録されます。 サービス プリンシパルにも関連付けられています。
アプリケーション ロールの割り当て
他のサービスを使用するには、Microsoft Entra アプリケーションにロールを割り当てる必要があります。 Azure では、Azure リソースへのアクセスを厳密に管理し、それらのリソースの使用方法を管理するために、ロールベースのアクセス制御 (RBAC) が使用されています。 アプリケーションのロールによって、そのアクセス許可とスコープが決まります。
RBAC のアクセス許可は、スコープ セットのレベルから継承されます。 たとえば、リソース グループに閲覧者ロールを割り当てると、そのグループ内のすべてのリソースに読み取りアクセス許可が割り当てられます。
Azure portal を使用して、アプリがキー コンテナーにアクセスするために必要なロールを割り当てます。
- ポータルでキー コンテナーを選択します。
- 左の [アクセス制御 (IAM)] を選択します。
- [ロールの割り当ての追加] を選択します。
- 必要なロールを選択します。
- [メンバー] タブでは、既定の [アクセスの割り当て先] オプションをそのまま使います。ユーザー、グループ、またはサービス プリンシパルに割り当てます。
- [+ メンバーの選択] を選択します。
- アプリケーションを検索して選択します。
- [レビューと割り当て] を選択します。
キーとアクセス許可を管理する
サービス プリンシパルを使用して Azure リソースにアクセスするには、次の 2 つのパラメーターが必要です。
- ディレクトリ (テナント) ID:Microsoft Entra テナントを識別する一意の ID。
- アプリケーション (クライアント) ID:Microsoft Entra アプリケーションを識別する一意の ID。
要求を認証するには、アプリケーションに資格情報が必要です。 資格情報により、アプリケーションは自身を識別することができます。 次の 2 つの形式の資格情報から選ぶことができます。
- 証明書: 証明書をローカルに生成し、.cer、.pem、または .crt ファイルをアップロードします。 証明書は一般的に公開キーと呼ばれます。
- クライアント シークレット:この複雑なシークレットの文字列は、Azure で生成されます。 クライアント シークレットは、アプリケーション パスワードとも呼ばれます。
クライアント シークレットと証明書のどちらを使用する場合でも、この資格情報の有効期限を定義する必要があります。 有効期限は組織によって異なりますが、1 年または 2 年を選択することをお勧めします。
Note
証明書は有効期限切れになることがあるため、セキュリティを最大限に高めるために、クライアント シークレットの有効期限を設定します。 これらの資格情報を管理することが、サービス プリンシパルを使用して Azure リソースにアクセスするアプリの欠点です。
サービス プリンシパルを使用する場合
Microsoft Entra アプリケーションを作成し、サービス プリンシパルを関連付けて、リソースへのアクセスを許可する手動プロセスについて学習しました。 これらの手動プロセスは、次の 2 つのシナリオでのみ使用します。
- アプリケーションまたはサービスがオンプレミスで実行されている場合。
- アクセスする必要があるリソースまたはアプリケーションで、マネージド ID がサポートされていない場合。
Azure 内で認証を処理するための最も安全で便利な方法は、マネージド ID を使用することです。