AWS
IAM
Macie

IAMの最小権限を調整するために、Amazon Macieを活用する

こんにちは、ひろかずです

IAMのベストプラクティスには、最小権限を付与するという項目があります。
最小権限の確認には、遮断されたAPIを確認したいところです。

お手軽な確認方法としてMacieが使えそうなことに気がついたので、一筆書きます。

ざっくり構成

今回は、デフォルト暗号化をKMS暗号化に設定したs3バケットにオブジェクトをPutするというシチュエーションで試してみました。
ぱっと見で、当該s3に対するPutObjectがあれば良さそうですよね。
KMSへのアクセス権が必要そうですか?
何をつければ良いのでしょう?

figure1.png

まずやってみる

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の権限を追加しています。

iam1.png

Limited-s3-put-secretの設定は以下です。

iam2.png

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がありますね。

macie2.png

展開するとこんな感じで表示されます

macie3.png

DenyされているAPIを許可する

GenerateDataKeyを許可するIAMポリシーLimited-kms-generate_datakeyを作成してアタッチしました。
iam3.png

Limited-kms-generate_datakeyの設定は以下です。

iam4.png

もう一度やってみる

成功しました。

$ aws s3 cp test.txt s3://bucket/ --profile readonly
upload: ./test.txt to s3://bucket/test.txt

最後に

これまで、失敗したAPIコールの調査ではCloudTrailを確認する他ありませんでしたが、検索可能にする作り込みの手間や、Athenaの課金が心配な状況でした。
Macieを使うことで、直感的に失敗したAPIコールを調査することができるようになったと思えます。
今後も活用していきたいですね。

今日はここまでです。
お疲れ様でした。