Amazon EKS で IAM を使用する方法
IAM を使用して Amazon EKS へのアクセスを管理する前に、Amazon EKS で使用できる IAM 機能について理解しておく必要があります。Amazon EKS およびその他の AWS のサービスが IAM と連携する方法の概要を把握するには、IAM ユーザーガイド の「IAM と連携する AWS のサービス」を参照してください。
Amazon EKS のアイデンティティベースのポリシー
IAM アイデンティティベースのポリシーでは、許可または拒否するアクションとリソース、またアクションを許可または拒否する条件を指定できます。Amazon EKS は、特定のアクション、リソース、および条件キーをサポートしています。JSON ポリシーで使用するすべての要素については、IAM ユーザーガイドの「IAM JSON ポリシーの要素のリファレンス」を参照してください。
アクション
管理者は AWS JSON ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの プリンシパル がどの リソース に対してどのような 条件 下で アクション を実行できるかということです。
JSON ポリシーの Action
要素には、ポリシー内のアクセスを許可または拒否するために使用できるアクションが記述されます。ポリシーアクションの名前は通常、関連する AWS API オペレーションと同じです。一致する API オペレーションのない許可のみのアクションなど、いくつかの例外があります。また、ポリシーに複数のアクションが必要なオペレーションもあります。これらの追加アクションは、依存アクションと呼ばれます。
このアクションは、関連付けられたオペレーションを実行するためのアクセス許可を付与するポリシーで使用されます。
Amazon EKS のポリシーアクションは、アクションの前にプレフィックス eks:
を付加します。例えば、Amazon EKS クラスターについて説明する情報を入手するアクセス許可を他のユーザーに付与するには、ポリシーに DescribeCluster
アクションを含めます。ポリシーステートメントには、Action
または NotAction
要素を含める必要があります。
単一のステートメントに複数のアクションを指定するには、次のようにコンマで区切ります。
"Action": ["eks:
action1
", "eks:action2
"]
ワイルドカード (*) を使用して複数のアクションを指定することができます。たとえば、Describe
という単語で始まるすべてのアクションを指定するには、次のアクションを含めます。
"Action": "eks:Describe*"
Amazon EKS アクションの一覧については、サービス認証リファレンスの「Actions Defined by Amazon Elastic Kubernetes Service」を参照してください。
リソース
管理者は AWS JSON ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの プリンシパル がどの リソース に対してどのような 条件 下で アクション を実行できるかということです。
Resource
JSON ポリシー要素は、オブジェクトあるいはアクションが適用されるオブジェクトを指定します。ステートメントには、Resource
または NotResource
要素を含める必要があります。ベストプラクティスとして、Amazon リソースネーム (ARN) を使用してリソースを指定します。これは、リソースレベルの許可と呼ばれる特定のリソースタイプをサポートするアクションに対して実行できます。
オペレーションのリスト化など、リソースレベルのアクセス許可をサポートしないアクションの場合は、ワイルドカード (*) を使用して、ステートメントがすべてのリソースに適用されることを示します。
"Resource": "*"
Amazon EKS クラスターリソースの ARN は次のようになります。
arn:${Partition}:eks:${Region}:${Account}:cluster/${ClusterName}
ARN の形式の詳細については、「Amazon リソースネーム (ARN) と AWS のサービスの名前空間」を参照してください。
例えば、ステートメントで dev
クラスターを指定するには、次の ARN を使用します。
"Resource": "arn:aws:eks:
region-code
:111122223333
:cluster/dev"
特定のアカウントと AWS リージョン に属するすべてのクラスターを指定するには、ワイルドカード (*) を使用します。
"Resource": "arn:aws:eks:
region-code
:111122223333:cluster/*"
リソースの作成を含む、一部の Amazon EKS アクションは、特定のリソースで実行できません。このような場合は、ワイルドカード (*) を使用する必要があります。
"Resource": "*"
Amazon EKS リソースタイプとその ARN の一覧については、サービス認証リファレンスの「Amazon Elastic Kubernetes Service で定義されるリソースタイプ」を参照してください。各リソースの ARN を、どのアクションで指定できるかについては、「Actions Defined by Amazon Elastic Kubernetes Service (Amazon Elastic Kubernetes Service で定義されるアクション)」を参照してください。
条件キー
Amazon EKS では独自の条件キーが定義されており、また一部のグローバル条件キーの使用がサポートされています。すべての AWS グローバル条件キーを確認するには、IAM ユーザーガイドの「AWS グローバル条件コンテキストキー」を参照してください。
OpenID Connect プロバイダーをクラスターに関連付ける場合に条件キーを設定できます。詳細については、「IAM ポリシーの例」を参照してください。
すべての Amazon EC2 アクションは、aws:RequestedRegion
および ec2:Region
条件キーをサポートします。詳細については、「例: 特定の AWS リージョン へのアクセスの制限」を参照してください。
Amazon EKS での条件キーの一覧については、サービス認証リファレンスの「Condition Keys for Amazon Elastic Kubernetes Service」を参照してください。条件キーを使用できるアクションtoリソースについては、「Actions Defined by Amazon Elastic Kubernetes Service (Amazon Elastic Kubernetes Service で定義されるアクション)」を参照してください。
例
Amazon EKS でのアイデンティティベースのポリシーの例は、「Amazon EKS でのアイデンティティベースのポリシーの例」でご確認ください。
Amazon EKS クラスターを作成すると、このクラスターを作成した AWS Identity and Access Management (IAM) エンティティユーザーまたはロール (フェデレーティッドユーザーなど) は、Amazon EKS コントロールプレーンのクラスターロールベースアクセスコントロール (RBAC) 設定で、system:masters
アクセス許可が自動的に付与されます。この IAM エンティティは表示可能な設定の中には表示されません。したがって、どの IAM エンティティが最初にクラスターを作成したのかを追跡する必要があります。追加の AWS ユーザーまたはロールがクラスターと対話できるようにするには、Kubernetes 内の aws-auth
ConfigMap
を編集し、 aws-auth
ConfigMap
で指定した group
の名前を使用して、Kubernetes rolebinding
または clusterrolebinding
を作成する必要があります。
ConfigMap の使用に関する詳細については、「クラスターへの IAM ユーザーおよびロールアクセスを有効にする」を参照してください。
Amazon EKS でのリソースベースのポリシー
Amazon EKS では、 リソースベースのポリシーはサポートされていません。
Amazon EKS タグに基づいた認証
タグは、Amazon EKS リソースにアタッチすることも、Amazon EKS へのリクエストの際に渡すこともできます。タグに基づいてアクセスを制御するには、aws:ResourceTag/<key-name>
、aws:RequestTag/<key-name>
、または aws:TagKeys
の条件キーを使用して、ポリシーの条件要素でタグ情報を提供します。Amazon EKS リソースのタグ付けの詳細については、「Amazon EKS リソースのタグ付け」を参照してください。条件キーでタグを使用できるアクションの詳細については、「Service Authorization Reference」(サービス認可のリファレンス) の「Amazon EKS で定義されたアクション」を参照してください。
Amazon EKS でのIAM ロール
IAM ロール は、特定のアクセス許可を持つ、AWS アカウント内のエンティティです。
Amazon EKS での一時的な認証情報の使用
一時的な認証情報を使用して、フェデレーションでサインイン、IAM ロールを引き受ける、またはクロスアカウントロールを引き受けることができます。一時的なセキュリティ認証情報を取得するには、AssumeRole または GetFederationToken などの AWS STS API オペレーションを呼び出します。
Amazon EKS では、一時認証情報が使用できます。
サービスにリンクされたロール
サービスにリンクされたロールは、AWS サービスが他のサービスのリソースにアクセスして自動的にアクションを完了することを許可します。サービスにリンクされたロールは IAM アカウント内に表示され、サービスによって所有されます。IAM 管理者は、サービスにリンクされたロールのアクセス許可を表示できますが、編集することはできません。
Amazon EKS は、サービスにリンクされたロールをサポートしています。Amazon EKS でのサービスにリンクされたロールの作成または管理の詳細については、「Amazon EKS でのサービスにリンクされたロールの使用」を参照してください。
サービスロール
この機能により、ユーザーに代わってサービスがサービスロールを引き受けることが許可されます。このロールにより、サービスがユーザーに代わって他のサービスのリソースにアクセスし、アクションを完了することが許可されます。サービスロールは、IAM アカウントに表示され、アカウントによって所有されます。つまり、IAM 管理者が、このロールの許可を変更することができます。ただし、これを行うことにより、サービスの機能が損なわれる場合があります。
Amazon EKS ではサービスロールがサポートされています。詳細については、「Amazon EKS クラスター の IAM ロール」および「Amazon EKS ノードの IAM ロール」を参照してください。
Amazon EKS での IAM ロールの選択
Amazon EKS でクラスターリソースを作成する場合は、他のいくつかの AWS リソースに Amazon EKS が自動的にアクセスすることを許可するためのロールを、ユーザーが選択する必要があります。以前に作成したサービスロールがある場合、Amazon EKS により、選択できるロールのリストが提示されます。Amazon EKS 管理のポリシーがアタッチされたロールを選択することが重要です。詳細については、「既存のクラスターロールの確認」および「既存のノードロールの確認」を参照してください。