Overview
Atlas APIサービス アカウント は、 Atlas Administration APIで Atlas Kubernetes Operator を認証するための、プログラムAPIキーの安全なトークンベースの代替手段を提供します。サービス アカウントは、clientId と のペアから生成された有効期間の短いアクセスclientSecret トークンを使用するため、有効期間の認証情報露出のリスクを軽減します。
MongoDB は、新しい配置にはプログラムによる API キーよりもサービスアカウントを推奨します。サービスアカウントには、次のような利点があります。
演算子によってマネージドされる自動トークン更新を伴うトークンベース認証。
組織レベルとプロジェクトレベルの両方のスコープのサポート。
Atlas Kubernetes Operator ワークロードの監査可能な個別の身元。
重要
サービス アカウント シークレットの有効期限
APIキーと違い、サービス アカウントのシークレットには有効期限があります。最大 1 年間の TTL を設定できます。アクセスが中断されないようにするには、有効期限が切れる前にサービス アカウントのシークレットをローテーションする必要があります。 Atlas は、有効期限が近づくと、「 サービス アカウント シークレットは有効期限が近づいています」アラートを自動的に発生させます。これに応じてローテーション スケジュールを計画します。
これは組織レベルとプロジェクトレベルの両方のサービスアカウントに適用されます。
前提条件
開始する前に、次のものをお持ちであることを確認してください。
組織レベルのサービスアカウントの場合は Organization Owner ロール、プロジェクトレベルのサービスアカウントの場合は Project Owner ロールを持つ Atlas アカウント。
Atlas Kubernetes Operator がインストールされた実行中の Kubernetes クラスター。
kubectlAtlas Kubernetes Operator が実行されている Kubernetes クラスターへのアクセス。
手順
Atlas でサービス アカウントを作成する
Atlas UIまたは Atlas 管理APIを使用して、Atlas でサービス アカウントを作成します。組織レベルのサービス アカウントを作成する方法については、「 組織内でのサービス アカウントの作成 」を参照してください。プロジェクト レベルのサービス アカウントの作成方法については、「 プロジェクトでのサービス アカウントの作成 」を参照してください。
clientIdとclientSecretをコピーします。clientSecretは作成後に再度検索できないため、安全に保存してください。
Kubernetes 接続シークレットを作成する
、orgId clientId、 を含むKubernetesシークレットを作成します。clientSecret
globalAtlas Kubernetes Operator シークレット については、次のコマンドを実行します。注意
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 projectAtlas 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>
シークレットの参照元 AtlasProject
spec. connectionSecretRef.nameAtlasProject を使用して、 カスタムリソースからシークレットを参照します。
globalシークレットを作成した場合、すべてのプロジェクトはデフォルトでそれを使用するため、追加構成は必要ありません。
projectシークレットを作成した場合は、connectionSecretRef をAtlasProject カスタムリソースに追加します。
apiVersion: atlas.mongodb.com/v1 kind: AtlasProject metadata: name: my-project spec: name: "My Project" connectionSecretRef: name: my-project-connection
YAML 例
次の例は、サービスアカウントに構成された接続シークレットを示しています。
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"
Considerations
Token マネジメント
Atlas Kubernetes Operator はアクセス トークンを自動的に管理します。 Atlas Kubernetes Operator が サービス アカウント接続シークレット を検出すると、Atlas Administration APIからアクセス トークンを取得し、それを別のKubernetesシークレットに保存します。アクセス トークン シークレットを手動で編集または削除 しない でください。 Atlas Kubernetes Operator は、必要に応じてトークンを更新します。
認証情報のローテーション
Atlas でサービスアカウントのシークレットをローテートする場合:
Kubernetes 接続シークレットを新しい
clientSecretで更新します。Atlas Kubernetes Operator は変更を検出し、次の調整サイクルで新しいアクセス トークンを取得します。再起動は必要ありません。
重要
サービス アカウントのシークレットの TTL は最大 1 年です。 Atlas で「サービス アカウント シークレットの有効期限が迫っている」アラートを監視し、有効期限が切れる前にシークレットをローテーションして認証失敗を回避します。これは、組織レベルとプロジェクトレベルの両方のサービスアカウントに適用されます。
IP アクセス リスト
サービス アカウントのAPIアクセス リストには、 プログラマティックAPIキーの場合と同じ、Atlas Kubernetes Operator ポッドで使用される Egress IPアドレスまたは CIDR ブロックを含める必要があります。演算子ポッドの Egress IPがサービス アカウント アクセス リストにない場合、 APIリクエストは失敗します。