こんにちは、ひろかずです
IAMのベストプラクティスには、最小権限を付与する
という項目があります。
最小権限の確認には、遮断されたAPIを確認したいところです。
お手軽な確認方法としてMacieが使えそうなことに気がついたので、一筆書きます。
ざっくり構成
今回は、デフォルト暗号化をKMS暗号化
に設定したs3バケットにオブジェクトをPutするというシチュエーションで試してみました。
ぱっと見で、当該s3に対するPutObjectがあれば良さそうですよね。
KMSへのアクセス権が必要そうですか?
何をつければ良いのでしょう?
まずやってみる
AccessDeniedしてしまいました。
$ aws s3 cp test.txt s3://bucket/ --profile readonly
upload failed: ./file.txt to s3://bucket/test.txt An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
権限を見てみます。
readonlyユーザーにs3putの権限を追加しています。
Limited-s3-put-secretの設定は以下です。
MacieでAccessDeniedされたAPIアクセスを確認する
RESEARCH画面で以下検索クエリーを実行します。
- コマンド実行から検索可能になるまで肌感で5-10分程度のタイムラグがあります。
- 自分で試す時は、xxxxx...の部分はAWSアカウントIDに置き換えてください。
- 自分で試す時は、readonlyの部分を使用しているIAMユーザー名に置き換えてください。
eventNameErrorCode.secondary:"AccessDenied" AND @timestamp:[now-1d TO now] AND macieUniqueId:"xxxxxxxxxxxx\:user\:readonly"
スクロールしていくと、検索結果が表示されます。
PutObjectの失敗に混じって、GenerateDataKey:AccessDenied
がありますね。
展開するとこんな感じで表示されます
DenyされているAPIを許可する
GenerateDataKeyを許可するIAMポリシーLimited-kms-generate_datakey
を作成してアタッチしました。
Limited-kms-generate_datakey
の設定は以下です。
もう一度やってみる
成功しました。
$ aws s3 cp test.txt s3://bucket/ --profile readonly
upload: ./test.txt to s3://bucket/test.txt
最後に
これまで、失敗したAPIコールの調査ではCloudTrailを確認する他ありませんでしたが、検索可能にする作り込みの手間や、Athenaの課金が心配な状況でした。
Macieを使うことで、直感的に失敗したAPIコールを調査することができるようになったと思えます。
今後も活用していきたいですね。
今日はここまでです。
お疲れ様でした。