

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# `AWSSupport-TroubleshootEbsCsiDriversForEks`
<a name="automation-awssupport-troubleshoot-ebs-csi-drivers-for-eks"></a>

 **説明** 

 `AWSSupport-TroubleshootEbsCsiDriversForEks` ランブックは、Amazon Elastic Kubernetes Service (Amazon EKS) および Amazon EBS Container Storage Interface (CSI) ドライバーの Amazon Elastic Block Store ボリュームマウントに関する問題のトラブルシューティングに役立ちます。

**重要**  
現在、 で実行されている Amazon EBS CSI ドライバー AWS Fargate はサポートされていません。

 **動作の仕組み** 

 ランブックは、以下の大まかなステップ`AWSSupport-TroubleshootEbsCsiDriversForEks`を実行します。
+ ターゲット Amazon EKS クラスターが存在し、アクティブ状態になっているかどうかを確認します。
+ アドオンが Amazon EKS マネージドかセルフマネージドかに基づいて、Kubernetes API コールを実行するために必要な認証リソースをデプロイします。
+ Amazon EBS CSI コントローラーのヘルスチェックと診断を実行します。
+ ノードロールとサービスアカウントロールに対して IAM アクセス許可チェックを実行します。
+ 指定されたアプリケーションポッドの永続的なボリューム作成の問題を診断します。
+ node-to-podスケジューリングをチェックし、ポッドイベントを調べます。
+ 関連する Kubernetes ログとアプリケーションログを収集し、指定された Amazon S3 バケットにアップロードします。
+ ノードのヘルスチェックを実行し、Amazon EC2 エンドポイントとの接続を検証します。
+ 永続的なボリュームブロックデバイスのアタッチメントとマウントステータスを確認します。
+ トラブルシューティング中に作成された認証インフラストラクチャをクリーンアップします。
+ すべての診断結果を組み合わせた包括的なトラブルシューティングレポートを生成します。

**注記**  
Amazon EKS クラスターの認証モードは、 `API`または に設定する必要があります`API_AND_CONFIG_MAP`。Amazon EKS Access エントリを使用することをお勧めします。ランブックには、必要な API コールを実行するための Kubernetes ロールベースのアクセスコントロール (RBAC) アクセス許可が必要です。
Lambda 関数`LambdaRoleArn` ( パラメータ) の IAM ロールを指定しない場合、オートメーションは`Automation-K8sProxy-Role-<ExecutionId>`アカウントに という名前のロールを作成します。このロールには、 管理ポリシー `AWSLambdaBasicExecutionRole` と が含まれます`AWSLambdaVPCAccessExecutionRole`。
一部の診断ステップでは、Amazon EKS ワーカーノードを Systems Manager マネージドインスタンスにする必要があります。ノードが Systems Manager マネージドインスタンスでない場合、Systems Manager アクセスを必要とするステップはスキップされますが、他のチェックは続行されます。
自動化には、認証インフラストラクチャリソースを削除するクリーンアップステップが含まれています。このクリーンアップステップは、前のステップが失敗しても実行され、 AWS アカウント内の孤立したリソースを防ぐのに役立ちます。

 [このオートメーションを実行する (コンソール)](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEbsCsiDriversForEks) 

**ドキュメントタイプ**

オートメーション

**[所有者]**

Amazon

**[Platforms]** (プラットフォーム)

/

**必要な IAM アクセス許可**

`AutomationAssumeRole` パラメータでは、ランブックを正常に使用するために、次のアクションが必要です。
+ `ec2:DescribeIamInstanceProfileAssociations`
+ `ec2:DescribeInstanceStatus`
+ `ec2:GetEbsEncryptionByDefault`
+ `eks:DescribeAddon`
+ `eks:DescribeAddonVersions`
+ `eks:DescribeCluster`
+ `iam:GetInstanceProfile`
+ `iam:GetOpenIDConnectProvider`
+ `iam:GetRole`
+ `iam:ListOpenIDConnectProviders`
+ `iam:SimulatePrincipalPolicy`
+ `s3:GetBucketLocation`
+ `s3:GetBucketPolicyStatus`
+ `s3:GetBucketPublicAccessBlock`
+ `s3:GetBucketVersioning`
+ `s3:ListBucket`
+ `s3:ListBucketVersions`
+ `ssm:DescribeInstanceInformation`
+ `ssm:GetAutomationExecution`
+ `ssm:GetDocument`
+ `ssm:ListCommandInvocations`
+ `ssm:ListCommands`
+ `ssm:SendCommand`
+ `ssm:StartAutomationExecution`

 **指示** 

次の手順に従って自動化を設定します。

1. `TroubleshootEbsCsiDriversForEks-SSM-Role` アカウントに SSM オートメーションロールを作成します。信頼関係に以下のポリシーが含まれていることを確認します。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 以下のポリシーを IAM ロールにアタッチして、指定されたリソースで指定されたアクションを実行するために必要なアクセス許可を付与します。
   + 実行ログとリソースログを同じ AWS リージョンの Amazon S3 バケットにアップロードする場合は、 を のユーザー`arn:{partition}:s3:::BUCKET_NAME/*`として置き換えます`OptionalRestrictPutObjects`。
     + Amazon S3 バケットは正しい Amazon S3 バケットを指す必要があります。 `S3BucketName`
     + を指定しない場合、このアクセス許可はオプションです。 `S3BucketName`
     + Amazon S3 バケットはプライベートで、SSM オートメーションを実行するのと同じ AWS リージョンにある必要があります。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "OptionalRestrictPutObjects",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "ec2:DescribeIamInstanceProfileAssociations",
                   "ec2:DescribeInstanceStatus",
                   "ec2:GetEbsEncryptionByDefault",
                   "eks:DescribeAddon",
                   "eks:DescribeAddonVersions",
                   "eks:DescribeCluster",
                   "iam:GetInstanceProfile",
                   "iam:GetOpenIDConnectProvider",
                   "iam:GetRole",
                   "iam:ListOpenIDConnectProviders",
                   "iam:SimulatePrincipalPolicy",
                   "s3:GetBucketLocation",
                   "s3:GetBucketPolicyStatus",
                   "s3:GetBucketPublicAccessBlock",
                   "s3:GetBucketVersioning",
                   "s3:ListBucket",
                   "s3:ListBucketVersions",
                   "ssm:DescribeInstanceInformation",
                   "ssm:GetAutomationExecution",
                   "ssm:GetDocument",
                   "ssm:ListCommandInvocations",
                   "ssm:ListCommands",
                   "ssm:SendCommand",
                   "ssm:StartAutomationExecution"
               ],
               "Resource": "*"
           },
           {
               "Sid": "SetupK8sApiProxyForEKSActions",
               "Effect": "Allow",
               "Action": [
                   "cloudformation:CreateStack",
                   "cloudformation:DeleteStack",
                   "cloudformation:DescribeStacks",
                   "cloudformation:UpdateStack",
                   "ec2:CreateNetworkInterface",
                   "ec2:DeleteNetworkInterface",
                   "ec2:DescribeNetworkInterfaces",
                   "ec2:DescribeRouteTables",
                   "ec2:DescribeSecurityGroups",
                   "ec2:DescribeSubnets",
                   "ec2:DescribeVpcs",
                   "eks:DescribeCluster",
                   "iam:CreateRole",
                   "iam:DeleteRole",
                   "iam:GetRole",
                   "iam:TagRole",
                   "iam:UntagRole",
                   "lambda:CreateFunction",
                   "lambda:DeleteFunction",
                   "lambda:GetFunction",
                   "lambda:InvokeFunction",
                   "lambda:ListTags",
                   "lambda:TagResource",
                   "lambda:UntagResource",
                   "lambda:UpdateFunctionCode",
                   "logs:CreateLogGroup",
                   "logs:CreateLogStream",
                   "logs:DescribeLogGroups",
                   "logs:DescribeLogStreams",
                   "logs:ListTagsForResource",
                   "logs:PutLogEvents",
                   "logs:PutRetentionPolicy",
                   "logs:TagResource",
                   "logs:UntagResource",
                   "ssm:DescribeAutomationExecutions",
                   "tag:GetResources",
                   "tag:TagResources"
               ],
               "Resource": "*"
           },
           {
               "Sid": "PassRoleToAutomation",
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": [
                   "arn:aws:iam::*:role/TroubleshootEbsCsiDriversForEks-SSM-Role",
                   "arn:aws:iam::*:role/Automation-K8sProxy-Role-*"
               ],
               "Condition": {
                   "StringLikeIfExists": {
                       "iam:PassedToService": [
                           "lambda.amazonaws.com",
                           "ssm.amazonaws.com"
                       ]
                   }
               }
           },
           {
               "Sid": "AttachRolePolicy",
               "Effect": "Allow",
               "Action": [
                   "iam:AttachRolePolicy",
                   "iam:DetachRolePolicy"
               ],
               "Resource": "*",
               "Condition": {
                   "StringLikeIfExists": {
                       "iam:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true"
                   }
               }
           }
       ]
   }
   ```

------

1. Amazon EKS クラスター RBAC (ロールベースのアクセスコントロール) に必要なアクセス許可を付与します。推奨されるアプローチは、Amazon EKS クラスターでアクセスエントリを作成することです。

    Amazon EKS コンソールで、クラスターに移動します。Amazon EKS アクセスエントリの場合は、アクセス設定が `API_AND_CONFIG_MAP`または に設定されていることを確認します`API`。アクセスエントリの認証モードを設定する手順については、[「アクセスエントリの設定](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html)」を参照してください。

   **[アクセスエントリの作成]** を選択してください。
   + *IAM プリンシパル ARN* で、前のステップで SSM オートメーション用に作成した IAM ロールを選択します。
   + *[タイプ]* では、`Standard`[] を選択します。

1. アクセスポリシーを追加します。
   + *アクセススコープ*で、 を選択します`Cluster`。
   + *ポリシー名* で、 を選択します`AmazonEKSAdminViewPolicy`。

   [**Add policy**] を選択します。

   アクセスエントリを使用して Kubernetes API アクセス許可を管理していない場合は、ConfigMap `aws-auth` を更新し、IAM ユーザーまたはロール間にロールバインディングを作成する必要があります。IAM エンティティに次の読み取り専用 Kubernetes API アクセス許可があることを確認します。
   + GET `/apis/apps/v1/namespaces/{namespace}/deployments/{name}`
   + GET `/apis/apps/v1/namespaces/{namespace}/replicasets/{name}`
   + GET `/apis/apps/v1/namespaces/{namespace}/daemonsets/{name}`
   + GET `/api/v1/nodes/{name}`
   + GET `/api/v1/namespaces/{namespace}/serviceaccounts/{name}`
   + GET `/api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}`
   + GET `/api/v1/persistentvolumes/{name}`
   + GET `/apis/storage.k8s.io/v1/storageclasses/{name}`
   + GET `/api/v1/namespaces/{namespace}/pods/{name}`
   + GET `/api/v1/namespaces/{namespace}/pods`
   + GET `/api/v1/namespaces/{namespace}/pods/{name}/log`
   + GET `/api/v1/events`

1. 自動化 [AWSSupport-TroubleshootEbsCsiDriversForEks を実行する (コンソール)](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEbsCsiDriversForEks/description)

1. [**Execute automation**] (オートメーションを実行) を選択します。

1. 入力パラメータには、次のように入力します。
   + **AutomationAssumeRole（オプション):**
     + 説明: (オプション) SSM Automation が AWS Identity and Access Management ユーザーに代わってアクションを実行できるようにする (IAM) ロールの Amazon リソースネーム (ARN)。Kubernetes API コールを許可するには、ロールを Amazon EKS クラスターアクセスエントリまたは RBAC アクセス許可に追加する必要があります。
     + 型: `AWS::IAM::Role::Arn`
     + 例: `TroubleshootEbsCsiDriversForEks-SSM-Role`
   + **EksClusterName:**
     + 説明: ターゲット Amazon Elastic Kubernetes Service (Amazon EKS) クラスターの名前。
     + 型: `String`
   + **ApplicationPodName:**
     + 説明: Amazon EBS CSI ドライバーに問題がある Kubernetes アプリケーションポッドの名前。
     + 型: `String`
   + **ApplicationNamespace:**
     + 説明: Amazon EBS CSI ドライバーに問題があるアプリケーションポッドの Kubernetes 名前空間。
     + 型: `String`
   + **EbsCsiControllerDeploymentName (オプション):**
     + 説明: (オプション) Amazon EBS CSI コントローラーポッドのデプロイ名。
     + 型: `String`
     + デフォルト: `ebs-csi-controller`
   + **EbsCsiControllerNamespace (オプション):**
     + 説明: (オプション) Amazon EBS CSI コントローラーポッドの Kubernetes 名前空間。
     + 型: `String`
     + デフォルト: `kube-system`
   + **S3BucketName (オプション):**
     + 説明: (オプション) トラブルシューティングログがアップロードされるターゲット Amazon S3 バケット名。
     + 型: `AWS::S3::Bucket::Name`
   + **LambdaRoleArn (オプション):**
     + 説明: (オプション) AWS Lambda 関数が必要な AWS サービスとリソースにアクセスできるようにする IAM ロールの ARN。
     + 型: `AWS::IAM::Role::Arn`

   **[実行]** を選択します。

1. 完了したら、*出力*セクションで実行の詳細な結果を確認します。

**リファレンス**

Systems Manager Automation
+ [このオートメーションを実行する (コンソール)](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEbsCsiDriversForEks/description)
+ [オートメーションを実行する](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [オートメーションの設定](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [オートメーションワークフローのサポート](https://aws.amazon.com/premiumsupport/technology/saw/)

Amazon EBS CSI ドライバーの詳細については、[「Amazon EBS CSI ドライバー](https://docs.aws.amazon.com//eks/latest/userguide/ebs-csi.html)」を参照してください。