🔒
[AWS] IAM Access Deniedエラー解決ガイド #1 - 基本的なトラブルシューティング
🌟 はじめに
おぐまです。
AWSを使用していると、必ず一度は遭遇する「Access Denied」エラー。
本記事では、シリーズ第1回として基本的なAccess Deniedエラーの解決方法について解説します。
📚 Access Deniedエラーの基本
エラーの正体
Access Deniedエラーは、AWSリソースへのアクセス権限が不足している場合に発生します。
主な原因は以下の通りです:
- IAMポリシーの設定不足
- リソースベースのポリシーとの競合
- 暗黙的な拒否(Deny)の存在
- クロスアカウントアクセスの設定ミス
💡 5つの代表的なシナリオと解決方法
1. Lambda関数からS3バケットへのアクセス
エラーメッセージ例
AccessDeniedException: Access Denied (Service: Amazon S3; Status Code: 403...)
解決手順
- IAM実行ロールの確認
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
- S3バケットポリシーの確認
- CORS設定の確認(必要な場合)
2. CloudWatchログの書き込み権限
エラーメッセージ例
Unable to write logs to CloudWatch (Service: AWSLogs; Status Code: 403...)
解決手順
- 基本ロギング権限の付与
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
}
]
}
- ロググループの存在確認
- リージョン設定の確認
3. クロスアカウントアクセス
エラーメッセージ例
User is not authorized to perform: sts:AssumeRole on resource...
解決手順
- 信頼関係の設定
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/calling-service-role"
},
"Action": "sts:AssumeRole"
}
]
}
- アカウントIDの確認
- アクセス許可の確認
4. KMSキーのアクセス制限
エラーメッセージ例
KMS AccessDeniedException: User: arn:aws:iam::123456789012:user/username
is not authorized to perform: kms:Decrypt on resource:
arn:aws:kms:region:123456789012:key/key-id
よくある原因
- KMSキーポリシーの不足
- IAMポリシーの権限不足
- 暗号化コンテキストの不一致
- キーの使用権限の欠如
解決手順
- KMSキーポリシーの確認と設定
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/username"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey",
"kms:DescribeKey"
],
"Resource": "*"
}
]
}
- 暗号化コンテキストの確認
# 暗号化時のコンテキスト
encryption_context = {
'AppName': 'MyApp',
'Environment': 'Production'
}
# 復号時は同じコンテキストが必要
decryption_context = {
'AppName': 'MyApp',
'Environment': 'Production'
}
- 必要な権限の確認チェックリスト
- kms:Decrypt - データの復号化
- kms:GenerateDataKey - データキーの生成
- kms:DescribeKey - キー情報の取得
- kms:CreateGrant - 権限の委譲(必要な場合)
5. リソースベースのポリシー競合
エラーメッセージ例
User is not authorized to perform: s3:PutObject on resource due to an explicit deny
解決手順
- ポリシー評価の優先順位を理解する
- 明示的なDenyが最優先
- 次にリソースポリシーのDeny
- 最後にAllow
- バケットポリシーの確認
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/service-role"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
- IAMポリシーとの競合確認
📋 トラブルシューティングのベストプラクティス
- エラーメッセージの詳細確認
- サービス名
- アクション名
- リソースARN
- エラーコード
- 権限の段階的な確認
- IAMポリシー
- リソースポリシー
- 暗黙的な拒否
- 最小権限の原則の遵守
- 必要最小限の権限を付与
- 定期的な権限の見直し
- 未使用の権限の削除
🎉 まとめ
基本的なAccess Deniedエラーの解決には、以下の点が重要です:
- エラーメッセージの正確な理解
- ポリシー評価の仕組みの把握
- 段階的なトラブルシューティング
- 適切な権限設定の実施
次回は、組織レベルのAccess Denied対策として、SCPやパーミッションバウンダリーなどについて解説する予定です!
Discussion