Amazon Web Services ブログ

IAM Access Analyzer の最新情報: カスタムポリシーチェックとガイド付き取り消しを拡張する

IAM Access Analyzer をさらに強力にし、カスタムポリシーチェックを拡張し、IAM ポリシーの微調整に役立つガイダンスに簡単にアクセスできるようにしました。これらの新機能はどちらも、re:Invent 2023 で開始されたカスタムポリシーチェックと未使用アクセス分析に基づいています。こちらが弊社が立ち上げるものです。

新しいカスタムポリシーチェック – 自動推論の力を利用した新しいチェックは、特定の重要な AWS リソースへのアクセスを許可するポリシー、またはあらゆる種類のパブリックアクセスを許可するポリシーを検出するのに役立ちます。どちらのチェックも、デプロイ前に、おそらく CI/CD パイプラインの一部として使用するように設計されており、組織のセキュリティ慣行やポリシーに準拠していない更新を積極的に検出するのに役立ちます。

ガイド付き取り消し – IAM Access Analyzer では、実際には必要のないアクセス権を付与する許可を取り消せるようガイダンスを提供し、デベロッパーと共有できるようになりました。これには、未使用のロール、未使用の許可を持つロール、IAM ユーザーの未使用のアクセスキー、IAM ユーザーの未使用のパスワードが含まれます。ガイダンスには、余分な項目を削除するか、より制限の厳しい項目に置き換えるために必要な手順が含まれています。

新しいカスタムポリシーチェック
新しいポリシーチェックは、コマンドラインから、または API 関数を呼び出すことで呼び出すことができます。チェックは、リクエストの一部として提供されたポリシードキュメントを検証し、PASS または FAIL の値を返します。いずれの場合も、PASS はポリシー文書が特定のアクセスを適切に拒否していることを示し、FAIL はポリシーが許可の一部またはすべてを許可している可能性があることを示します。新しいチェックは次のとおりです。

パブリックアクセスがないことのチェック – このチェックはリソースポリシーに対して実行され、ポリシーが指定されたリソースタイプへのパブリックアクセスを許可しているかどうかを確認します。例えば、AWS::S3::Bucket リソースタイプを指定することで、ポリシーで S3 バケットへのパブリックアクセスが許可されているかどうかを確認できます。有効なリソースタイプには、DynamoDB テーブルとストリーム、EFS ファイルシステム、OpenSearch ドメイン、Kinesis ストリームとストリームコンシューマー、KMS キー、Lambda 関数、S3 バケットとアクセスポイント、S3 Express ディレクトリバケット、S3 Outposts バケットとアクセスポイント、Glacier、Secrets Manager シークレット、SNS トピックとキュー、ロールを引き受ける IAM ポリシードキュメントなどがあります。有効なリソースタイプのリストは、時間が経つにつれて拡大していく予定で、CheckNoPublicAccess のドキュメントに記載されています。

Amazon Simple Queue Service (Amazon SQS) キューへのパブリックアクセスを誤って許可するポリシーがあるとします。確認方法は次のとおりです。

$ aws accessanalyzer check-no-public-access --policy-document file://resource.json \
  --resource-type AWS::SQS::Queue --output json

結果は、次のとおりです。

{
    "result": "FAIL",
    "message": "The resource policy grants public access for the given resource type.",
    "reasons": [
        {
            "description": "Public access granted in the following statement with sid: SqsResourcePolicy.",
            "statementIndex": 0,
            "statementId": "SqsResourcePolicy"
        }
    ]
}

ポリシーを編集して付与したアクセス権を削除して再試行すると、今度はチェックに合格しました。

{
    "result": "PASS",
    "message": "The resource policy does not grant public access for the given resource type."
}

アクセス権が付与されていないことのチェック – このチェックは、一度に 1 つのリソースポリシーまたは ID ポリシーに対して実行されます。また、アクションとリソースのリストも受け付けます。いずれも IAM ポリシーの一部として受け入れられる形式です。このチェックでは、ポリシーが、リスト内のリソースへの意図しないアクセスを、リスト内のアクションによって許可していないかどうかを確認します。例えば、このチェックを使用して、ポリシーで重要な CloudTrail 証跡の削除が許可されていないことを確認できます。

$ aws accessanalyzer check-access-not-granted --policy-document file://ct.json \
  --access resources="arn:aws:cloudtrail:us-east-1:123456789012:trail/MySensitiveTrail" \
  --policy-type IDENTITY_POLICY --output json

IAM Access Analyzer は、次のように、チェックが失敗したことを示しています。

{
    "result": "FAIL",
    "message": "The policy document grants access to perform one or more of the listed actions or resources.",
    "reasons": [
        {
            "description": "One or more of the listed actions or resources in the statement with index: 0.",
            "statementIndex": 0
        }
    ]
}

ポリシーを修正して再試行すると、今度はチェックに合格します。このことから、ポリシーがリストされたリソースへのアクセスを許可していないことがわかります。

{
    "result": "PASS",
    "message": "The policy document does not grant access to perform the listed actions or resources."
}

ガイド付き取り消し
以前の記事では、IAM Access Analyzer が、実際には必要のないアクセス権を付与する IAM 項目を検出して一覧表示する方法を説明しました。本日のリリースにより、ユーザー (または開発チーム) がこのような検出結果を解決するのに役立つガイダンスを得られます。私の AWS アカウントの最新の検出結果は次のとおりです。

これらの中には、あるサービスへの早期アクセス権を与えられ、そのサービスを利用してブログを書いたときの残り物もあれば、私がクラウド管理者として一般的に無能だったことが原因のものもあります。 どちらにせよ、これらをクリーンアップしないといけません。2 つ目の「未使用のアクセスキー」から始めましょう。項目をクリックすると、下部に新しい[Recommendations] (レコメンデーション) セクションが表示されます。

手順に従ってアクセスキーを削除することも、[Archive] (アーカイブ) をクリックして検出結果をアクティブな結果のリストから削除し、アーカイブされた検出結果のリストに加えることもできます。今後似たような検出結果に対して同じことをするアーカイブルールを作成することもできます。未使用の IAM ユーザー、IAM ロール、およびパスワードについても同様のレコメンデーションが提供されています。

それでは、未使用の許可の検出結果について見てみましょう。

レコメンデーションは既存のポリシーを新しいポリシーに置き換えることです。次のように、新しいポリシーを既存のポリシーと並べてプレビューできます。

最初の例のように、手順に従うことも、検出結果をアーカイブすることもできます。

検出結果とレコメンデーションは、コマンドラインからも確認できます。次のように、アナライザーとその検出結果を指定してレコメンデーションを生成します。

$ aws accessanalyzer generate-finding-recommendation \
  --analyzer-arn arn:aws:access-analyzer-beta:us-west-2:123456789012:analyzer/MyAnalyzer \
  --id 67110f3e-05a1-4562-b6c2-4b009e67c38e

次に、レコメンデーションを取得します。この例では、JSON 出力全体がかなり充実しているので、ステップのみを表示するように出力をフィルタリングしています。

$ aws accessanalyzer get-finding-recommendation \
  --analyzer-arn arn:aws:access-analyzer-beta:us-west-2:123456789012:analyzer/MyAnalyzer \
  --id 67110f3e-05a1-4562-b6c2-4b009e67c38e --output json | \
  jq .recommendedSteps[].unusedPermissionsRecommendedStep.recommendedAction
"CREATE_POLICY"
"DETACH_POLICY"

これらのコマンド (または同等の API コール) を使用して、レコメンデーションを独自のツールやシステムに統合できます。

今すぐご利用いただけます
新しいチェックと解決手順がご利用いただけるようになり、すべてのパブリック AWS リージョンで今すぐ利用を開始できます。

Jeff;

原文はこちらです。