Overview
重要
MONGODB-OIDC 認証メカニズムでは、Linux プラットフォーム上で MongoDB Server v 7.0以降を実行する必要があります。
Go ドライバーは、ワークロード IDの OpenID Connect( OIDC )認証をサポートしています。 ワークロード ID は、他のサービスとリソースを認証してアクセスするために、アプリケーション、サービス、スクリプト、またはコンテナなどのソフトウェア ワークロードに割り当てる ID です。
次のセクションでは、MONGODB-OIDC 認証メカニズムを使用してさまざまなプラットフォームに認証する方法について説明します。
MONGODB-OIDC認証メカニズムの詳細については、 MongoDB Serverマニュアルの「OpenID Connect 認証とMongoDB Serverパラメーター」を参照してください。
Azure IMDS
アプリケーションがAzure VM 上で実行される場合、またはAzure Instance Metadata Service(MDS)を使用する場合は、 Goドライバーに組み込まれているAzureサポートを使用してMongoDBを認証できます。
次の方法で Azure IMDS 用の OIDC を構成できます。
Credential
構造体を作成し、クライアントを作成するときにSetAuth()
メソッドに渡します接続文字列でのパラメーターの設定
注意
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(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(options.Client().ApplyURI(uri)) if err != nil { panic(err) }
Tip
アプリケーションが Azure VM で実行されており、VM に関連付けられている管理対象 ID が 1 つだけの場合は、 username
接続オプションを省略できます。
GCP IMDS
アプリケーションがGoogle Compute Engine VM で実行される場合、またはGCPインスタンス メタデータ サービス を使用する場合は、 Goドライバーに組み込まれているGCPサポートを使用してMongoDBを認証できます。
GCP IMDS 用の OIDC は次の方法で構成できます。
Credential
構造体を作成し、クライアントを作成するときにSetAuth()
メソッドに渡す接続文字列でのパラメーターの設定
注意
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(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(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(opts) if err != nil { panic(err) }
その他の Azure 環境
アプリケーションが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 GKE
アプリケーションが、構成された サービス アカウント を持つ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(opts) if err != nil { panic(err) }
Kubernetes
アプリケーションが構成されたサービス アカウントを使用してKubernetesクラスターで実行される場合は、 Goドライバーに組み込まれているKubernetesサポートを使用してMongoDBに認証できます。サービス アカウントの構成方法の詳細については、 Kubernetesドキュメントの「 サービス アカウントの管理 」ガイドを参照してください。
Kubernetes用の OIDC は次の方法で構成できます。
Credential
構造体を作成し、クライアントを作成するときにSetAuth()
メソッドに渡す接続文字列でのパラメーターの設定
注意
AuthMechanismProperties
構造体フィールド値にカンマが含まれている場合は、認証オプションを設定するためにCredential
インスタンスを作成する必要があります。
まず、次の例に示すように、認証メカニズムのプロパティを保存するためのマップを作成します。
props := map[string]string{ "ENVIRONMENT": "k8s", }
次に、次のCredential
構造体フィールドを設定します。
AuthMechanism
:"MONGODB-OIDC"
に設定します。AuthMechanismProperties
: 以前に作成したprops
マップに設定します。
次のコード例は、 Client
の作成時にこれらのオプションを設定する方法を示しています。
uri := "mongodb://<hostname>:<port>" props := map[string]string{ "ENVIRONMENT": "k8s", } opts := options.Client().ApplyURI(uri) opts.SetAuth( options.Credential{ AuthMechanism: "MONGODB-OIDC", AuthMechanismProperties: props, }, ) client, err := mongo.Connect(opts) if err != nil { panic(err) }
接続stringに次の接続オプションを含めます。
authMechanism
:MONGODB-OIDC
に設定します。authMechanismProperties
:ENVIRONMENT:k8s
に設定します。
次のコード例は、 接続stringでこれらのオプションを設定する方法を示しています。
uri := "mongodb://<hostname>:<port>/?" + "&authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:k8s" client, err := mongo.Connect(options.Client().ApplyURI(uri)) if err != nil { panic(err) }
詳細情報
このガイドの概念の詳細については、次のドキュメントを参照してください。
API ドキュメント
SetAuth() メソッド
OIDCコールバック 関数