MEGAZONE 株式会社 のテック陣「MEGAZONEのゆかいな仲間たち」がおくる、Megazone Japan Advent Calendar 2023 の12日目のエントリーです。
はじめに
僕「あるAWSアカウントの環境をチェックしたいのでReadOnlyAccessのIAMユーザーを発行してください。」
管理者「必要となる権限の詳細を知りたい。対象のAWSサービスを絞れますか?」
僕 (利用中のAWSサービスは知っている...。そのAWSサービスの 〇〇ReadOnlyAccess を全部アタッチしてもらおうかな)
そんなふうに考えていた時期が私にもありました。
課題: 〇〇ReadOnlyAccessが存在しないAWSサービスもある
AWSが用意しているIAMポリシーであるAWSマネージドポリシー
の中には、「AmazonEC2ReadOnlyAccess」や「AmazonS3ReadOnlyAccess」といった特定サービス向けのIAMポリシーがあります。
例えば以下のAWSサービスに対するReadOnlyAccessが必要だった場合、
- Amazon EC2
→AmazonEC2ReadOnlyAccess - Amazon S3
→AmazonS3ReadOnlyAccess - Amazon Route53
→AmazonRoute53ReadOnlyAccess - AWS Key Management Service (AWS KMS)
→???
AWS KMSにはPowerUserはあるけどReadOnlyAccessが存在しない...。
さてどうしたものか。無いなら自分で作ってしまおう!ということでIAMポリシーの自作です。
IAMポリシー作成(AWS KMS用のReadOnlyAccess)
まずどんなActionを許可すればよいか確認します。
-
何がしたいのか?
→AWS KMSをReadOnlyしたい。 -
作成するIAMポリシーにはどのAction許可が必要か?
→えーと...LISTとかDescribeの全部(でいいのかな?)
果たして、AWS KMSにはどんなActionがあるのだろうか。
■パターン1: Policy editorで許可Actionを判断する
IAM > Policies > Create policyへ移動。
Policy editor(Visual)で「KMS」と入力。
↓
Access levelを覗いてみるとLISTの中にLIST関連が、READの中にDescribeがいる。じゃあLISTとREADのAll Actionを選択でいいかな?
・Policy editor(Visual)での表示
※ResourcesはAll(*)にしています
各ActionのInfoをクリックすると説明が表示されるので、何ができるのか確認することができます。必要か不要かはこれで判断。
■パターン2: ReadOnlyAccessから許可Actionを判断する
AWS公式であるReadOnlyAccessから、AWS KMS関連の許可Actionをコピーしようという方法です。
後述のJSONをコピーして作成する方法がお勧めですが、以下の手順で許可Actionを確認することができます。
IAM > Policies > ReadOnlyAccess へ移動し、Permissionsで「KMS」を検索してクリック。
52個のActionのうち12個が許可されていますね。これ見ながらPolicy editor(Visual)でポチポチするのはちょっと嫌
Excel等に許可Actionをまとめたい、といったケースでは役に立つかも。
・JSONをコピーする方法
ReadOnlyAccessのJSONの内容は、AWSドキュメントまたはIAMのページで確認できます。
パパッと調べたいならAWSドキュメントの方が楽ですが、更新遅れなどが不安な場合はIAMのページからでも。
IAM > Policies > ReadOnlyAccess へ移動しJSONを表示。
表示したJSONの中から「kms:」の行をコピー。
※自分のブラウザではJSON内を文字検索できなかったので、Copyをクリックしてテキストに移したほうが速いかも
[パターン1]同様にPolicy editorで「KMS」を選択し、JSONのActionパラーメータをコピーした内容に書き換えます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:Describe*",
"kms:Get*",
"kms:List*"
],
"Resource": "*"
}
]
}
※Action最後の「,」の位置に注意です
[パターン1]と同様にAccess levelのListとReadが全て許可されています。
■[パターン1],[パターン2]どちらも結果は同じ?
今回のAWS KMSではどちらの方法でも許可Actionは同じでしたが、他のAWSサービスでは一致しないことがあります。(主にGet関連)
とくに細かな要件がなければ、[パターン2]のほうが無難ですかね。AWS公式のReadOnlyAccessから抜粋しましたと言えますので。
おわりに
ReadOnlyAccessならもらえるだろうと思っていたらもらえなかった話でした。ポリシー作成手順よりも、何をもって正しいと判断するかの基準が大切だと感じました。