認証メカニズム
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
を使用します。
SCRAM-SHA-256
SCRAM-SHA-256
は、 SHA-256
アルゴリズムで暗号化されたデータベースのユーザー名とパスワードを使用してユーザーを認証する、Salted Challenge Response認証メカニズム(SCRAM)です。これはデフォルトの認証メカニズムです。
このデフォルトの認証メカニズムを指定するには、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(clientOpts)
また、AuthMechanism
オプションに "SCRAM-SHA-256"
という値を割り当てて、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(clientOpts)
MongoDB がサポートするチャレンジ レスポンス認証メカニズム(SCRAM)の詳細については、サーバー マニュアルのSCRAMセクションを参照してください。
SCRAM-SHA-1
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(clientOpts)
MONGODB-AWS
MONGODB-AWS
認証メカニズムは、Amazon Web Services Identity and Access Management(AWS IAM)認証情報を使用してユーザーを認証します。
MONGODB-AWS
認証が有効な状態の MongoDB インスタンスに接続するには、MONGODB-AWS
認証メカニズムを指定します。
ドライバーは、次のソースの認証情報を登録されている順序でチェックします。
接続文字列。
環境変数。
Web ID トークン ファイル
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
環境変数で指定されたAmazon Web Services ECS エンドポイント。Amazon Web Services EC2 エンドポイント。 詳細については、 Amazon Web Servicesドキュメントのタスクの IAM ロールを参照してください。
重要
ドライバーは、認証情報が見つかった最初のソースからのみ認証情報を取得します。例、接続文字列でAmazon Web Services の認証情報を指定すると、ドライバーは環境変数で指定した認証情報を無視します。
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(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(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(options.Client().SetAuth(envVariablesCredential)) if err != nil { panic(err) } _ = envVariablesClient
Web IDP から取得した OpenID Connect(OIDC)トークンを使用して、Amazon Elastic Kubernetes Service(EKS)またはその他のサービスを認証できます。OIDC トークンを使用するには、トークンを含むファイルを作成するか、既存のファイルを見つけます。次に、以下の環境変数を設定してください。
AWS_WEB_IDENTITY_TOKEN_FILE
: OIDC トークンを含むファイルの絶対パスに設定します。AWS_ROLE_ARN
: クラスターへの接続に使用される IAM ロールに設定します。例:arn:aws:iam::111122223333:role/my-role
。
次のシェルコマンドは、これらの環境変数を設定します。
export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file that contains OIDC token> export AWS_ROLE_ARN=<IAM role name>
以下の環境変数を設定した後、次の例に示すように MONGODB-AWS
認証メカニズムを指定します。
envVariablesCredential := options.Credential{ AuthMechanism: "MONGODB-AWS", } envVariablesClient, err := mongo.Connect(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)