AWS のサービスグラフコネクタ - Amazon EKS 統合Summary<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } この記事では、AWS のサービスグラフコネクタ (SGC-AWS) と AWS EKS 統合、および AWS 側で構成するために必要な手順について説明します。SGC-AWS と EKS の統合をセットアップする前に、紹介記事をお読みください。 Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } AWS のサービスグラフコネクタ v2.2 Instructions<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: #000000; } span { font-size: 12pt; font-family: Lato; color: #000000; } h2 { font-size: 24pt; font-family: Lato; color: black; } h3 { font-size: 18pt; font-family: Lato; color: black; } h4 { font-size: 14pt; font-family: Lato; color: black; } a { font-size: 12pt; font-family: Lato; color: #00718F; } a:hover { font-size: 12pt; color: #024F69; } a:target { font-size: 12pt; color: #032D42; } a:visited { font-size: 12pt; color: #00718f; } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } 目次 Amazon EKS 統合はじめにアーキテクチャコアコンポーネント AWS システムマネージャーKubectlEKS クラスター セットアップ手順 1.セキュリティ:ServiceNow ユーザーの EKS API アクセス2.セキュリティ - EKS ロールのセットアップ3.EC2 要塞ホストのセットアップ4.SG-AWS ガイド付きセットアップで EC2 インスタンスの詳細を登録 機能仕様FAQ 多くの要塞ホスト (EC2) が必要なのはなぜですか? 参照 Amazon EKS 統合 概要 EKS CI 情報を CI に取り込むために、AWS のセキュリティ上の理由により、ポッド、ノード、サービス、ボリュームなどをプルするための直接 API がありません。さまざまなオプションを検討した結果、EC2 要塞ホストを使用することにしました。Kube Config がセットアップされた AWS 環境に要塞ホストが必要です。この EC2 (Linux/Unix ベース) インスタンスは、既存の EC2 インスタンスまたは基本インスタンスと共有できます。 アーキテクチャ SGC-AWS インポートスケジュールは、SSM-SendCommand API を呼び出し、Kubectl コマンドの実行を開始します。 Systems Manager は、EC2 インスタンスで SSM ドキュメントを実行します。 Kubectl コマンドは EKS クラスター API を呼び出し、出力をターミナルにダンプします。 その後、ターミナル出力は S3 バケットに転送されます。 SG-AWS は S3 バケットを呼び出し、端末出力データを解析して CI に入力します。後で、S3 バケットからファイルを削除します。 コアコンポーネント AWS システムマネージャー SGC-AWS は Systems Manager を使用して、EC2 インスタンスにオンデマンドリクエストを発行して Kubernetes コマンドを実行します。これは、既存の SSM --> EC2 統合 TCP/実行中のプロセスデータ収集アーキテクチャに似ています。AWS SSM に展開できるガイド付きセットアップとともに、SSM ドキュメントスクリプトを提供します。アプリケーションは、必要な K8S 情報を取得するための kubectl コマンドを持つ SSM ドキュメントスクリプトを呼び出します。この統合の一環として、2 つの SSM ドキュメントスクリプトを共有します。 SG-AWS-RunKubeCtlEKSNamesShellScript.ymlSG-AWS-RunKubeCtlShellScript.yml このリリースでは、提供されている EKS SendCommand ドキュメントは、IMDSv1 が有効な場合にのみ動作することに注意してください。IMDSv2 のサポートは将来のリリースで予定されています。したがって、EC2 踏み台インスタンスを構成するときは、IMDSv1 が有効になっていることを確認してください。参考文献セクションにいくつかの文書を添付しました。 Kubectl Kubectl コマンドラインツールは、EKS クラスターに対してコマンドを実行して、必要な詳細を取得するために使用されます。このコマンドラインツールは、EKS の詳細を取得するために使用されている EC2 インスタンスにインストールする必要があります。Kubeconfigファイルが作成されると、すべてのクラスター構成の詳細が含まれます。詳細を取得するには、次の kubectl コマンドが実行されます。 kubectl config view config get-contextskubectl get nodes kubectl get serviceskubectl get podskubectl get deployments クラスターでプライベートエンドポイントまたはパブリックエンドポイントが定義されている場合があります。プライベート EKS クラスターにアクセスするには、EC2 インスタンスが同じ VPC にある必要があります。したがって、VPC ごとに 1 つの EC2 インスタンスを構成する必要があります。EKS クラスターには読み取り専用アクセスが必要です。読み取り専用ロールは、ServiceNow ユーザーに定義した AWS ロールにマッピングする必要があります。 セットアップ手順 セキュリティ:ServiceNow ユーザーの EKS API アクセスセキュリティ - EKS ロールのセットアップEC2 要塞ホストのセットアップSG-AWS ガイド付きセットアップで EC2 インスタンスの詳細を登録 1.セキュリティ:ServiceNow ユーザーの EKS API アクセス ServiceNow は、読み取り専用アクセス権を持つ想定ロールを使用します。EKS API アクセスの場合、API 呼び出しは EC2 要塞ホストで行われます。EKS API にアクセスするには、ServiceNow ユーザーに以下のポリシーを追加する必要があります。ネットワーク内のクラスターを検出し、kubeconfig を作成して EKS API 呼び出しを行うには、このロールが必要です。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:ListClusters" ], "Resource": "*" } ] } 2.セキュリティ - EKS ロールのセットアップ クラスターへの読み取り専用アクセス権が必要です。以下は、クラスターロール、クラスターロールバインディング、および AWS IAM ロールクラスターロールマッピングの詳細です。これは、各 EKS クラスターでマッピングする必要があります。 kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: eks-ro-group-cluster-role rules: - apiGroups: - "" - "*" - apps - extensions - batch - autoscaling resources: ["*"] verbs: ["get", "watch", "list","describe"] apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: eks-ro-group-binding subjects: - kind: Group name: snow.group apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: eks-ro-group-cluster-role apiGroup: rbac.authorization.k8s.io mapRoles: ---- - groups: - snow.group rolearn: arn:aws:iam::#EC2ACCNUMBER#:role/#InstanceProfileRoleName# username: AmazonSSMRoleForInstances #EC2ACCNUMBER# - Account number where the bastion host is hosted. #InstanceProfileRoleName# - Instance Profile attached to the EC2 instance mapRoles: ---- - groups: - snow.group rolearn: arn:aws:iam::1234567890:role/AmazonSSMRoleForInstances username: AmazonSSMRoleForInstances 3.EC2 要塞ホストのセットアップ 小さな (t2.nano/micro) EC2 インスタンス (Unix/Linux ベース) または既存の EC2 インスタンスを起動して、他のアプリケーションと共有できます。EC2 インスタンスで次のセットアップが行われていることを確認します。 EC2 インスタンスにインストールされている SSM エージェント。 EC2 に関連付けられた AmazonSSMManagedInstanceCore ロール。EC2 に添付された S3 バケットアクセスインスタンスプロファイル。Kubectl をインストールします。Kubeconfig セットアップ。 運用面 会社の標準に従って、EC2 インスタンスのセキュリティ、アップグレードパッチなどを管理する必要があります。 3.1 SSMエージェント AWS Systems Manager 経由で通信するには、EC2 インスタンスに SSM エージェントがインストールされている必要があります。ほとんどの EC2 インスタンスには、SSM エージェントがプリインストールされています。 3.2 EC2 に添付された AmazonSSMManagedInstanceCore ロール Systems Manager が EC2 インスタンスと通信するには、「AmazonSSMManagedInstanceCore」ロールが EC2 インスタンスにアタッチされている必要があります。 既存の CloudFormation (CFT) スクリプト - AmazonSSMForInstancesRoleSetup.yml を参照してください。 3.3 EC2に添付されたS3バケットアクセスインスタンスプロファイル kubectl コマンドの出力が大きいため、ターミナル出力を S3 バケットに公開する必要があります。詳細ディスカバリー用に定義された S3 バケットを使用できます。AWS Systems Manager で説明されている手順に従って、EC2 システム情報 (別名: Deep Discovery) を取得します。 3.4 kubectlをインストールする kubectl コマンドラインツールをインストールする必要があります。 3.5 Kubeconfigのセットアップ 「SG-AWS-RunKubeCtlEKSNamesShellScript」は、eks list-clusters を使用してネットワーク内の利用可能な EKS クラスターをスキャンします。このリストを使用して、スクリプトは「/root/.kube/config」に kubeconfig ファイルを作成します。このコンテキストを使用して、「SG-AWS-RunKubeCtlShellScript」は kubectl コマンドを実行し、ポッド、ノード、デプロイメント情報を取得します。 4.SG-AWS ガイド付きセットアップで EC2 インスタンスの詳細を登録 すべてのKubectlセットアップがどこで行われたかを知るには、ガイド付きセットアップに追加できる次の詳細を提供する必要があります。このデータはテーブル sn_aws_integ_sg_aws_eks_ec2_resource に格納されます。 EKS アカウント EKS AWS リージョン リソース ID EKACC1 us-east-1 i-1234567890abcdef0 EKACC1 us-east-1 i-1234567890abcdef1 EKACC1 us-east-2 i-1234567890abcdef3 EKACC2 us-east-1 i-1234567890abcdef4 スクリプトを実行すると、次のマスター (sn_aws_integ_sg_aws_eks_master) テーブルが入力され、クラスターとそのソースが 1 対 1 でマッピングされます。 アカウント AWS リージョン クラスター名 EKS サーバー URL リソース ID EKS アカウント ID EKS リージョン ACC1 us-east-1 itxlab-cloud-eks https://endpoint1.gr7.us-east-1.eks.amazonaws.com i-1234567890abcdef0 EKACC1 us-east-1 ACC1 us-east-1 itxlab-cloud-eks1 https://endpoint2.gr7.us-east-1.eks.amazonaws.com i-1234567890abcdef1 EKACC1 us-east-1 ACC1 us-east-2 itxlab-cloud-eks2 https://endpoint3.gr7.us-east-2.eks.amazonaws.com i-1234567890abcdef3 EKACC1 us-east-2 ACC2 us-east-1 itxlab-cloud-eks https://endpoint4.gr7.us-east-1.eks.amazonaws.com i-1234567890abcdef4 EKACC2 us-east-1 機能仕様 この統合の一環として、次の EKS 詳細が CMDB にプルされます。 # 名前 CI 名 1 Kubernetes クラスター cmdb_ci_kubernetes_cluster 2 Kubernetes サービス cmdb_ci_kubernetes_service 3 Kubernetes ノード cmdb_ci_kubernetes_node 4 Kubernetes ポッド cmdb_ci_kubernetes_pod 5 Kubernetes ボリューム cmdb_ci_kubernetes_volume 6 Kubernetes デプロイメント cmdb_ci_kubernetes_deployment 7 Kubernetes DaemonSet cmdb_ci_kubernetes_daemonset 8 Kubernetes 名前空間 cmdb_ci_kubernetes_namespace 9 Kubernetes コンポーネント cmdb_ci_kubernetes_component 10 Kubernetes 作業負荷 cmdb_ci_kubernetes_workload 11 Docker コンテナ cmdb_ci_docker_container 12 Docker イメージ cmdb_ci_docker_image 属性の詳細については、この記事を参照してください。 FAQ 多くの要塞ホスト (EC2) が必要なのはなぜですか? EKS エンドポイントは、プライベートまたはパブリックにすることができます。プライベート EKS クラスターにアクセスするには、EC2 インスタンスが同じ VPC にある必要があるため、EKS がインストールされている VPC に要塞ホストをローカルにセットアップする必要があります。一方、多数またはすべてのパブリックエンドポイントがある場合は、すべてのパブリックエンドポイント EKS クラスターと通信できる 1 つの要塞ホストを使用できます。アカウント内の VPC に VPC ピアリングまたはトランジットゲートウェイが確立されている場合、複数の VPC にあるこれらすべての EKS と通信するには、1 つの要塞ホストで十分です。ただし、EC2 要塞ホストと接続された EKS クラスターは同じ AWS アカウントにある必要があることに注意してください。 参照 https://aws.amazon.com/premiumsupport/knowledge-center/amazon-eks-cluster-access/ IMDS の設定方法の詳細については、以下を参照してください。 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-existing-instances.html#modify-restore-IMDSv1https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.htmlhttps://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html