Docs Menu
Docs Home
/ / /
Go Driver
/

エンタープライズ認証メカニズム

項目一覧

  • Overview
  • GSSAPI/Kerberos への認証
  • カスタム SERVICE_NAMESERVICE_REALMフィールドを設定する
  • LDAP(PLAIN)への認証
  • MONGODB-OIDC
  • Azure IMDS
  • GCP IMDS
  • カスタム コールバック
  • その他の Azure 環境
  • GCP GKE
  • 詳細情報
  • API ドキュメント

このガイドでは、MongoDB Enterprise Edition で利用可能な認証メカニズムを使用して、MongoDB で認証する方法を学習できます。 認証メカニズムは、ドライバーとサーバーが接続前にクライアントの ID を確認し、セキュリティを確保するためのプロセスです。

MongoDB Enterprise Edition の最新バージョンでは、次の認証メカニズムを使用できます。

  • GSSAPI/Kerberos

  • LDAP (Plain)

別のメカニズムを使用して認証するには、 認証メカニズムの基礎ページを参照してください。 MongoDB クラスターへの接続を確立する方法の詳細については、「接続ガイド 」を参照してください。

次の方法で MongoDB に接続するときに、認証メカニズムと認証情報を指定できます。

  • 接続string URIを使用します。 エンタープライズ認証で接続string URI を使用する方法の詳細については、 接続文字列 URI に関するstringマニュアルのエントリを参照してください。

  • Credentialタイプで認証情報と認証メカニズムを指定します。

ジェネリック セキュリティ サービス API(GSSAPI)認証メカニズムにより、ユーザーはユーザーのプリンシパルを使用して Kerberos サービスへの認証を行えます。

Kerberos認証を使用するには、 gssapiビルド タグcgo を使用し、コンパイル中に cgo サポートを指定する必要があります。 のサポートは、以前に環境変数を別のプラットフォームにクロスコンパイルしない限り、デフォルトで有効になっています。gssapi ビルド タグを使用するには、次のコマンドでコードをコンパイルします。

go build -tags gssapi

この例では、次のプレースホルダーを使用して認証メカニズムを指定します。

  • Kerberos principal: Kerberos プリンシパル。 サンプル ユーザー名はmyuser@KERBEROS.EXAMPLE.COMです。

  • password: Kerberos ユーザーのパスワード。 コード内でパスワードが公開されないように、 keytabファイルにパスワードを保存することもできます。

  • connection uri: 接続string URI。

次のコードは、Kerberos で認証し、認証設定を持つクライアントを作成するためのCredential構造体を定義する方法を示しています。

credential := options.Credential{
AuthMechanism: "GSSAPI",
Username: "<Kerberos principal>",
Password: "<password>",
PasswordSet: true,
}
uri := "<connection uri>"
clientOpts := options.Client().ApplyURI(uri).SetAuth(credential)
client, err := mongo.Connect(context.TODO(), clientOpts)

認証キーをkeytabファイルに保存する場合は、 Credential構造体でパスワードやPasswordSetフィールドを定義する必要はありません。 kinitバイナリを使用して、Kerberos プリンシパルを認証するための認証情報キャッシュを初期化できます。 kinitバイナリの詳細については、 Oracle のドキュメントを参照してください。

次のコマンドは、サンプル ユーザー名の認証情報キャッシュを呼び出す方法を示しています。

kinit myuser@KERBEROS.EXAMPLE.COM

あるいは、 URL エンコードされ た接続string URI を使用して認証することもできますKerberos プリンシパル、パスワード、 ( サーバーのネットワーク アドレス)hostnameMongoDB

uri := "mongodb://<Kerberos principal>:<password>@<hostname>/?authMechanism=GSSAPI"

Credential構造体のAuthMechanismPropertiesフィールドを使用して、認証メカニズムに追加のプロパティを指定できます。 Kerberosのデフォルトのサービス名は「 MongoDB 」です。 SERVICE_NAMESERVICE_REALM次のコードは、Credential 構造体を定義するときに、 フィールドと フィールドにカスタム値を設定する方法を示しています。

credential := options.Credential{
AuthMechanism: "GSSAPI",
Username: "<Kerberos principal>",
Password: "<password>",
AuthMechanismProperties: map[string]string{
"SERVICE_REALM": "<Kerberos service realm>",
"SERVICE_NAME": "<service name>",
},
}

追加のプロパティについては、認証プロパティ に関するサーバー マニュアルのエントリを参照してください。

ディレクトリ サーバーのユーザー名とパスワードを使用して、LDAP(Lightweight Directory Access Protocol)サーバーで認証できます。

警告

この認証メカニズムはパスワードをプレーンテキストでサーバーに送信するため、このメカニズムは TLS 接続でのみ使用してください。

この例では、次のプレースホルダーを使用して認証メカニズムを指定します。

  • LDAP username: LDAP ユーザー名

  • password: LDAP パスワード

  • connection uri: 接続string URI

次のコードは、LDAP で認証し、認証設定を持つクライアントを作成するためのCredential構造体を定義する方法を示しています。

credential := options.Credential{
AuthMechanism: "PLAIN",
Username: "<LDAP username>",
Password: "<password>",
}
uri := "<connection uri>"
clientOpts := options.Client().ApplyURI(uri).SetAuth(credential)
client, err := mongo.Connect(context.TODO(), clientOpts)

あるいは、接続string URI を使用して認証することもできます。これには、 LDAPユーザー名とパスワード、hostname としてMongoDBサーバーのネットワーク アドレスを指定します。

uri := "mongodb://<LDAP username>:<password>@<hostname>/?authMechanism=PLAIN"

注意

重要

MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。

Go ドライバーは、ワークロード IDの OpenID Connect( OIDC )認証をサポートしています。 ワークロード ID は、他のサービスとリソースを認証してアクセスするために、アプリケーション、サービス、スクリプト、またはコンテナなどのソフトウェア ワークロードに割り当てる ID です。

次のセクションでは、MONGODB-OIDC 認証メカニズムを使用してさまざまなプラットフォームに認証する方法について説明します。

MONGODB-OIDC 認証メカニズムの詳細については、 MongoDB ServerMongoDB Serverマニュアルの 「 OpenID Connect 認証 」 と 「 パラメーター 」 を参照してください。

アプリケーションが Azure VM 上で実行され、 や Azure インスタンス メタデータ サービス が使用される場合 (MDS) では、Go ドライバーに組み込まれている Azure サポートを使用して MongoDB に認証できます。

次の方法で Azure IMDS 用の OIDC を構成できます。

  • Credential構造体を作成し、それをSetAuth()メソッドに渡すことで、クライアントの作成時に

  • 接続stringにパラメーターを設定することで

注意

AuthMechanismProperties構造体フィールド値にカンマが含まれている場合は、認証オプションを設定するためにCredentialインスタンスを作成する必要があります。

まず、次の例に示すように、認証メカニズムのプロパティを保存するためのマップを作成します。 <audience>プレースホルダーを、MongoDB 配置に設定されたaudienceパラメータの値に置き換えます。

props := map[string]string{
"ENVIRONMENT": "azure",
"TOKEN_RESOURCE": "<audience>",
}

次に、次のCredential構造体フィールドを設定します。

  • Username: Azure マネージド ID を使用している場合は、管理対象 ID のクライアント ID にこれを設定します。 サービス プリンシパル を使用してエンタープライズ アプリケーションを表す場合は、これをサービス プリンシパルのアプリケーション ID に設定します。

  • AuthMechanism: "MONGODB-OIDC"に設定します。

  • AuthMechanismProperties: 以前に作成したpropsマップに設定します。

次のコード例は、 Clientの作成時にこれらのオプションを設定する方法を示しています。

uri := "mongodb://<hostname>:<port>"
props := map[string]string{
"ENVIRONMENT": "azure",
"TOKEN_RESOURCE": "<audience>",
}
opts := options.Client().ApplyURI(uri)
opts.SetAuth(
options.Credential{
Username: "<Azure client ID or application ID>",
AuthMechanism: "MONGODB-OIDC",
AuthMechanismProperties: props,
},
)
client, err := mongo.Connect(context.TODO(), opts)
if err != nil {
panic(err)
}

接続stringに次の接続オプションを含めます。

  • username: Azure マネージド ID を使用している場合は、管理対象 ID のクライアント ID にこれを設定します。 サービス プリンシパル を使用してエンタープライズ アプリケーションを表す場合は、これをサービス プリンシパルのアプリケーション ID に設定します。

  • authMechanism: MONGODB-OIDCに設定します。

  • authMechanismProperties: ENVIRONMENT:azure,TOKEN_RESOURCE:<audience>に設定します。 <audience>プレースホルダーを、MongoDB 配置に設定されたaudienceパラメータの値に置き換えます。

次のコード例は、 接続stringでこれらのオプションを設定する方法を示しています。

uri := "mongodb://<hostname>:<port>/?" +
"username=<Azure client ID or application ID>" +
"&authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>"
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
if err != nil {
panic(err)
}

Tip

アプリケーションが Azure VM で実行されており、VM に関連付けられている管理対象 ID が 1 つだけの場合は、 username接続オプションを省略できます。

アプリケーションが Google Compute Engine VM で実行され、または GCP インスタンス メタデータ サービス を使用している場合 では、Go ドライバーに組み込まれている GCP サポートを使用して MongoDB に認証できます。

GCP IMDS 用の OIDC は次の方法で構成できます。

  • Credential構造体を作成し、それをSetAuth()メソッドに渡すことで、クライアントの作成時に

  • 接続stringにパラメーターを設定することで

注意

AuthMechanismProperties構造体フィールド値にカンマが含まれている場合は、認証オプションを設定するためにCredentialインスタンスを作成する必要があります。

まず、次の例に示すように、認証メカニズムのプロパティを保存するためのマップを作成します。 <audience>プレースホルダーを、MongoDB 配置に設定されたaudienceパラメータの値に置き換えます。

props := map[string]string{
"ENVIRONMENT": "gcp",
"TOKEN_RESOURCE": "<audience>",
}

次に、次のCredential構造体フィールドを設定します。

  • AuthMechanism: "MONGODB-OIDC"に設定します。

  • AuthMechanismProperties: 以前に作成したpropsマップに設定します。

次のコード例は、 Clientの作成時にこれらのオプションを設定する方法を示しています。

uri := "mongodb://<hostname>:<port>"
props := map[string]string{
"ENVIRONMENT": "gcp",
"TOKEN_RESOURCE": "<audience>",
}
opts := options.Client().ApplyURI(uri)
opts.SetAuth(
options.Credential{
AuthMechanism: "MONGODB-OIDC",
AuthMechanismProperties: props,
},
)
client, err := mongo.Connect(context.TODO(), opts)
if err != nil {
panic(err)
}

接続stringに次の接続オプションを含めます。

  • authMechanism: MONGODB-OIDCに設定します。

  • authMechanismProperties: ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>に設定します。 <audience>プレースホルダーを、MongoDB 配置に設定されたaudienceパラメータの値に置き換えます。

次のコード例は、 接続stringでこれらのオプションを設定する方法を示しています。

uri := "mongodb://<hostname>:<port>/?" +
"&authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>"
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
if err != nil {
panic(err)
}

Goドライバーでは、 Amazon Web Services Elastic Kubernetes Service(EKS)を含むすべてのプラットフォームの組み込みサポートを提供していません。 サポートされていないプラットフォームで認証するには、OIDC を使用して認証するためのカスタム コールバック関数を定義する必要があります。 ドライバーでは、 options.OIDCCallback関数を定義し、 Credential構造体のOIDCMachineCallback構造体フィールドの値として設定できます。

次の例では、構成された IAM OIDC プロバイダーを持つ EKS クラスターのカスタム コールバックを定義します。 アクセス トークンは、 AWS_WEB_IDENTITY_TOKEN_FILE環境変数に設定されたパスから読み取られます。

eksCallback := func(_ context.Context,
_ *options.OIDCArgs) (*options.OIDCCredential, error) {
accessToken, err := os.ReadFile(
os.Getenv("AWS_WEB_IDENTITY_TOKEN_FILE"))
if err != nil {
return nil, err
}
return &options.OIDCCredential{
AccessToken: string(accessToken),
}, nil
}

次に、定義した EKS コールバック関数を使用するCredential構造体を作成できます。

uri := "mongodb://<hostname>:<port>"
opts := options.Client().ApplyURI(uri)
opts.SetAuth(
options.Credential{
AuthMechanism: "MONGODB-OIDC",
OIDCMachineCallback: eksCallback,
},
)
client, err := mongo.Connect(context.TODO(), opts)
if err != nil {
panic(err)
}

アプリケーションが Azure Functions、App Service environment(ASE)、または Azure Kubernetes Service(AKS)で実行される場合は、 azdentity を使用できます 認証資格情報を取得するためのモジュールを使用します。

まず、次のコマンドを実行してazidentityモジュールをインストールします。

go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity

OIDCCallback関数は、 azidentityパッケージから生成されたAccessTokenを使用するOIDCCredentialインスタンスを返す必要があります。 アクセス トークンを検索するためのカスタム コールバックを実装し、 Credentialを作成する例については、前述のカスタム コールバックセクションを参照してください。

アプリケーションが、 構成されたサービス アカウント を持つ GCP Google Kubernetes Engine(GKE)クラスターで実行されている場合 に設定されている場合、標準のサービス アカウント トークンファイルの場所から OIDC トークンを読み込むことができます。

まず、 OIDCCallback関数を定義します。 この関数は OIDC トークンを読み取り、 OIDCCredentialインスタンスを返します。

次の例では、 gkeCallbackという名前のコールバック関数を定義しています。 この関数は、標準のサービス アカウント トークン ファイルの場所内のファイルから OIDC トークンを検索します。

gkeCallback := func(_ context.Context,
_ *options.OIDCArgs) (*options.OIDCCredential, error) {
accessToken, err := os.ReadFile(
"/var/run/secrets/kubernetes.io/serviceaccount/token")
if err != nil {
return nil, err
}
return &options.OIDCCredential{
AccessToken: string(accessToken),
}, nil
}

次に、定義した GKE コールバック関数を使用するCredential構造体を作成できます。

uri := "mongodb://<hostname>:<port>"
opts := options.Client().ApplyURI(uri)
opts.SetAuth(
options.Credential{
AuthMechanism: "MONGODB-OIDC",
OIDCMachineCallback: gkeCallback,
},
)
client, err := mongo.Connect(context.TODO(), opts)
if err != nil {
panic(err)
}

このガイドの概念の詳細については、次のドキュメントを参照してください。

戻る

認証メカニズム