🧑‍💻

#124 AWS CLIからの操作を拒否してみる

に公開

はじめに

AWS CLI(Command Line Interface)は、AWSリソースを管理および操作するための強力なツールです。多くのエンジニアが日常的に利用しており、その柔軟性と利便性から、スクリプトや自動化の一環として広く活用されている一方で、AWS CLIを利用した誤操作やセキュリティリスクの懸念も存在します。そのため、AWS CLIからのアクセスを制御したい、あるいは特定のユーザーに対してCLI操作を禁止したいといったニーズがあるかと思いその方法についてリサーチしてみました。

リサーチ

「AWS CLI 操作拒否 ポリシー」といったキーワードで検索してみても関連するような情報がなかなか見つかりませんでした。公式ドキュメントを漁ってみてもそれらしい情報を見つけることができませんでしたが、stackoverflowで同じようなトピックを見つけることはできました。

さっそく試してみる

AdministratorAccessポリシーがアタッチされたIAMユーザに下記のインラインポリシーをアタッチしてみます。CLIからのアクセスの場合はすべての操作を拒否するポリシーになります。

DenyCLIAccess
{
        "Version": "2012-10-17",
        "Statement": [
                {
                        "Sid": "DenyCLIAccess",
                        "Effect": "Deny",
                        "Action": "*",
                        "Resource": "*",
                        "Condition": {
                                "StringLike": {
                                        "aws:UserAgent": "aws-cli/*"
                                }
                        }
                }
        ]
}

・許可ポリシー
aws-cdk-2-1

実験

作成したポリシーをアタッチしたIAMユーザにアクセスキーを発行して、CLIのセットアップし、S3のバケットをリストで取得する以下のCLIコマンドを実行してみます。

Terminal
aws s3 ls 

An error occurred (AccessDenied) when calling the ListBuckets operation: User: arn:aws:iam::xxxxxxxxxxxxxxx:user/aws-console-cli-access-1 is not authorized to perform: s3:ListAllMyBuckets with an explicit deny in an identity-based policy

操作が拒否されました!次に作成したインラインポリシーを削除して再度同じコマンドを実行してみます。

・作成したインラインポリシーを削除
aws-cdk-2-1

Terminal
aws s3 ls 

2024-11-09 12:52:49 aws-basic-tfstate-20230729
2024-11-14 00:32:24 public-access-block-test2024

作成したインラインポリシーを削除すると、問題なくS3のバケット情報を取得することができました!

まとめ

どうやらAWS CLIのリクエストのUser-Agentヘッダーには"aws-cli”が含まれるようで、実際にCLIの操作を拒否することができました。これを活用してIAMポリシーを設定することで、CLIアクセスを特定して制御することが可能ですが、情報が圧倒的に少なく、さらなる調査が必要なようです。

参考

AWS IAM: Restrict access for CLI, but not Management Console

Discussion