認証メカニズム
Overview
このガイドでは、MongoDB コミュニティ エディション で利用可能な各認証メカニズムの使用方法を説明します。MongoDB は認証メカニズムを使用して ID を確認し、信頼を確立して、接続前にドライバーとサーバーのセキュリティを確保します。
GSSAPI/Kerberos
またはLDAP
を使用して認証するには、 エンタープライズ認証メカニズムの基礎ページを参照してください。 MongoDB クラスターへの接続を確立する方法の詳細については、「接続ガイド 」を参照してください。
サポートされているメカニズム
Go Driver は次の認証メカニズムをサポートしています。
Go Driver は、クライアント タイプを介して認証メカニズムとの接続を確立します。Client
タイプは、接続オプションとして使用するメカニズムと認証情報を 認証情報 タイプ で指定します。これらのオプションを構成するには、Credential
タイプを ClientOptions タイプの SetAuth() に渡します。
次のセクションでは、MongoDB コミュニティ エディション がサポートする 5 つのメカニズムを使用して、このプロセスを示します。
規則の例
各認証メカニズムには、次のプレースホルダーが含まれています。
db_username
- MongoDB database のユーザー名db_password
- MongoDB database ユーザーのパスワードhostname
- クライアントからアクセス可能な MongoDB Server のネットワーク アドレスport
- MongoDB Server のポート番号authenticationDb
- ユーザーの認証データを含む MongoDB database。このオプションを省略すると、ドライバーはデフォルト値のadmin
を使用します。
default
デフォルトでは、サーバーがサポートする MongoDB のバージョンに応じて、次のいずれかの認証メカニズムが使用されます。
メカニズム | バージョン |
---|---|
SCRAM-SHA-256 | MongoDB 4.0 以降 |
SCRAM-SHA-1 | MongoDB 3.0、3.2、3.4、3.6 |
MONGODB-CR | MongoDB 2.6 以前 |
デフォルトの認証メカニズムを指定するには、AuthMechanism
オプションを省略します。
credential := options.Credential{ AuthSource: "<authenticationDb>", Username: "<db_username>", Password: "<db_password>", } clientOpts := options.Client().ApplyURI("mongodb://<hostname>:<port>"). SetAuth(credential) client, err := mongo.Connect(context.TODO(), clientOpts)
MongoDB がサポートするチャレンジ レスポンス(CR)および Salted Challenge Response 認証メカニズム(SCRAM)の詳細については、サーバー マニュアルの「SCRAM」セクションを参照してください。
SCRAM-SHA-256
重要
SCRAM-SHA-256
は、MongoDB 4.0 以降の MongoDB のデフォルトの認証方法です。
SCRAM-SHA-256
は、 SHA-256
アルゴリズムで暗号化されたデータベースのユーザー名とパスワードを使用してユーザーを認証する、Salted Challenge Response 認証メカニズム(SCRAM)です。
SCRAM-SHA-256
認証メカニズムを指定するには、AuthMechanism
オプションに "SCRAM-SHA-256"
という値を割り当てます。
credential := options.Credential{ AuthMechanism: "SCRAM-SHA-256", AuthSource: "<authenticationDb>", Username: "<db_username>", Password: "<db_password>", } clientOpts := options.Client().ApplyURI("mongodb://<hostname>:<port>"). SetAuth(credential) client, err := mongo.Connect(context.TODO(), clientOpts)
SCRAM-SHA-1
重要
SCRAM-SHA-1
は、MongoDB バージョン 3.0、3.2、3.4、および 3.6 のデフォルトの認証方法です。
SCRAM-SHA-1
は、SHA-1
アルゴリズムを使用して暗号化されたユーザー名とパスワードを使用してユーザーを認証する、Salted Challenge Response Authentication Mechanism(SCRAM)です。
SCRAM-SHA-1
認証メカニズムを指定するには、AuthMechanism
オプションに "SCRAM-SHA-1"
という値を割り当てます。
credential := options.Credential{ AuthMechanism: "SCRAM-SHA-1", AuthSource: "<authenticationDb>", Username: "<db_username>", Password: "<db_password>", } clientOpts := options.Client().ApplyURI("mongodb://<hostname>:<port>"). SetAuth(credential) client, err := mongo.Connect(context.TODO(), clientOpts)
MONGODB-CR
MONGODB-CR
ユーザー名とパスワードを使用してユーザーを認証するチャレンジレスポンスタイプの認証メカニズムです。
重要
この認証メカニズムは MongoDB 3.6 以降、非推奨となり、MongoDB 4.0 ではサポートされなくなりました。
MONGODB-AWS
重要
MONGODB-AWS 認証メカニズムは、MongoDB バージョン 4.4 以降でのみ使用できます。
MONGODB-AWS
認証メカニズムは、Amazon Web Services Identity and Access Management(AWS IAM)認証情報を使用してユーザーを認証します。
MONGODB-AWS
認証が有効な状態の MongoDB インスタンスに接続するには、MONGODB-AWS
認証メカニズムを指定します。
ドライバーは、次のソースの認証情報を登録されている順序でチェックします。
接続文字列
環境変数
Web ID トークン ファイル
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
環境変数で指定された AWS ECS のエンドポイントAmazon Web Services EC2 エンドポイント。 詳しくは、「 タスクの IAM ロール 」を 参照してください。 。
重要
ドライバーは、認証情報が見つかった最初のソースからのみ認証情報を取得します。たとえば、接続文字列で AWS 認証情報を指定した場合、ドライバーは環境変数で指定した認証情報をすべて無視します。
Tip
次の例では、SetAuth()
メソッドを使用して適切な資格情報を設定します。ApplyURI()
メソッドを使用してこれらの資格情報を指定することもできます。ApplyURI()
メソッドを使用する場合は、ユーザー名とパスワードが正しく解析されるように URL エンコードする必要があります。
AWS IAM 認証情報を使用して MongoDB インスタンスに接続するには、次の手順を実行します。
AuthMechanism
オプションにMONGODB-AWS
という値を割り当てますUsername
オプションにaccessKeyID
の値を割り当てますPassword
オプションにsecretAccessKey
の値を割り当てます
var accessKeyID, secretAccessKey string awsCredential := options.Credential{ AuthMechanism: "MONGODB-AWS", AuthSource: "<authenticationDb>", Username: "<accessKeyID>", Password: "<secretAccessKey>", } awsIAMClient, err := mongo.Connect( context.TODO(), options.Client().SetAuth(awsCredential)) if err != nil { panic(err) } _ = awsIAMClient
AWS セッショントークンを指定する必要がある場合は、assume ロール リクエストから返された一時的な認証情報を使用します。
一時的な認証情報を使用するには、次のように sessionToken
の値を AuthMechanismProperties
オプションに割り当てます。
var accessKeyID, secretAccessKey, sessionToken string assumeRoleCredential := options.Credential{ AuthMechanism: "MONGODB-AWS", AuthSource: "<authenticationDb>", Username: "<accessKeyID>", Password: "<secretAccessKey>", AuthMechanismProperties: map[string]string{ "AWS_SESSION_TOKEN": "<sessionToken>", }, } assumeRoleClient, err := mongo.Connect(context.TODO(), options.Client().SetAuth(assumeRoleCredential))
環境変数に保存されている AWS 認証情報を使用して MongoDB インスタンスに対して認証するには、shell を使用して次のように変数を設定します。
export AWS_ACCESS_KEY_ID=<awsKeyId> export AWS_SECRET_ACCESS_KEY=<awsSecretKey> export AWS_SESSION_TOKEN=<awsSessionToken>
注意
認証するロールに AWS セッショントークンが必要ない場合は、AWS_SESSION_TOKEN
を含む行を省略します。
上記の環境変数を設定したら、以下に例示するとおり MONGODB-AWS
認証メカニズムを指定します。
envVariablesCredential := options.Credential{ AuthMechanism: "MONGODB-AWS", } envVariablesClient, err := mongo.Connect( context.TODO(), options.Client().SetAuth(envVariablesCredential)) if err != nil { panic(err) } _ = envVariablesClient
Web IDP から取得した OpenID Connect(OIDC)トークンを使用して、Amazon Elastic Kubernetes Service(EKS)またはその他のサービスを認証できます。OIDC トークンを使用するには、トークンを含むファイルを作成し、以下に例示するとおり shell を使用して環境変数でこのファイルへの絶対パスを設定します。
export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file containing your OIDC token>
上記の環境変数を設定したら、以下に例示するとおり MONGODB-AWS
認証メカニズムを指定します。
envVariablesCredential := options.Credential{ AuthMechanism: "MONGODB-AWS", } envVariablesClient, err := mongo.Connect( context.TODO(), options.Client().SetAuth(envVariablesCredential)) if err != nil { panic(err) } _ = envVariablesClient
X.509
X.509
認証メカニズムでは TLS を X.509 証明書と併用して、クライアント証明書の相対的識別名(RDN)によって識別されるユーザーを認証します。X.509
認証メカニズムを指定すると、サーバーは次のファイルのパスを使用して接続を認証します。
tlsCAFile
。TLS 接続時に、信頼する単一の証明書機関または複数の証明書機関のバンドルのいずれかを含みます。tlsCertificateKeyFile
。クライアント証明書ファイルまたはクライアント秘密キー ファイルへのパスを参照します。
X.509
認証メカニズムを指定するには、次の手順を実行します。
tlsCAFile
に接続文字列内のファイルへのパスを割り当てます。tlsCertificateKeyFile
に接続文字列内のファイルへのパスを割り当てます。AuthMechanism
オプションに"MONGODB-X509"
という値を割り当てます
caFilePath := "<cafile_path>" certificateKeyFilePath := "<client_certificate_path>" uri := "mongodb://<hostname>:<port>/?tlsCAFile=%s&tlsCertificateKeyFile=%s" uri = fmt.Sprintf(uri, caFilePath, certificateKeyFilePath) credential := options.Credential{ AuthMechanism: "MONGODB-X509", } clientOpts := options.Client().ApplyURI(uri).SetAuth(credential)