AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

サービス アカウントを使用した Atlas へのアクセスの構成

Atlas API サービス アカウントは、Atlas Kubernetes Operator を Atlas Administration API で認証するための、プログラムによる API キーに対するトークンベースのセキュアな代替手段を提供します。サービス アカウントは、clientIdclientSecret のペアから引き出された有効期間の短いアクセス トークンを使用するため、有効期間の長い認証情報の漏洩リスクを低減します。

MongoDB は、新しい配置にはプログラムによる API キーよりもサービスアカウントを推奨します。サービスアカウントには、次のような利点があります。

  • 演算子によってマネージドされる自動トークン更新を伴うトークンベース認証。

  • 組織レベルとプロジェクトレベルの両方のスコープのサポート。

  • Atlas Kubernetes Operator ワークロードの監査可能な個別の身元。

重要

サービス アカウント シークレットの有効期限

API キーとは異なり、サービス アカウントのシークレットは有効期限があります。TTL は最大 1 年まで設定できます。サービス アカウントのシークレットは、アクセスを中断させないように有効期限が切れる前にローテーションする必要があります。Atlas は、有効期限が近づくにつれて、自動的に「サービス アカウントのシークレットの有効期限が近づいています」というアラートを発生させます。ローテーションの予定を適切に計画してください。

これは組織レベルとプロジェクトレベルの両方のサービスアカウントに適用されます。

開始する前に、次のものをお持ちであることを確認してください。

  • 組織レベルのサービスアカウントの場合は Organization Owner ロール、プロジェクトレベルのサービスアカウントの場合は Project Owner ロールを持つ Atlas アカウント。

  • Atlas Kubernetes Operator がインストールされた実行中の Kubernetes クラスター。

  • kubectl Atlas Kubernetes Operator が実行されている Kubernetes クラスターへのアクセス。

1

Atlas UI または Atlas Administration API を使用して Atlas でサービス アカウントを作成します。組織レベルのサービス アカウントを作成する方法については、「組織でサービス アカウントを作成する」を参照してください。プロジェクトレベルのサービス アカウントを作成する方法については、「プロジェクト内でサービス アカウントを作成する」を参照してください。

clientIdclientSecretをコピーします。clientSecretは作成後に再度検索できないため、安全に保存してください。

2

orgIdclientIdclientSecretを含む Kubernetes secretを作成します。

  • global Atlas Kubernetes Operator シークレット については、次のコマンドを実行します。

    注意

    global Atlas Kubernetes Operator シークレットの名前は、事前定義された形式に準拠している必要があります。Atlas Kubernetes Operator 配置のデフォルト名は mongodb-atlas-operator です。したがって、シークレット の名前は mongodb-atlas-operator-service-account にする必要があります。

    kubectl create secret generic mongodb-atlas-operator-service-account \
    --from-literal="orgId=<the_atlas_organization_id>" \
    --from-literal="clientId=<the_service_account_client_id>" \
    --from-literal="clientSecret=<the_service_account_client_secret>" \
    -n <operator_namespace>
    kubectl label secret mongodb-atlas-operator-service-account \
    atlas.mongodb.com/type=credentials \
    -n mongodb-atlas-system
  • project Atlas Kubernetes Operator シークレット については、次のコマンドを実行します。

    kubectl create secret generic my-project-connection \
    --from-literal="orgId=<the_atlas_organization_id>" \
    --from-literal="clientId=<the_service_account_client_id>" \
    --from-literal="clientSecret=<the_service_account_client_secret>" \
    -n <atlas_project_namespace>
    kubectl label secret my-project-connection \
    atlas.mongodb.com/type=credentials \
    -n <atlas_project_namespace>
3

AtlasProjectspec.connectionSecretRef.name を使用して、 カスタム リソースから シークレット を参照します。

global シークレットを作成した場合、すべてのプロジェクトでデフォルトで使用されるため、追加の構成は必要ありません。

project シークレットを作成した場合は、connectionSecretRefAtlasProject カスタム リソースに追加します。

apiVersion: atlas.mongodb.com/v1
kind: AtlasProject
metadata:
name: my-project
spec:
name: "My Project"
connectionSecretRef:
name: my-project-connection
4

シークレットを構成した後、Atlas Kubernetes Operator が正常に認証されることを確認します。

kubectl get atlasproject my-project -o jsonpath='{.status.conditions}'

Ready 条件が True であることを確認します。Atlas Kubernetes Operator がサービス アカウントの認証情報で認証できない場合、条件には問題を説明するエラーが表示されます。

次の例は、サービスアカウントに構成された接続シークレットを示しています。

apiVersion: v1
kind: Secret
metadata:
name: my-project-connection
namespace: atlas-operator
labels:
atlas.mongodb.com/type: credentials
type: Opaque
stringData:
orgId: "5d39f0719ccf646554345678"
clientId: "mdb_sa_id_67890abcdef1234567890abc"
clientSecret: "mdb_sa_sk_abcdef1234567890abcdef12"

Atlas Kubernetes Operatorはアクセス トークンを自動的にマネージします。Atlas Kubernetes Operatorがサービスアカウント接続シークレットを検出すると、Atlas Administration APIからアクセストークンを取得し、別のkubernetes secretに保存します。アクセス トークン シークレットを手動で編集または削除しないでください。Atlas Kubernetes Operatorは必要に応じてトークンを更新します。

Atlas でサービスアカウントのシークレットをローテートする場合:

  1. Kubernetes 接続シークレットを新しい clientSecret で更新します。

  2. Atlas Kubernetes Operator は変更を検出し、次の調整サイクルで新しいアクセス トークンを取得します。再起動は必要ありません。

重要

サービス アカウントのシークレットの最大 TTL は 1 年です。Atlas で「サービス アカウントのシークレットの有効期限が切れようとしています」アラートをモニターし、認証の失敗を避けるため、有効期限が切れる前にシークレットをローテートしてください。これは、組織レベルとプロジェクトレベルの両方のサービス アカウントに適用されます。

サービス アカウントの API アクセス リストには、 プログラムによる API キー と同様に、Atlas Kubernetes Operator ポッドで使用されるイーグレス IP アドレスまたは CIDR ブロックを含める必要があります。演算子ポッドのイーグレス IP がサービス アカウントのアクセス リストにない場合、API リクエストは失敗します。