[アップデート] IAM ポリシーと SCP でベストプラクティスに則れ! IAM Access Analyzer が新機能「ポリシーチェック」に対応しました

ポリシーの編集中にリアルタイムでチェックを行なってくれます。便利。

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

コンバンハ、千葉(幸)です。

IAM Access Analyzer によるポリシーチェックが可能になりました。

これまでアクセスアナライザーによる分析対象としてリソースベースポリシーがサポートされていたのですが、今回の新機能では IAM ポリシーSCP(サービスコントロールポリシー)に対するチェックができるようになっています。

何が変わったのか

従来のアクセスアナライザーができたのは「リソースベースポリシーが外部からアクセス可能なパーミッションになっていないか」の検証でした。

現時点でサポートされているリソースタイプは以下の通りで、これらに対してアカウント外(もしくはOrganizations外)のプリンシパルからのアクセスが可能となっていないかを、自動的にチェックしてくれます。

  • S3 バケット
  • IAM ロール
  • KMS キー
  • Lambda 関数とレイヤー
  • SQS キュー
  • Secrets Manager シークレット

基本的にはすでに存在するパーミッション(リソースベースポリシーで定義された許可)に対するチェックなのですが、先日のアップデートで「事前の検証」にも対応しました。

今回のアップデートによる新機能では、リソースベースポリシーでなく IAM ポリシーと SCP に対するチェックに対応しています。

例えば以下は IAM ポリシーの JSON での編集画面ですが、画面下部にチェック結果を表示してくれる箇所が追加されています。

IAM_Management_Consolejson

編集中のポリシーの内容に対して、概ねリアルタイムで以下の観点でのチェック結果を表示してくれます。

  • セキュリティ
  • エラー
  • 警告
  • 提案

すべてのチェック結果への対応がマストというわけではありませんが、チェック結果に合わせて修正することでベストプラクティスに近づいていけるようになっています。

従来のリソースベースポリシーに対する分析には「アナライザー」の作成が必要ですが、新機能「ポリシーチェック」ではその必要はありません。特に追加設定なしでそのまま使い始められます。無料です。

100を超すチェック項目

どういったチェックをしてくれるかは、以下ページに記載があります。

現時点で107個あり、今後も随時追加されていくとのことです。

ものすごく粗いですが、ざっくりまとめてみました。(項目名が重複する物もあります)

分類 項目 概要
Error ARN account not allowed 許可されていないARNアカウント
Error ARN Region not allowed 許可されていないARNリージョン
Error Data type mismatch データ型の不一致
Error Duplicate keys with different case 大文字と小文字が異なる重複キー
Error Invalid action 無効なアクション
Error Invalid ARN account 無効なARNアカウント
Error Invalid ARN prefix 無効なARNプレフィックス
Error Invalid ARN Region 無効なARNリージョン
Error Invalid ARN resource 無効なARNリソース
Error Invalid ARN service case 無効なARNサービスケース
Error Invalid condition data type 無効な条件・データ型
Error Invalid condition key format 無効な条件・キー形式
Error Invalid condition multiple Boolean 無効な条件・複数のブール値
Error Invalid condition operator 無効な条件・演算子
Error Invalid effect 無効なエフェクト
Error Invalid global condition key 無効なグローバル条件キー
Error Invalid partition 無効なパーティション
Error Invalid policy element 無効なポリシー要素
Error Invalid principal format 無効なプリンシパルフォーマット
Error Invalid principal key 無効なプリンシパルキー
Error Invalid Region 無効なリージョン
Error Invalid service 無効なサービス
Error Invalid service condition key 無効なサービス条件キー
Error Invalid service in action アクション内の無効なサービス
Error Invalid variable for operator 無効な演算子の変数
Error Invalid version 無効なバージョン
Error Json syntax error Json構文エラー
Error Json syntax error Json構文エラー
Error Missing action アクションが不足
Error Missing ARN field ARNフィールドが不足
Error Missing ARN Region ARNリージョンが不足
Error Missing effect 効果が不足
Error Missing principal プリンシパルが不足
Error Missing qualifier 修飾子が不足
Error Missing resource リソースが不足
Error Missing statement ステートメントが不足
Error Null with if exists IfExistsとNullの同時使用
Error SCP syntax error action wildcard SCP構文エラー・アクション内でのワイルドカード
Error SCP syntax error allow condition SCP構文エラー・AllowとConditionの使用
Error SCP syntax error allow NotAction SCP構文エラー・NotActionの使用
Error SCP syntax error allow resource SCP構文エラー・Allowとリソース指定
Error SCP syntax error NotResource SCP構文エラー・NotResourceの使用
Error SCP syntax error principal SCP構文エラー・プリンシパルの使用
Error Unique Sids required 固有のSidが必要
Error Unsupported element combination サポートされていない要素の組み合わせ
Error Unsupported global condition key サポートされていないグローバル条件キー
Error Unsupported principal サポートされていないプリンシパル
Error Unsupported Sid サポートされていないSid
Error Unsupported wildcard in principal プリンシパル要素でのサポートされていないワイルドカード
Error Missing brace in variable 変数に中括弧{}がない
Error Unsupported symbol in variable 変数でサポートされていないシンボル
Error Unsupported symbol in variable 変数でサポートされていないシンボル
Error Missing quote in variable 変数に引用符がない
Error Unsupported space in variable 変数でサポートされていないスペース
Error Empty variable 空の変数
Error Variable unsupported in element 要素でサポートされていない変数
Error Variable unsupported in version ポリシーバージョンでサポートされていない変数
Error Private IP address aws:SourceIpでプライベートIPアドレスを指定
Error Private NotIpAddress aws:SourceIpのNotIpAddressでプライベートIPアドレスを指定
Error Policy size exceeds SCP quota ポリシーサイズがSCPクォータを超えている
General Warning Create SLR with NotResource NotResourceを使用したSLR(ServiceLinkedRole)の作成
General Warning Create SLR with star in action and NotResource アクションとNotResourceにワイルドカードを使用したSLRの作成
General Warning Create SLR with NotAction and NotResource NotActionとNotResourceを使用したSLRの作成
General Warning Create SLR with star in resource リソースでワイルドカードを使用したSLRの作成
General Warning Create SLR with star in action and resource アクションとリソースにワイルドカードを使用したSLRの作成
General Warning Create SLR with star in resource and NotAction リソースとNotActionにワイルドカードを使用したSLRの作成
General Warning Deprecated global condition key 非推奨のグローバル条件キー
General Warning Invalid date value 無効な日付値
General Warning Invalid role reference 無効なIAMロール参照
General Warning Invalid user reference 無効なIAMユーザー参照
General Warning Missing version バージョンが指定されていない
General Warning Unique Sids recommended 一意なSidの推奨
General Warning Wildcard without like operator Like演算子使用時にワイルドカードを使用しない
General Warning Policy size exceeds identity policy quota ポリシーサイズがクォータを超えている
General Warning Type mismatch タイプの不一致
General Warning Type mismatch Boolean タイプの不一致・ブール値
General Warning Type mismatch date タイプの不一致・日付
General Warning Type mismatch IP range タイプの不一致・IP範囲
General Warning Type mismatch number タイプの不一致・数値
General Warning Type mismatch string タイプの不一致・文字列
Security Warning Allow with NotPrincipal NotPrincipalで許可
Security Warning ForAllValues with single valued key 単一値のキーを持つForAllValues
Security Warning Pass role with NotResource NotResourceでPassRole
Security Warning Pass role with star in action and NotResource アクションとNotResourceでワイルドカードがあるPassRole
Security Warning Pass role with NotAction and NotResource NotActionおよびNotResourceでPassRole
Security Warning Pass role with star in resource リソースでワイルドカードがあるPassRole
Security Warning Pass role with star in action and resource アクションとリソースでワイルドカードがあるPassRole
Security Warning Pass role with star in resource and NotAction リソースとNotActionでワイルドカードがあるPasRole
Suggestion Empty array action 空の配列・アクション
Suggestion Empty array condition 空の配列・条件
Suggestion Empty array condition ForAllValues 空の配列・条件/ForAllValues
Suggestion Empty array condition ForAnyValue 空の配列・条件/ForAnyValue
Suggestion Empty array condition IfExists 空の配列・条件/IfExists
Suggestion Empty array principal 空の配列・プリンシパル
Suggestion Empty array resource 空の配列・リソース
Suggestion Empty object condition 空のオブジェクト・状態
Suggestion Empty object principal 空のオブジェクト・プリンシパル
Suggestion Empty Sid value 空のSid値
Suggestion Improve IP range IP範囲の改善
Suggestion Null with qualifier 修飾子でNull
Suggestion Private IP address subset aws:SourceIpでプライベートIPアドレスのサブセット
Suggestion Private NotIpAddress subset aws:SourceIpのNotIpAddressでプライベートIPサブセット
Suggestion Redundant action 冗長なアクション
Suggestion Redundant condition value num 冗長な条件値num
Suggestion Redundant resource 冗長なリソース
Suggestion Redundant statement 冗長なステートメント
Suggestion Wildcard in service name サービス名でワイルドカードを使用

多くの項目が用意されていることが分かります。ポリシー編集画面上ではチェックへの対応方法も一緒に表示してくれるので、事前に難しいことを考えなくて良さそうです。

チェック例を見てみよう

冒頭で引用したブログからそのまま拝借して、どのようにチェックしてくれるかを見てみましょう。(以降の画像はすべて引用したものです。)

セキュリティチェック(PassRoleの範囲が広い)

iam:PassRoleを許可するリソースが*で指定されている場合のチェック結果です。

pv_sec_4

必要最小限のリソースに絞ることで解消されます。

エラーチェック(Json Syntax Error)

無効な構文となっている場合に出るチェックです。ここでは不要な(が含まれてしまっています。

pv_err_2

構文チェックについては従来から似たようなことができましたが、より分かりやすくなりましたね。

警告チェック(無効な Date の値)

Date として YYYY-MM-DD のフォーマットを入れるべきところ、YYYY のみを指定したことにより警告されている例です。

pv_warn_2

具体的な修正内容も同じ画面で確認できるのは便利ですね。

提案チェック(空の配列アクション)

"Action"部を配列としているが、中身が空の状態の場合のチェックです。

pv_sugg_4

構文としては間違っていない場合にもこういった形で提案してくれるのは助かります。

終わりに

IAM Access Analyzer の新機能ポリシーチェックでした。

繰り返しとなりますが、この機能はアクセスアナライザーの有効化(アナライザーの作成)を行なっていなくても利用できます。単純に「 IAM ポリシーの編集画面便利になったなー」という感覚です。

今回はコンソール上での確認のみにとどめましたが、ValidatePolicyという API も用意されています。

そのうち AWS CLI でも使用できるようになるかと思いますので、対応したら使用感を確認してみたいと思います。

以上、千葉(幸)がお送りしました。