スキップしてコンテンツを表示

Amazon DocumentDB を使用する場合の IAM ベースの認証の問題に対処する方法を教えてください。

所要時間2分
0

Amazon DocumentDB (MongoDB 互換) を使用するときに発生する認証の問題をトラブルシューティングしたいと考えています。

解決策

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

AWS Identity and Access Management (IAM) を使用して Amazon DocumentDB への認証を行うと、 "MongoServerError: Authentication failed" というエラーが発生する場合があります。IAM エンティティのアクセス許可を誤って設定した場合にも、IAM ロールを使用するときに認証エラーが表示されることがあります。

注: Amazon DocumentDB は、インスタンスベースのクラスターを使用するクラスターバージョン 5.0 以降のクラスターでのみ IAM ベースの認証をサポートします。Amazon DocumentDB プライマリユーザーは IAM ベースの認証をサポートしていません。

データベースユーザーとロールの設定を確認する

次の手順を実行します。

  1. MongoDB シェルを使用して、ルートユーザーとして Amazon DocumentDB クラスターにログインします。

  2. IAM エンティティ (IAM ユーザーまたは IAM ロール ARN) が $external データベースに正しく設定されているかどうかを確認するには、MongoDB シェルで次のコマンドを実行します。

    use $external;
    show users;
  3. IAM ユーザー用の IAM ARN と IAM ロールが $external データベースに登録されていることを確認します。また、ターゲットデータベースに必要なロールとアクセス許可を割り当てていることも確認します。

接続文字列を検証する

Amazon DocumentDB クラスターに接続するときは、クライアントが接続文字列に AuthSource と AuthMechanism の両方を正しく指定していることを確認します。IAM 認証では、AuthSource=$externalMONGODB-AWS メカニズムを使用する必要があります。

IAM 認証を使用して MongoDB クラスターに接続する

IAM ユーザーまたは IAM ロールに MongoDB クラスターにアクセスするための適切なアクセス許可があることを確認します。

mongo "mongodb://<access_key>:<secret_key>@<cluster_endpoint>:<db_port>/test?authSource=%24external&authMechanism=MONGODB-AWS"

注: access_key を AWS アクセスキー ID に置き換えてください。secret_key を AWS シークレットキーに置き換えてください。cluster_endpoint を Amazon DocumentDB クラスターエンドポイントに置き換えてください。db_port をデータベースのポート番号に置き換えてください。デフォルトのデータベースポート番号は 27017 です。

AWS 環境認証情報を使用して MongoDB クラスターに接続する

AWS 環境認証情報を使用して MongoDB クラスターに接続できることを確認します。

mongo "mongodb://<cluster_endpoint>:<db_port>/test?authSource=%24external&authMechanism=MONGODB-AWS"

注: cluster_endpoint を Amazon DocumentDB クラスターエンドポイントに置き換えてください。db_port をデータベースのポート番号に置き換えてください。デフォルトのデータベースポート番号は 27017 です。

クライアントは、環境から一時的な認証情報を自動的に取得します。これには、次の AWS サービスロールの認証情報が含まれます。

  • Amazon Elastic Cloud Compute (Amazon EC2) インスタンスプロファイル。
  • Amazon Elastic Container Service (Amazon ECS) タスクロール
  • AWS Lambda 実行ロール
  • Amazon Elastic Kubernetes Service (Amazon EKS) サービスアカウントロール。

IAM ロールまたは IAM ユーザーがクライアントでアクティブであることを検証する

Amazon EC2 または AWS Lambda の AWS 認証情報を明示的に渡さない場合は、コンピューティングリソースに IAM ロールをアタッチしていることを確認してください。

Amazon EKS の AWS 認証情報を明示的に渡さない場合は、ポッドまたはサービスアカウントに適切な IAM ロールの注釈とマッピングがあることを確認してください。また、コンピュートリソースに IAM ロールをアタッチしたことも確認してください。

有効な IAM アイデンティティを確認するには、次の get-caller-identity コマンドを実行します。

aws sts get-caller-identity

出力例:

{
    "UserId": "AIDATOCZW5HO####T22",
    "Account": "236411349###",
    "Arn": "arn:aws:iam::`444455556666`:user/DocDBRole"
}

出力が IAM ユーザーまたは IAM ロールと一致する場合、$external データベースの ARN が正しく設定されています。

注: Amazon DocumentDB は Node.js ドライバーバージョン 6.13.1 以前をサポートしていません。Amazon DocumentDB 用の IAM で Node.js ドライバーを使用するには、Node.js ドライバーとツールを 6.13.1 以降のバージョンにアップグレードする必要があります。

関連情報

Authentication using IAM identity (IAM ID を使用した認証)

AWS公式更新しました 5ヶ月前
コメントはありません

関連するコンテンツ