Amazon Elastic Kubernetes Service (Amazon EKS) クラスターの kubeconfig ファイルを生成しようとすると、AccessDeniedException エラーが発生します。
簡単な説明
Amazon EKS クラスターの kubeconfig ファイルを生成するには、eks:DescribeCluster API アクションをクラスターで使用するための許可が必要です。許可を取得するには、AWS Identity and Access Management (IAM) ポリシーを IAM ユーザーにアタッチします。
解決方法
IAM ポリシーを IAM ユーザーにアタッチするには、次の手順を実行します。
1. IAM コンソールを開きます。
2. ナビゲーションペインで、[Users or Roles] (ユーザーまたはロール) を選択します。
3. ポリシーを埋め込むユーザーまたはロールの名前を選択します。
4. [Permissions] (許可) タブで、[Add inline policy] (インラインポリシーを追加) を選択します。
5. [JSON] タブを選択します。
6. テキストエディタを使用して、コードを次の IAM ポリシーに置き換えます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"eks:DescribeCluster"
],
"Resource": "*"
}
]
}
7. [Review policy] (ポリシーの確認) を選択します。
8. [Name] (名前) で、ポリシーの名前を入力します。例: eks_update-kubeconfig。
注: ポリシーの名前は任意に選択できます。
9. [Create policy] (ポリシーを作成) を選択します。
明示的拒否メッセージは、多要素認証 (MFA) が false の場合、ほとんどのアクションを拒否する IAM ポリシーがあることを示します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BlockMostAccessUnlessSignedInWithMFA",
"Effect": "Deny",
"NotAction": [
"iam:CreateVirtualMFADevice",
"iam:EnableMFADevice",
"iam:ListMFADevices",
"iam:ListUsers",
"iam:ListVirtualMFADevices",
"iam:ResyncMFADevice",
"sts:GetSessionToken"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
]
}
注: MFA デバイスを使用するため、AWS Command Line Interface (AWS CLI) で AWS リソースへのアクセスを認証するには、MFA トークンを使用する必要があります。MFA トークンを使用して、AWS CLI を通じて AWS リソースへのアクセスを認証するにはどうすればよいですか? の記事の手順に従います。 その後、sts get-session-token AWS CLI コマンドを実行します。
例:
$ aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token
注: arn-of-the-mfa-device を MFA デバイスの ARN に置き換え、code-from-token をトークンのコードに置き換えます。
値を環境変数にエクスポートすることにより、一時的な認証情報を使用できます。
例:
$ export AWS_ACCESS_KEY_ID=example-access-key-as-in-previous-output
$ export AWS_SECRET_ACCESS_KEY=example-secret-access-key-as-in-previous-output
$ export AWS_SESSION_TOKEN=example-session-token-as-in-previous-output
update-kubeconfig コマンドを実行し、~/.kube/config の下にある設定ファイルが更新されていることを確認します。
aws eks --region region-code update-kubeconfig --name cluster_name
注: region-code を AWS リージョンのコードに置き換え、cluster name をクラスターの名前に置き換えます。