Docs Menu
Docs Home
/ / /
Go Driver
/

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

このガイドでは、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

あるいは、接続文字列URI を使用して認証することもできます。これには、 URLエンコードされた Kerberos プリンシパル、パスワード、hostname というMongoDBサーバーのネットワーク アドレスを指定します。

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"

注意

メソッドは、RFC-4616 で定義されている PLAIN 簡易認証およびセキュリティ層(SASL)を使用して認証するため、LDAP ではなく 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 Instance Metadata Service(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にこれを設定します。

  • 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にこれを設定します。

  • 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)で実行される場合は、 azidentity モジュールを使用して認証情報を取得できます。

まず、次のコマンドを実行して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)
}

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

戻る

認証

項目一覧