Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
IAM アクセス許可の「アクセス拒否」または「許可されていない」エラーのトラブルシューティングに役立つデータを取得する方法を教えてください。
AWS リソースにアクセスすると、「アクセス拒否」または「許可されていない」エラーが表示されます。これらの AWS Identity and Access Management (IAM) API コールでのエラーをトラブルシューティングする参考となるデータを求めています。
簡単な説明
Amazon Athena クエリまたは AWS コマンドラインインターフェイス (AWS CLI) を使用して、障害が発生した IAM API コールのエラーログを取得します。次に指示に従い、IAM ポリシーでのアクセス拒否または操作が許可されていないことを示すエラーをトラブルシューティングします。
解決策
注: AWS CLI コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用していることを確認してください。
Athena クエリを使用して CloudTrail ログを検索し、IAM API コールのエラーをトラブルシューティングする
注: 始める前に、Amazon Simple Storage Service (Amazon S3) バケットに記録するための証跡を作成する必要があります。Athena は、その証跡の Amazon S3 バケットに配信される AWS CloudTrail ログファイルに記録されたイベントを使用するため、この手順が必要です。
1.「Athena でテーブルを自動的に作成して AWS CloudTrail ログを検索する方法を教えてください」の「Athena テーブルを作成する」セクションに記載された手順を実行します。
注: 自動的に作成される Athena テーブルは、Amazon S3 バケットと同じ AWS リージョンに置かれます。
2.Athena コンソールを開き、プラス記号 "+" をクリックして新しいクエリを作成します。
3.次のクエリ例を入力し、[実行] を選択します。
このクエリ例では、時刻形式は ISO 8601 基本形式を使用しており、Z 変数は UTC です。
注: your-arn は、お使いのリソースの IAM Amazon リソースネーム (ARN) に、your-table は実際のテーブル名に置き換えます。
SELECT from_iso8601_timestamp(eventTime) AS "Time", useridentity.arn AS "Identity ARN", eventID AS "Event ID", eventsource AS "Service", eventname AS "Action", errorCode AS "Error", errorMessage AS "Message" FROM your-table WHERE from_iso8601_timestamp(eventtime) >= from_iso8601_timestamp('2019-10-29T06:40:00Z') AND from_iso8601_timestamp(eventtime) < from_iso8601_timestamp('2019-10-29T06:55:00Z') AND userIdentity.arn = 'your-arn' AND eventType = 'AwsApiCall' AND errorCode is not null AND (lower(errorCode) LIKE '%accessdenied%' OR lower(errorCode) LIKE '%unauthorized%') ORDER BY eventTime desc
4.次の表の出力例には、ID ARN のアクセス許可エラーが一覧表示されています。
| Time | Event ID | Service | Action | Error | Message | |-----------------------------|--------------------------------------|--------------------------|--------------|--------------|----------------------------------------------------------------------------------------------------------------------| | 2019-10-29 06:52:45.000 UTC | 0406f0c1-47a8-4f71-8a94-18267b84042a | cloudtrail.amazonaws.com | LookupEvents | AccessDenied | User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents with an explicit deny in an identity-based policy | | 2019-10-29 06:41:48.000 UTC | 14e5e77c-f682-45e1-8c88-12d15af293dd | cloudtrail.amazonaws.com | LookupEvents | AccessDenied | User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action |
注: CloudTrail イベント出力の結果が出力されるまでに最大 15 分かかることがあります。
5.必要に応じてクエリ例からこの行を削除すると、すべてのユーザーのエラーを取得できます。
AND userIdentity.arn = 'your-arn'
6.必要に応じてクエリ例から次の行を削除すると、選択した期間のすべてのエラーを取得します。
AND (lower(errorCode) LIKE '%accessdenied%' OR lower(errorCode) LIKE '%unauthorized%')
AWS CLI を使用して IAM アクセス許可 API コールのエラーをトラブルシューティングする
注: AWS CLI スクリプトには jq コマンドライン JSON プロセッサが必要です。チュートリアルとダウンロードの手順については、「JSON 出力形式」を参照してください。yum パッケージを使用するディストリビューションでは、次のコマンドを実行します。
$ sudo yum install jq
1.次の AWS CLI コマンドを実行します。
注: your-arn は、お使いのリソースの IAM ARN に置き換えてください。
( echo "Time,Identity ARN,Event ID,Service,Action,Error,Message"; aws cloudtrail lookup-events --start-time "2019-10-29T06:40:00Z" --end-time "2019-10-29T06:55:00Z" --query "Events[*].CloudTrailEvent" --output text \ | jq -r ". | select(.userIdentity.arn == \"your-arn\" and .eventType == \"AwsApiCall\" and .errorCode != null and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\")))) | [.eventTime, .userIdentity.arn, .eventID, .eventSource, .eventName, .errorCode, .errorMessage] | @csv" ) | column -t -s'",'
注: CloudTrail へのルックアップリクエストのレートは、1 アカウント、1 リージョンにつき、1 秒あたり 2 件に制限されています。この制限を超えると、スロットリングエラーが発生します。
2.この表の出力例は、指定された期間における ID ARN のアクセス許可エラーを一覧表示します。
注: 過去 90 日間にリージョン内で発生したイベントを検索できます。
Time Event ID Service Action Error Message 2019-10-29T06:52:45Z 0406f0c1-47a8-4f71-8a94-18267b84042a cloudtrail.amazonaws.com LookupEvents AccessDenied User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents with an explicit deny in an identity-based policy 2019-10-29T06:41:48Z 14e5e77c-f682-45e1-8c88-12d15af293dd cloudtrail.amazonaws.com LookupEvents AccessDenied User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action
3.(オプション) 次の行を削除すると、すべてのユーザーのエラーを取得します。
.userIdentity.arn == \"your-arn\" and
4.(オプション) この行を削除すると、選択した期間のすべてのエラーを取得します。
and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\")))
許可されていないというエラーのトラブルシューティング
Athena および上記の AWS CLI 出力例は、CloudTrail LookupEvents API コールに関連したものです。
Deny ステートメントが含まれているためにアクセスを拒否する IAM ポリシーでは、エラーメッセージに明示的拒否と暗黙的拒否に関する特定のフレーズが含まれます。IAM の明示的拒否エラーには、次のフレーズが含まれます。 <type> 「ポリシーに明示的な拒否があります」IAM の暗黙的拒否エラーには、次のフレーズが含まれます。 <type> 「アクションを許可する <action> ポリシーがありません」
出力に明示的な拒否を含む cloudtrail:LookupEvents は、関連する IAM ポリシーが正しくないことを示しています。
明示的な拒否が発生する可能性があるポリシータイプの例を次に示します。ID ベースのポリシー、リソースベースのポリシー、アクセス許可の境界、組織の SCP、セッションポリシー。明示的な deny ステートメントは、常に allow ステートメントよりも優先されます。明示的な拒否は、IAM ユーザーの ID ベースのポリシーにあります。
ID ベースのポリシーで許可されていないことが理由の cloudtrail:LookupEvents は、ID ベースのポリシーではこの API アクションが許可されず、暗黙的な拒否が発生したことを示しています。ID ベースのポリシーには、cloudtrail:LookupEvents API アクションに対する明示的な allow ステートメントがありません。
AWS がアクセスを確立するために評価するポリシータイプは次のとおりです。
IAM ポリシーの評価および管理方法の詳細については、「ポリシー評価ロジック」と「IAM ポリシーの管理」を参照してください。
関連情報

関連するコンテンツ
- AWS公式更新しました 1年前
- AWS公式更新しました 8ヶ月前
- AWS公式更新しました 1年前
- AWS公式更新しました 5ヶ月前