認証
項目一覧
MongoDB はさまざまな認証メカニズムをサポートしています。
これらの認証メカニズムごとに MongoDB サーバーを構成する方法の詳細については、MongoDB のオンライン ドキュメントを参照してください。
ユーザーとユーザー管理用の Ruby ドライバーのヘルパーの詳細については、 ユーザー管理チュートリアルを参照してください。
認証情報の提供
認証 が有効になっている場合は、新しいクライアントを作成するときに認証情報を提供します。
client = Mongo::Client.new([ '127.0.0.1:27017' ], user: 'test', password: '123', database: 'mydb' ) # If using a URI: client = Mongo::Client.new("mongodb://test:123@127.0.0.1:27017/mydb")
クライアント インスタンスで認証認証情報を変更し、 Client#with
メソッドを使用して新しいクライアントを取得できます。
authenticated_client = client.with( user: 'another-user', password: '123' )
クライアントのデータベースと認証情報を 1 つの手順で変更することもできます。
authenticated_music_client = client.with( database: 'music', user:'test', password:'123' )
authSource
ユーザーの認証ソースは、そのユーザーの認証情報が保存されているデータベースです。
認証情報が指定されるたびに、ユーザーの認証ソースを指定できます。
client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb', user: 'test', password: '123', auth_source: 'admin' ) # If using a URI: client = Mongo::Client.new("mongodb://test:123@127.0.0.1:27017/mydb?authSource=admin")
認証ソースが指定されていない場合、クライアントはデフォルトの を想定します。 デフォルトの認証ソースは、接続に使用されている認証メカニズムによって異なります。
MONGODB-CR
、 SCRAM-SHA-1
、 SCRAM-SHA-256
認証メカニズムの場合、デフォルトの認証ソースはクライアントが接続しているデータベースです。データベースが指定されていない場合は、 admin
データベースがデフォルトのデータベースであり、デフォルトの認証ソースでもあります。 PLAIN
メカニズム(LDAP)の場合、デフォルトの認証ソースはクライアントが接続しているデータベースです。データベースが指定されていない場合は、 $external
データベースが認証ソースとして使用されます。 AWS
、 GSSAPI
、およびMONGODB_X509
メカニズムの場合、認証ソースは常に$external
です。
SRV URI を使用してクライアントが構築されている場合、ドライバーは SRV レコードに対応する TXT DNS レコードで URI オプションを検索します。 したがって、たとえば、MongoDB Atlas は通常、認証ソースとしてadmin
データベースを使用しますが、TXT レコードではデータベースが URI オプションとして指定されているため、これは SRV URI では指定されていません。
SRV URI を使用する場合、SRV クエリと TXT クエリが別々に実行されることに注意してください。 DNS 解決が 100% 信頼できないシステムでは、TXT レコードを検索できないと、ドライバーが誤った認証ソースを使用する可能性があるため、認証エラーが発生する可能性があります。 信頼できる DNS 解決が保証されない場合は、認証ソースを URI オプションとして SRV URI で明示的に指定できます。
Mongo::Client.new("mongodb+srv://username:myRealPassword@cluster0.mongodb.net/test?w=majority&authSource=admin")
注意
with
メソッドを使用してデータベースを変更する場合、認証ソースは、それに適用されるオプションの完全なセットを使用して、新しいClient
インスタンスで決定されます。 たとえば、元のクライアントに認証ソースが指定されている場合、この認証ソースはwith
呼び出しで指定されたデータベースよりも優先されます。 元のクライアントに認証ソースが指定されていない場合、使用される認証メカニズムのルールに従って、新しいデータベースが新しい認証ソースになります。
認証メカニズム
MongoDB は、このセクションで詳細に説明するように、複数の認証メカニズムをサポートしています。 使用する認証メカニズムは、クライアントの作成時に明示的に指定できます。アプリケーションによって認証メカニズムが提供されない場合は、次のように選択されます。
MongoDB 4.0 以降の場合、クライアントはサーバーと SCRAM メカニズムのネゴシエートを実行します。 クライアント構成で指定されたユーザーが SCRAM-SHA-256 による認証を許可している場合は、認証に SCRAM-SHA-256 が使用されます。 それ以外の場合は、SCRAM-SHA-1 が使用されます。
MongoDB 3.0 から 3.6 では、SCRAM-SHA-1 が使用されます。
MongoDB 2.6 の場合は、 MONGODB-CR が使用されます。
注意すること:
X.509、 Amazon Web Services 、 LDAP 、およびKerberos認証メカニズムは、常に明示的にリクエストする必要があります。
クライアントが接続している MongoDB サーバーが SCRAM をサポートしている場合、認証メカニズムが明示的に指定されていない限り、クライアントは SCRAM を使用して認証を試みます。 MONGODB-CR を使用して MongoDB 3.0 以降のサーバーで認証するには、MONGODB-CR メカニズムを明示的に要求する必要があります。
SCRAM
SCRAM 認証は MongoDB のデフォルトの認証メカニズムです。 MongoDB には、 SCRAM-SHA- 1 (MongoDB 3.0として使用可能)と SCRAM-SHA- 256 (MongoDB 4.0として使用可能)の 2 つの SCRAM メカニズムがあります。 認証メカニズムが指定されておらず、ユーザー認証情報が指定されている場合、ドライバーはサーバー 3.0 以降でSCRAM認証を使用しようとし、サーバーのバージョンと特定のサーバーに定義されたメカニズムに基づいて、使用するメカニズムをネゴシエートします。ユーザー(サーバー内のユーザーを設定して、 SCRAM -SHA-1 メカニズムのみ、 SCRAM -SHA-256 メカニズムのみ、またはその両方を許可することができます)。
認証メカニズムとして SCRAM-SHA-1 を明示的に指定するには、次のように、 auth_mech: :scram
Ruby クライアント オプションまたはauthMechanism
URI オプションの値としてSCRAM-SHA-1
を使用します。
client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb', user: 'test', password: '123', auth_mech: :scram ) client = Mongo::Client.new("mongodb://test:123@127.0.0.1:27017/mydb?authMechanism=SCRAM-SHA-1")
認証メカニズムとして SCRAM-SHA-256 を明示的に指定するには、次のように、 auth_mech: :scram256
Ruby クライアント オプションを使用するか、 authMechanism
URI オプションの値としてSCRAM-SHA-256
を使用します。
client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb', user: 'test', password: '123', auth_mech: :scram256 ) client = Mongo::Client.new("mongodb://test:123@127.0.0.1:27017/mydb?authMechanism=SCRAM-SHA-256")
クライアント証明書 (X.509)
ドライバーは TLS ネゴシエート中に X.509 証明書を提示します。 MONGODB-X509 認証メカニズムは、この証明書の識別サブジェクト名から検索されたユーザー名を認証します。
注意
ユーザー名は証明書から検索されるため、ユーザー名を指定する必要はありません。 ユーザー名が指定されている場合は、サーバーにユーザー名が送信されます。 パスワードが指定された場合、エラーが発生します。
この認証方法では、証明書検証機能を備えた TLS 接続を使用する必要があります。
クライアントを認証するには、有効な TLS 証明書と秘密の暗号化キーが必要です。 これらは個別のファイルに保存することも、1 つのファイルにまとめて保存することもできます( PEM 形式)。 証明書と秘密キーが同じファイルに保存されている場合でも、クライアントに オプションとssl_cert
ssl_key
オプションの両方を渡して、そのファイルへのパスを指定する必要があります。
MongoDB で X. 509認証を構成する方法の詳細については、MongoDB マニュアルの X. 509チュートリアルを参照してください。
client = Mongo::Client.new([ '127.0.0.1:27017' ], auth_mech: :mongodb_x509, ssl: true, ssl_cert: '/path/to/client.pem', ssl_key: '/path/to/client.pem', ssl_ca_cert: '/path/to/ca.pem' )
Amazon Web Services
MongoDB Enterprise Edition およびサーバー バージョン 4.4 以降が必要です。
Amazon Web Services認証メカニズムは、Amazon Web Services Identity and Access Management(IAM) を使用します およびAmazon Web Services Security Token Service(STS) クライアントの ID をMongoDB サーバーに証明するため。簡単に説明すると、 Amazon Web Servicesの認証は次のように機能します。
クライアントはAmazon Web Services IAM 認証情報を使用して、 MongoDBサーバーに送信される署名を作成します。
サーバーはクライアントの署名を使用して、 Amazon Web Services STS にリクエストを送信します。
STS リクエストが成功すると、クライアントが使用した認証情報に対応するユーザー名(具体的には、 IAM ユーザーまたはロールの ARN)が返されます。 IAM ユーザー ARN はサーバーによって定義されたユーザーを検索するために使用され、クライアントはこのユーザーとして認証されたと見なされます。
注意
他の認証メカニズムとは異なり、アプリケーションがクライアントの作成時に提供するユーザー名と、サーバーユーザーのユーザー名は異なります。クライアントのユーザー名はAmazon Web ServicesのアクセスキーIDですが、サーバー上のユーザー名はアクセス キーIDに対応する IAM ユーザーまたはロール。
Amazon Web Servicesの認証情報は、次の要素で構成されています。
アクセスキー ID。
シークレット アクセス キー。
任意のセッション トークン。
Amazon Web ServicesIAM 認証情報による認証 は、アクセス キーID と シークレット アクセス キーを使用します。一時的な Amazon Web ServicesIAM 認証情報による認証 は、3 つのすべてのコンポーネントを使用します。
注意
ドライバーはネットワーク経由でシークレット アクセス キーまたはセッション トークンを送信しません。
一時的な認証情報は次のアイテムで使用されます。
サービス アカウントの IAM ロール 。
Ruby ドライバーでは、Ruby オプションまたは URI オプションとして通常の認証情報と一時的な認証情報の両方を明示的に提供できます。 認証情報が明示的に指定されていない場合、ドライバーは以下で説明する環境変数、および EC2 インスタンスと ECS タスクのメタデータ エンドポイントから認証情報を取得しようとします。
認証情報の明示的な提供
次のように、Ruby オプションとして通常の(一時的ではない) IAM 認証情報を提供できます。
client = Mongo::Client.new(['mongodb.example.com'], auth_mech: :aws, user: '<AWS-ACCESS-KEY-ID>', password: '<AWS-SECRET-ACCESS-KEY>', database: 'mydb', )
URI を介して提供することもできます。
client = Mongo::Client.new( 'mongodb://<AWS-ACCESS-KEY-ID>:<AWS-SECRET-ACCESS-KEY>@mongodb.example.com/mydb?authMechanism=MONGODB-AWS')
注意
認証情報が URI 経由で提供される場合、パーセントエスケープする必要があります。
一時的な認証情報を提供するには、次のように認証メカニズムのプロパティでセッション トークンを指定します。
client = Mongo::Client.new(['mongodb.example.com'], auth_mech: :aws, user: '<AWS-ACCESS-KEY-ID>', password: '<AWS-SECRET-ACCESS-KEY>', auth_mech_properties: { aws_session_token: '<AWS-SESSION-TOKEN>', }, database: 'mydb', )
URI を介して一時的な認証情報を提供することもできます。
client = Mongo::Client.new( 'mongodb://<AWS-ACCESS-KEY-ID>:<AWS-SECRET-ACCESS-KEY>@mongodb.example.com/mydb?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<AWS-SESSION-TOKEN>')
認証情報の自動取得
クライアントは、環境または EC2 または ECS メタデータ エンドポイントから認証情報を検索できます。 認証情報を自動的に検索するには、 Amazon Web Services認証メカニズムを指定しますが、ユーザー名とパスワードは指定しないでください。
client = Mongo::Client.new(['mongodb.example.com'], auth_mech: :aws, database: 'mydb', ) # Using a URI: client = Mongo::Client.new( 'mongodb://mongodb.example.com/mydb?authMechanism=MONGODB-AWS')
ドライバーは、指定された順序で次のソースから認証情報を取得しようとします。
AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
、AWS_SESSION_TOKEN
環境変数。 これらの環境変数は、公式のAmazon Web Services Amazon Web ServicesRubySDK や などのさまざまな 関連のライブラリとツールによって認識されます。Amazon Web ServicesCLIこれらは、 Amazon Web Services Lambda環境で実行するときにも定義されます。STS のAmazon Web Services AssumeRoleWithWebIdentity アクション 。これにより、サービス アカウント トークンに関連付けられた認証情報が返されます。 このメカニズムでは、次の環境変数を設定する必要があります。
AWS_WEB_IDENTITY_TOKEN_FILE
- サービス アカウント トークンを含むファイルへのパス。AWS_ROLE_ARN
- 呼び出し元が想定しているロールの Amazon リソース名(ARN)。AWS_ROLE_SESSION_NAME
(任意) - 想定されたロール セッションの識別子。 省略すると、ドライバーによってランダムな名前が生成されます。
Amazon Web ServicesECS タスク メタデータ エンドポイント 。これにより、コンテナに割り当てられた ECS タスク ロールに関連付けられた認証情報が返されます。
Amazon Web ServicesEC2 インスタンスのメタデータエンドポイント 。これにより、インスタンスに割り当てられた EC 2インスタンス ロールに関連付けられている認証情報が返されます。
注意
認証情報を提供する認証情報ソースは、認証情報の完全なセットを提供する必要があります。 たとえば、 AWS_ACCESS_KEY_ID
またはAWS_SECRET_ACCESS_KEY
環境変数のいずれか 1 つの環境変数のみが入力され、他の環境変数は入力されていない場合、ドライバーはエラーを発生させます。
注意
アプリケーションが EC インスタンスの ECS2 コンテナ内で実行され、 コンテナがインスタンス メタデータへのアクセスを許可されている場合 の場合、ドライバーは EC インスタンスのメタデータエンドポイントから 認証メカニズムの認証メカニズムの認証情報を取得しようとします。そのため、ECSAmazon Web Services タスクを取得できなかった場合は、EC2 インスタンスに割り当てられた IAM2 ロールとして認証される可能性があります。 ECS タスク エンドポイントからのロール認証情報。
LDAP (SASL PLAIN)
MongoDB Enterprise Edition が必要です。
MongoDB Enterprise Edition は LDAP 認証メカニズムをサポートしており、Lightweight Directory Access Protocol LDAP を使用して認証を委任できます サーバーのリンクと説明を追加しました。
警告
LDAP を使用する場合、パスワードはプレーン テキストでサーバーに送信されます。 このため、認証メカニズムとして LDAP を使用する場合は、TLS を有効にすることを強くお勧めします。
MongoDB で LDAP 認証を構成する方法の詳細については、MongoDB マニュアルの SASL/LDAP チュートリアルを参照してください。
client = Mongo::Client.new([ '127.0.0.1:27017' ], auth_mech: :plain, ssl: true, ssl_verify: true, ssl_cert: '/path/to/client.pem', ssl_ca_cert: '/path/to/ca.pem' )
Kerberos (GSSAPI)
MongoDB Enterprise Edition が必要です。
Kerberos を使用するように MongoDB サーバーを構成するには、サーバー Kerberos のドキュメントを参照してください。
Ruby MongoDB ドライバーで Kerberos 認証メカニズムを使用するには、Kerberos 認証を実装する追加のライブラリが必要です - mongo_kerberos - をインストールしてロードする必要があります。そのためには をGemfile
に追加します。
gem 'mongo', '~> 2' gem 'mongo_kerberos', '~> 2'
... をアプリケーション コードに追加します。
require 'mongo' require 'mongo_kerberos'
MRIで Kerberos 認証を使用する場合、パスワードはドライバー構成で指定されず、ドライバーによって MongoDB サーバーに送信されません。 代わりに、ドライバーの外部で Kerberos セッションを確立する必要があります。このセッションは、ドライバーがサーバーにユーザーの身元を証明するために使用されます。 このセッションを確立するには、ホスト システムが Kerberos 認証用に構成されている必要があります。 Kerberos のドキュメント を参照してください 詳細については、またはオペレーティング システムのドキュメントを参照してください。kill ユーティリティ を使用する Kerberos セッションを確立します。
JRubyで Kerberos 認証を使用する場合、MRI に対して上記で説明したプロセスを使用して、Kerberos セッションはドライバーの外部で確立されることがあります。あるいは、クライアント構成を使用してドライバーに直接パスワードを提供することも、 java.security.auth.login.config
システム プロパティに保存されている構成を介してキータブ ファイルへのパスを提供することもできます。 さらに、Java ランタイム環境は Kerberos 用に構成されている必要があります。 MongoDB Java ドライバー Kerberos のドキュメント を参照してください 詳しくは、 を参照してください。
注意
サーバー Kerberos のドキュメントに従って、Kerberos 認証を使用するときに MongoDB を実行しているホストの FQDN を指定する必要があります。
注意
MongoDB URI を使用する場合は、ユーザー名に出現する場合、 /
や@
などの特殊文字をパーセントエスケープするようにしてください。
# Authenticate as appuser@MYREALM: client = Mongo::Client.new("mongodb://appuser%40MYREALM@myserver.mycompany.com:27017/mydb?authMechanism=GSSAPI") # Authenticate as myapp/appuser@MYREALM: client = Mongo::Client.new("mongodb://myapp%2Fappuser%40MYREALM@myserver.mycompany.com:27017/mydb?authMechanism=GSSAPI") # Authenticate using Ruby options: client = Mongo::Client.new(['myserver.mycompany.com:27017'], auth_mech: :gssapi, user: 'myapp/appuser@MYREALM')
MONGODB-CR
非推奨: MONGODB-CR メカニズムは、 MongoDB 3.6以降非推奨となり、 MongoDB 4.0として削除されました。 代わりにSCRAM 認証を使用してください。
MONGODB-CR は、MongoDB バージョン 2.6 までのデフォルトの認証メカニズムでした。
このメカニズムは、認証情報を使用して明示的に設定できます。
client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'mydb', user: 'test', password: '123', auth_mech: :mongodb_cr )
注意
クライアントが接続している MongoDB サーバーが SCRAM をサポートしている場合、認証メカニズムが明示的に指定されていない限り、クライアントは SCRAM を使用して認証を試みます。 MONGODB-CR を使用して MongoDB 3.0 以降のサーバーで認証するには、MONGODB-CR メカニズムを明示的に要求する必要があります。