認証
項目一覧
このガイドでは、MongoDB C ドライバーでの認証オプションの使用について説明します。 接続を行う前に、MongoDB サーバーも認証用に適切に構成されていることを確認してください。 詳細については、 MongoDB セキュリティ ドキュメントを参照してください。
MongoDB C ドライバーは、MongoDB 接続 URI の使用を通じていくつかの認証メカニズムをサポートします。
デフォルトでは、接続string (およびオプションの認証データベース)の一部としてユーザー名とパスワードが指定されている場合、サーバーのデフォルトの認証メカニズムを介して接続するために使用されます。
デフォルト以外の特定の認証メカニズムを選択するには、サポートされているメカニズムのリストを参照してください。
mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authSource=mydb");
authMechanism 接続stringオプションで現在サポートされている値は次のとおりです。
基本認証(SCRAM-SHA- 256 )
MongoDB 4.0 introduces support for authenticating using the SCRAM protocol with the more secure SHA-256 hash described in RFC 7677. この認証メカニズムを使用すると、認証時にパスワードがネットワーク経由で実際に送信されることはなく、クライアントのパスワードがサーバーが認識するパスワードと同じであることを計算された証明が与えられます。 MongoDB 4では 。 0に設定されている場合、C ドライバーは保存された SCRAM-SHA- 1および SCRAM-SHA- 256認証情報を持つユーザー向けの正しいデフォルトの認証メカニズムを決定できます。
mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authSource=mydb"); /* the correct authMechanism is negotiated between the driver and server. */
あるいは、SCRAM-SHA- 256を authMechanism として明示的に指定することもできます。
mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-256&authSource=mydb");
基本認証(SCRAM-SHA- 1 )
MongoDB4.0 より前のデフォルトの認証メカニズムはSCRAM-SHA-1
です( RFC5802 )。この認証メカニズムを使用すると、認証時にパスワードがネットワーク経由で実際に送信されることはなく、クライアントのパスワードがサーバーが認識するパスワードと同じであることを計算された証明が与えられます。
mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-1&authSource=mydb");
注意
SCRAM-SHA-1
はデフォルトでadmin
データベースに対して認証します。 ユーザーが別のデータベースで作成されている場合は、 authSource を指定する必要があります。
レガシー認証(MONGODB-CR)
MONGODB-CR authMechanism は非推奨となり、MongoDB 4.0では機能しなくなりました。 代わりに、authMechanism を指定しないで、ドライバーはサーバーと互換性のある認証メカニズムを使用します。
GSSAPI (Kerberos)認証
注意
UNIX のような環境では、Kerberos をサポートするためにはドライバーをcyrus-sasl
に対してコンパイルする必要があります。
Windows では、Kerberos をサポートするためには、Windows Native SAPI またはcyrus-sasl
に対してドライバーをコンパイルする必要があります。 ドライバーのデフォルト構成では Windows Native SPI が使用されます。
デフォルト構成を変更するには、cmake オプションENABLE_SASL
を使用します。
GSSAPI
(Kerberos)認証は MongoDB のエンタープライズ エディションで利用できます。 GSSAPI
を使用して認証するには、MongoDB C ドライバーを SASL サポート付きでインストールする必要があります。
UNIX のような環境では、次の認証方法を使用する前にkinit
コマンドを実行します。
$ kinit mongodbuser@EXAMPLE.COM mongodbuser@EXAMPLE.COM's Password: $ klistCredentials cache: FILE:/tmp/krb5cc_1000 Principal: mongodbuser@EXAMPLE.COM Issued Expires Principal Feb 9 13:48:51 2013 Feb 9 23:48:51 2013 krbtgt/EXAMPLE.COM@EXAMPLE.COM
MongoDB URI を使用して認証するようになりました。 GSSAPI
は$external
仮想データベースに対して認証するため、URI でデータベースを指定する必要はありません。 Kerberos プリンシパルは URL エンコードする必要があることに注意してください。
mongoc_client_t *client; client = mongoc_client_new ("mongodb://mongodbuser%40EXAMPLE.COM@mongo-server.example.com/?authMechanism=GSSAPI");
注意
GSSAPI
は$external
データベースに対して認証するため、authSource データベースを指定する必要はありません。
ドライバーは次の GSSAPI プロパティをサポートしています。
CANONICALIZE_HOST_NAME
:Kerberos データベースで使用されているものとは異なるホスト名がホストにより報告された場合に、Cyrus-SASL ではこの操作が必要になることがあります。 デフォルトは「false」です。SERVICE_NAME
: デフォルトの「 MongoDB 」とは異なるサービス名を使用します。
URL でプロパティを設定します。
mongoc_client_t *client; client = mongoc_client_new ("mongodb://mongodbuser%40EXAMPLE.COM@mongo-server.example.com/?authMechanism=GSSAPI&" "authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:true");
Invalid net address
などのエラーが発生した場合は、アプリケーションが NAT(ネットワーク アドレス変換)ファイアウォールの背後にあるかどうかを確認してください。 その場合は、 forwardable
とaddressless
Kerberos チケットを使用するチケットを作成します。 これは、 -f -A
をkinit
に渡すことで可能です。
$ kinit -f -A mongodbuser@EXAMPLE.COM
SASL プレーン認証
注意
SASL PLAIN
認証を使用するには、MongoDB C ドライバーを SASL サポートでコンパイルする必要があります。
MongoDB Enterprise Edition は、最初は LDAP サーバーに認証を委任することを目的としたSASL PLAIN
認証メカニズムをサポートしています。 SASL PLAIN
メカニズムの使用は、ユーザー名とパスワードを使用するチャレンジ レスポンス メカニズムと非常によく似ています。 この認証メカニズムでは、 LDAP
サポートのために$external
仮想データベースを使用します。
注意
SASL PLAIN
は、クリアテキスト認証メカニズムです。 PLAIN
メカニズムを使用する場合は、証明書検証とともに TLS を使用して MongoDB に接続することを 強くおすすめします 。
mongoc_client_t *client; client = mongoc_client_new ("mongodb://user:password@example.com/?authMechanism=PLAIN");
PLAIN
は$external
データベースに対して認証するため、authSource データベースを指定する必要はありません。
X. 509証明書認証
注意
MongoDB C ドライバーは、X. 509認証サポートを使用して TLS サポートを使用してコンパイルする必要があります。 これが完了したら、次のオプションでサーバーを起動します。
$ mongod --tlsMode requireTLS --tlsCertificateKeyFile server.pem --tlsCAFile ca.pem
MONGODB-X509
メカニズムは、TLS ネゴシエート中にドライバーによって提示された X. 509証明書から派生したユーザー名を認証します。 この認証方法では、証明書検証機能を備えた TLS 接続を使用する必要があります。
mongoc_client_t *client; mongoc_ssl_opt_t ssl_opts = { 0 }; ssl_opts.pem_file = "mycert.pem"; ssl_opts.pem_pwd = "mycertpassword"; ssl_opts.ca_file = "myca.pem"; ssl_opts.ca_dir = "trust_dir"; ssl_opts.weak_cert_validation = false; client = mongoc_client_new ("mongodb://x509_derived_username@localhost/?authMechanism=MONGODB-X509"); mongoc_client_set_ssl_opts (client, &ssl_opts);
MONGODB-X509
は$external
データベースに対して認証するため、authSource データベースを指定する必要はありません。 x 509 _derived_username の詳細については、 MongoDB サーバーx を参照してください。 509チュートリアル。
注意
MongoDB C ドライバーは、ユーザー名が指定されていない場合、および MongoDB 3.4ではユーザー名はまったく必要ない場合に、x 509の派生ユーザー名を決定しようとします。
Amazon Web Services IAM による認証
MONGODB-AWS
MongoDBメカニズムは、Amazon Web Services Identity and Access Management(IAM)によって提供される認証情報を使用して サーバーを認証します。
認証するには、 $external
データベースに関連付けられた Amazon リソース名(ARN)を持つユーザーを作成し、URI でMONGODB-AWS
authMechanism
を指定します。
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost/?authMechanism=MONGODB-AWS");
MONGODB-AWS
は常に$external
データベースに対して認証するため、authSource データベースを指定する必要はありません。
認証情報には、 access key id
、 secret access key
、および任意のsession token
が含まれます。 これらは、次の方法で取得できます。
URI 経由Amazon Web Services認証情報
認証情報は、ユーザー名/パスワードとして URI で直接渡すことができます。
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://<access key id>:<secret access key>localhost/?authMechanism=MONGODB-AWS");
これには、 authMechanismProperties
とともに渡されたsession token
が含まれる場合があります。
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://<access key id>:<secret access key>localhost/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<token>");
環境経由Amazon Web Services認証情報
認証情報が URI を介して渡されない場合、libmongoc は次の環境変数をチェックします。
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN (optional)
ECS 経由Amazon Web Services認証情報
認証情報が URI または環境変数では渡されない場合、libmongoc は環境変数AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
が設定されているかどうかを確認し、設定されている場合はリンク ローカル アドレスをクエリして ECS タスク メタデータから一時的な認証情報を取得しようとします。
EC2 経由Amazon Web Services認証情報
認証情報が URI または環境変数で渡されず、環境変数AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
が設定されていない場合、libmongoc はリンク ローカル アドレスをクエリして、EC 2マシンのメタデータから一時的な認証情報を検索しようとします。