[アップデート] Amazon S3のコンソールでS3バケットポリシーの作成時に、IAM Access Analyzerからのセキュリティ警告、エラーおよび提案が表示されるようになりました #reinvent

Amazon S3のコンソールでS3バケットポリシーの作成時に、IAM Access Analyzerからのセキュリティ警告、エラーおよび提案が表示されるようになりました。具体的にどのようなバケットポリシーを入力したときに、どのようなメッセージが表示されるのかを確認してみました。
2021.12.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、のんピ(@non____97)です。

AWS re:Invent 2021開催中です。開催期間中の11/30(火)に「Amazon S3のコンソールでS3バケットポリシーの作成時に、IAM Access Analyzerからのセキュリティ警告、エラーおよび提案が表示されるようになりました

こちらのアップデートについて紹介していきます。

具体的に何が嬉しいの?

誤ったバケットポリシーや過度にアクセス許可されたバケットポリシーを作成するリスクを減らすことができます。S3のコンソールでバケットポリシーを編集している最中にセキュリティ警告やエラー、提案が表示されるのでバケットポリシーを作成時の試行錯誤する時間を減らすことができると考えています。

ポリシーのチェック処理にはIAM Access Analyzerを使用しているので、チェック項目はIAM Access Analyzerと同じです。具体的なチェック項目は以下ドキュメントに記載してあります。

どのリージョンで使えるの?

すべてのAWSリージョンと、AWS GovCloud(米国)、Sinnetが運営するAWS China(Beijing)リージョン、NWCDが運営するAWS China(Ningxia)リージョンで、追加費用なしで利用できます。

やってみた

PrincipalやAction、Resourceが入力されていないパターン

それでは実際にバケットポリシーを編集してみて、挙動を確認していきます。  

S3のコンソールから対象のS3バケットを選択し、アクセス許可タブからバケットポリシーの編集をクリックします。

バケットポリシーの編集

バケットポリシーの編集画面を開くと、早速3つの提案が表示されていました。

  • Empty Object Principal: このステートメントにはプリンシパルが含まれないのでポリシーに影響しません。プリンシパルを指定してください。
  • Empty Array Action: このステートメントにはアクションが含まれていないのでポリシーに影響しません。アクションを指定してください。
  • Empty Array Resource: このステートメントにはリソースが含まれていないのでポリシーに影響しません。リソースを指定してください。

提案事項の確認

行番号の隣にアイコンが表示されて、どこについての提案なのかが分かりやすくて良いですね。

無効なEffectを指定したパターン

次に誤ったポリシーを作成してみてどのような表示がされるのかを確認していきます。

手始めに"Effect": "Allowww"と入力してみました。すると、以下エラーメッセージが表示されました。

  • Invalid Effect: 効果 Allowwww が無効です。「Allow」または「Deny」を使用してください。

無効なEffectを入力したパターン

単純なJSONの構文が間違っているだけでなく、ポリシーの中身をしっかりと確認してくれていることが見てとれます。

無効なARNを指定したパターン

次に無効なARNを指定したパターンを試してみます。

例として"Principal": {"AWS": "arn:aws:iam::123456789012:roottttt"}と入力してみました。すると、以下エラーメッセージが表示されました。

  • Invalid ARN Resource: リソース ARN が想定される ARN 形式と一致しません。ARN のリソース部分を更新してください。

無効なARNを指定したパターン

ARNのような長い文字列は入力ミスしがちなので、これを指摘してくれると嬉しいですね。

存在しないActionを指定したパターン

次に存在しないActionを指定したパターンを試してみます。

例として"Action": ["s3:hello-world"]と入力してみました。すると、以下エラーメッセージが表示されました。

  • Invalid Action: アクション s3:hello-world は存在しません。

存在しないActionを指定したパターン

「他のアクションをコピペして記述して入力ミス」のようなことも良くあるので、この指摘をしてくれるのはありがたいですね。

ソースを指定せずにサービスプリンシパルへのアクセスを許可したパターン

次にソースを指定せずにサービスプリンシパルへのアクセスを許可したパターンを試してみます。

例として"Action": ["s3:hello-world"]と入力してみました。すると、以下セキュリティについてのメッセージが表示されました。

  • Restrict Access To Service Principal: Granting access to a service principal without specifying a source is overly permissive. Use aws:SourceArn or aws:SourceAccount condition key to grant fine-grained access.

ソースを指定せずにサービスプリンシパルへのアクセスを許可したパターン

「Conditionでaws:SourceArnaws:SourceAccountを指定すべき」というアクセス許可を絞るための具体的な提案をしてくれてますね。

Resourceに異なるバケットのARNを指定したパターン

次にResourceに異なるバケットのARNを指定したパターンを試してみます。

例として"Resource": ["arn:aws:s3:::123456789012iam-access-analyzer-suggest-test-bucket"]と入力してみました。

Resourceに異なるバケットのARNを指定したパターン

どうやらこの段階では何も提案されないようですね。

こちらを検知するためには、外部アクセスプレビューを行います。

外部アクセスプレビューをクリックして、IAM Access Analyzerを指定しプレビューをクリックします。

外部アクセスプレビューの実行

すると、以下エラーメッセージが表示されました。

  • リソース設定が無効なため、IAM Access Analyzer はアクセスプレビューを作成できませんでした。これは、次のいずれかの理由で発生する可能性があります。
    1. バケットポリシーが有効ではありません。バケットポリシーの記述に関するヒントについては、以下を参照してください。 https://docs.aws.amazon.com/console/s3/using-iam-policies
    2. バケットポリシーがバケット ARN と一致しません

外部アクセスをプレビューの結果確認

意図した内容で正しく検知されることが確認できました。

外部のアカウントにアクセスを許可するパターン

最後に外部のアカウントにアクセスを許可するパターンを試してみます。

例として"Principal": {"AWS": "arn:aws:iam::123456789012:root"}と入力してみて、外部アクセスプレビューを行います。

外部のアカウントにアクセスを許可するパターン

数秒ほど待って外部アクセスプレビューの結果を確認すると、外部アカウントに許可しているアクションの一覧が表示されました。

外部のアカウントにアクセスを許可するパターンの外部アクセスプレビュー結果

具体的なアクションが表示されて、利用者に「外部アカウントからのアクセス許可を認識しているか?」という提案をしてくれるのはありがたいですね。

S3のバケットポリシーを作成作業が簡単に

Amazon S3のコンソールでS3バケットポリシーの作成時の、IAM Access Analyzerからのセキュリティ警告、エラーおよび提案の挙動を確認してみました。

ポリシーの作成は苦手な方も多いと思いますが、こちらのアップデートによってバケットポリシー作成作業の負担が軽減するのではと考えます。今後はKMSのキーポリシーなど他のポリシーの作成時にも同様の機能が提供されることを期待します。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!