この記事では、Microsoft Entra PowerShell モジュールを使用して、アプリケーションを安全に認証してタスクを自動化する方法について説明します。 証明書ベースの認証、クライアント シークレットの資格情報、マネージド ID について説明します。
この知識により、機密性の高い資格情報を手動で管理することなく、Microsoft EntraおよびAzureリソースへの効率的で安全なアクセスが可能になります。 堅牢なセキュリティ プラクティスを維持し、クラウド環境でのアクセス管理を合理化するために重要です。
Important
アプリ専用アクセスは、アプリケーションに直接アクセス許可を付与し、管理者が必要なアクセス許可スコープに同意する必要があります。 アプリ専用アクセスの詳細については、「Microsoft ID プラットフォームと OAuth 2.0 クライアント資格情報フロー」を参照してください。
前提条件
Microsoft Entra PowerShell モジュールでアプリ専用アクセスを使用するには、次のものが必要です。
- Microsoft Entra ID アカウント。 アカウントをまだお持ちでない場合は、 無料でアカウントを作成できます。
- 次のいずれかのロール:
- Microsoft Entra PowerShell モジュールがインストールされています。 Microsoft Entra PowerShell モジュールのインストール ガイドに従って、モジュールをインストールします。
- アプリケーションの資格情報として使用する証明書。 証明書には、自己署名証明書または機関からの証明書を指定できます。 自己署名証明書を作成する方法の詳細については、「自己署名 パブリック証明書の作成」を参照してください。 運用環境のシナリオでは、自己署名証明書は推奨されません。 運用シナリオの証明機関から証明書を取得します。
証明書ベースの認証を使用する
証明書を使用して認証するには、この情報が必要です。
- Microsoft Entra のアプリ登録にアップロードされた証明書のサブジェクトまたはサムプリント。
- アプリ登録のアプリケーション ID。 アプリの登録がまだない場合は、「 カスタム アプリケーションを作成する」を参照してください。
- あなたのテナント ID。
このセクションでは、証明書を使用して Microsoft Entra PowerShell モジュールで認証する方法について説明します。 証明書の拇印、証明書名、または証明書自体を使用して認証できます。 指定した例を使用して認証するには、少なくとも 特権ロール管理者 ロールでサインインする必要があります。
証明書の拇印を使用する
$params = @{
ClientId = 'YOUR_APP_ID'
TenantId = 'YOUR_TENANT_ID'
CertificateThumbprint = 'YOUR_CERT_THUMBPRINT'
}
Connect-Entra @params
Microsoft Entra 管理センター で証明書のサムプリントを確認するには、ID>アプリの登録>証明書とシークレット>証明書 の順に移動します。 証明書を選択し、その拇印をコピーします。
または、次の PowerShell コマンドを使用して自己署名証明書を取得することもできます。
Get-ChildItem Cert:\CurrentUser\My
証明書名を使用する
$params = @{
ClientId = 'YOUR_APP_ID'
TenantId = 'YOUR_TENANT_ID'
CertificateName = 'YOUR_CERT_SUBJECT'
}
Connect-Entra @params
次のコマンドを実行して、証明書のサブジェクトを見つけることができます。
Get-ChildItem Cert:\CurrentUser\My\$CertThumbprint | Select Subject
証明書を使用する
$cert = Get-ChildItem Cert:\CurrentUser\My\$CertThumbprint
Connect-Entra -ClientId 'YOUR_APP_ID' -TenantId 'YOUR_TENANT_ID' -Certificate $cert
Microsoft Entra PowerShell に接続するときに、コンピューターの証明書ストアまたは別の場所に格納されている証明書を使用するには、証明書の場所を指定します。
認証が成功すると、 Welcome To Microsoft Graph!メッセージが表示されます。
Get-EntraContext を実行して、アプリ専用メソッドで認証されていることを確認します。 出力は次のようになります。
ClientId : YOUR_APP_ID
TenantId : YOUR_TENANT_ID
CertificateThumbprint :
Scopes : {Group.Read.All, User.Read.All}
AuthType : AppOnly
CertificateName : YOUR_CERT_SUBJECT
Account :
AppName : {Your Awesome Application Name Here}
ContextScope : Process
Environment : Global
クライアント シークレット認証情報を使用する
クライアント資格情報の付与は、アプリが自身の代わりにリソースにアクセスするための認証と承認に使用されます。 クライアント シークレット資格情報のサポートは、 -ClientSecretCredential パラメーターを Connect-Entra に追加することによって追加されます。
# Define the Application (Client) ID and Secret
$applicationClientId = '<application(client)ID>' # Application (Client) ID
$applicationClientSecret = '<secret.value>' # Application Secret Value
$tenantId = 'Tenant_Id' # Tenant ID
# Convert the Client Secret to a Secure String
$secureClientSecret = ConvertTo-SecureString -String $applicationClientSecret -AsPlainText -Force
# Create a PSCredential Object Using the Client ID and Secure Client Secret
$clientSecretCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $applicationClientId, $secureClientSecret
# Connect to Microsoft Graph Using the Tenant ID and Client Secret Credential
Connect-Entra -TenantId $tenantId -ClientSecretCredential $clientSecretCredential
クライアント シークレットを作成または追加するには、New-EntraServicePrincipalPasswordCredential コマンドを使用するか、「Microsoft Entra 管理センターにクライアント シークレットを追加する」を参照してください。
Note
クライアント シークレット資格情報の認証方法を使用する場合は、PowerShell 7 以降を使用することをお勧めします。
マネージド ID の使用
自動化スクリプトを記述する場合の一般的な課題は、サービス間の通信をセキュリティで保護するために使用されるシークレット、資格情報、証明書、およびキーの管理です。 モジュールがMicrosoft Entra IDによって保護されているAzure リソースのアクセス トークンを取得できるようにすることで、資格情報を管理する必要がなくなります。 Azure プラットフォームは ID を管理するため、シークレットを作成またはローテーションする必要はありません。
システム割り当てマネージド ID - サービス インスタンスで自動的にマネージド ID を使用します。 ID は、サービス インスタンスのライフサイクルに関連付けられています。
Connect-Entra -Identityユーザー割り当てマネージド ID - ユーザーが作成したマネージド ID をスタンドアロン Azure リソースとして使用します。
Connect-Entra -Identity -ClientId 'User_Assigned_Managed_identity_Client_Id'