AWS の EC2 上に Kubernetes でクラスター立てて運用する時、 EC2 に対して任意のポリシーをアタッチしたいことがある。
kops を使う場合クラスターを最低限動作させるために必要なポリシーは kops 側で作ってくれる。
ただプラスで自分でポリシーを付与する時はちょっと一手間必要だった。
kops は任意のポリシーを追加する時に下記のように spec ファイルに対して additionalPolicies
という key に対して node と master に追加したいポリシーを記載する機能をサポートしている。
これはポリシーの JSON の時の Statement にあたる部分になる。
spec: additionalPolicies: node: | [ { "Effect": "Allow", "Action": ["es:*"], "Resource": ["*"] } ] master: | [ { "Effect": "Allow", "Action": ["dynamodb:*"], "Resource": ["*"] } ]
これでやりたいことは実現できる。
ただ AWS が提供しているポリシー (AmazonEC2RoleforSSM
とか) を使おうと思うとその中の json をコピーして additionalPolicies
に貼り付ける必要がある。
これが結構面倒。
一つや二つなら良いのですが、複数のポリシーを使うとなるとどんどん行が伸びていって。。。。
後は自分は terraform でポリシーを作ってるので、それを使いたいのに毎回 json をコピーする必要があるのもちょっと辛かった。
どうしたものかと思っていたら2日前にこれを解決してくれるコードが kops にマージされた。
それがこれ!
これを使うと自分で定義したポリシーや AWS で用意してくれているポリシーを master や node の IAM Role に付与してくれるっぽい
違ってたらごめんなさい。
定義は下記のように spec file に記載する。
spec: externalPolicies: node: - arn:aws:iam::xxxxxxxxx:policy/hogehoge - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore master: - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
ただ2020/02/19時点ではmasterにコードがあるだけなのでリリースはされていない。
そのためこの機能を使いたい時は自分で kops をビルドする必要がある。
Macでビルドするなら git clone https://github.com/kubernetes/kops.git
して make kops
すればバイナリが生成されると思います。
ただリリースされてないバージョンを使用することになるので、注意してご使用ください。
最後に
だいぶ kops の spec ファイルがスッキリして最高