一般的な IAM の問題のトラブルシューティング
この情報を使用して、AWS Identity and Access Management (IAM) を使用する際のアクセス拒否などの一般的な問題の診断と修正を行います。
問題点
自分の AWS アカウントにサインインできません
正しい認証情報を持っていること、およびサインインに正しい方法を使用していることを確認します。詳細については、「AWS サインインまたはアカウントの問題をトラブルシューティングする」を参照してください。
アクセスキーを紛失した
アクセスキーは 2 つのパートで構成されます。
-
アクセスキー識別子。これはシークレットではなく、ユーザー概要ページなど、IAM コンソールでアクセスキーがリストされるすべての場所に表示されます。
-
シークレットアクセスキー。これは最初にアクセスキーペアを作成するときに提供されます。パスワードと同じように、後で取得することはできません。シークレットアクセスキーを紛失した場合は、新しいアクセスキーペアを作成する必要があります。アクセスキーの最大数に達している場合は、既存のペアを削除してから新しいものを作成する必要があります。
詳細については、「紛失したり忘れたりしたパスワードまたは AWS のアクセスキーのリセット」を参照してください。
AWS サービスに要求を送信すると "アクセス拒否" が発生する
-
エラーメッセージに、アクセスを拒否するポリシーの種類が含まれているかどうかを確認します。たとえば、サービス制御ポリシー (SCP) によりアクセスが拒否されたというエラーが表示された場合は、SCP の問題のトラブルシューティングに集中できます。ポリシータイプがわかっている場合は、そのポリシータイプのポリシーの特定のアクションに対する拒否ステートメントまたは不足している許可をチェックすることもできます。詳細については、「アクセス拒否エラーメッセージのトラブルシューティング」を参照してください。エラーメッセージに、アクセスを拒否するポリシーの種類が記載されていない場合は、このセクションの残りのガイドラインを参考にして、さらにトラブルシューティングを行ってください。
-
リクエストしたアクションとリソースを呼び出すアイデンティティベースのポリシーのアクセス許可を持っていることを確認します。条件が付けられている場合、要求を送信するにはそれらの条件も満たしている必要があります。IAM ユーザー、グループ、ロールのポリシーの表示や修正の詳細については、「IAM ポリシーを管理する」を参照してください。
-
AWS Management Console から、アクションを実行する権限がないと通知された場合、管理者に問い合わせ、サポートを依頼する必要があります。管理者からサインイン資格情報またはサインインリンクが提供されました。
以下のエラー例は、
mateojackson
IAM ユーザーがコンソールを使用して架空の
リソースに関する詳細情報を表示しようとしているが、架空のmy-example-widget
widgets:
許可がないという場合に発生します。GetWidget
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: widgets:
GetWidget
on resource:my-example-widget
この場合、Mateo は、
アクションを使用してmy-example-widget
widgets:
リソースにアクセスできるように、ポリシーの更新を管理者に依頼する必要があります。GetWidget
-
Amazon S3、Amazon SNS、Amazon SQS などのリソースベースのポリシーをサポートするサービスにアクセスしようとしていますか。その場合は、ポリシーでお客様がプリンシパルに指定されていて、アクセス権限を付与されていることを確認します。アカウント内のサービスにリクエストする場合は、アイデンティティベースのポリシーまたはリソースベースのポリシーを使用して、アクセス許可を付与することができます。別のアカウントのサービスにリクエストする場合は、アイデンティティベースのポリシーとリソースベースのポリシーの両方でアクセス許可を付与する必要があります。リソースベースのポリシーをサポートするサービスを確認するには、「IAM と連携する AWS のサービス」を参照してください。
-
キーバリューのペアを持つ条件がポリシーに含まれている場合は、そのポリシーを慎重に確認します。この例には、aws:RequestTag/tag-key グローバル条件キー、AWS KMS
kms:EncryptionContext:
、および複数のサービスでサポートされているencryption_context_key
ResourceTag/
条件キーが含まれます。キー名が複数の結果に一致しないことを確認します。条件キー名では大文字と小文字が区別されないため、tag-key
foo
というキーを確認する条件は、foo
、Foo
、またはFOO
に一致します。リクエストに複数のキーバリューのペアが含まれていて、キー名の大文字と小文字のみが異なる場合、アクセスは予期せず拒否される可能性があります。詳細については、「IAM JSON ポリシー要素: Condition」を参照してください。 -
アクセス許可の境界が設定されている場合は、アクセス許可の境界として使用されているポリシーでリクエストが許可されるかどうかを確認します。リクエストがアイデンティティベースのポリシーでは許可されるが、アクセス許可の境界では許可されない場合、リクエストは拒否されます。アクセス許可の境界は、IAM プリンシパル (ユーザーまたはロール) に付与できるアクセス許可の上限を設定します。リソースベースのポリシーは、アクセス許可の境界では制限されません。アクセス許可の境界は一般向けの機能ではありません。AWS によるポリシーの評価方法の詳細については、「ポリシーの評価論理」を参照してください。
一時的な認証情報を使用して要求を送信すると "アクセス拒否" が発生する
-
まず、一時的な認証情報とは別の理由でアクセスが拒否されていないことを確認してください。詳細については、「AWS サービスに要求を送信すると "アクセス拒否" が発生する」を参照してください。
-
サービスが一時的セキュリティ認証情報を受け入れることを確認します。「IAM と連携する AWS のサービス」を参照してください。
-
リクエストが正しく署名されており、そのリクエストの形式が整っていることを確認します。詳細については、ツールキット
ドキュメントまたは「AWS リソースを使用した一時的な認証情報の使用」を参照してください。 -
一時的な認証情報が失効していないことを確認します。詳細については、「IAM の一時的な認証情報」を参照してください。
-
IAM ユーザーまたはロールに正しいアクセス権限があるかどうかを確認します。一時的なセキュリティ認証情報のアクセス許可は IAM ユーザーまたはロールから取得されます。その結果、アクセス許可は、一時的な認証情報を引き受けたロールに付与されているものに制限されます。一時的なセキュリティ認証情報に対するアクセス許可の決定方法の詳細については、「一時的なセキュリティ認証情報のアクセス権限を制御する」を参照してください。
-
ロールを引き受ける場合は、ロールセッションはセッションポリシーによって制限される場合があります。AWS STS を使用してプログラムで一時的なセキュリティ認証情報をリクエストする場合は、オプションでインラインまたは管理セッションポリシーを渡すことができます。セッションポリシーは、ロールの一時認証情報セッションをプログラムで作成する際にパラメータとして渡す高度なポリシーです。
Policy
パラメータを使用して単一の JSON インラインセッションポリシードキュメントを渡すことができます。PolicyArns
パラメータを使用して、最大 10 個の管理セッションポリシーを指定できます。結果として得られるセッションのアクセス許可は、ロールの ID ベースのポリシーとセッションポリシーの共通部分です。または、管理者またはカスタムプログラムから一時的な認証情報が提供されている場合は、アクセスを制限するためのセッションポリシーが含まれている可能性があります。 -
フェデレーティッドユーザーの場合は、セッションはセッションポリシーによって制限される場合があります。AWS に IAM ユーザーとしてサインインしてフェデレーショントークンをリクエストすることでフェデレーティッドユーザーになります。フェデレーティッドユーザーの詳細については、「GetFederationToken — カスタム ID ブローカーを介したフェデレーション」を参照してください。フェデレーショントークンをリクエスト中に ID ブローカーがセッションポリシーに合格した場合、セッションはそれらのポリシーによって制限されます。結果として得られるセッションのアクセス許可は、IAM ユーザーの ID ベースのポリシーとセッションポリシーの共通部分です。セッションポリシーの詳細については、「セッションポリシー」を参照してください。
-
ロールを使用してリソースベースのポリシーのあるリソースへアクセスする場合は、ポリシーからロールにアクセス権限が付与されていることを確認します。たとえば、次のポリシーではアカウント
MyRole
からの111122223333
のMyBucket
へのアクセスを許可しています。{ "Version": "2012-10-17", "Statement": [{ "Sid": "S3BucketPolicy", "Effect": "Allow", "Principal": {"AWS": ["arn:aws:iam::111122223333:role/MyRole"]}, "Action": ["s3:PutObject"], "Resource": ["arn:aws:s3:::MyBucket/*"] }] }
ポリシーの変数が機能していない
-
変数のあるすべてのポリシーで、バージョン番号:
"Version": "2012-10-17"
がポリシーに含まれていることを確認します。正しいバージョン番号がないと、評価時に変数は置き換えられません。代わりに、変数は逐語的に評価されます。変数の含まれていないポリシーは、最新のバージョン番号が含まれていれば正常に機能します。Version
ポリシー要素は、ポリシーバージョンとは異なります。Version
ポリシー要素は、ポリシー内で使用され、ポリシー言語のバージョンを定義します。一方で、ポリシーバージョンは、IAM でカスタマー管理ポリシーを変更すると作成されます。変更されたポリシーによって既存のポリシーが上書きされることはありません。代わりに、IAM は管理ポリシーの新しいバージョンを作成します。Version
ポリシー要素の詳細については、「IAM JSON ポリシー要素: Version」を参照してください。ポリシーのバージョンの詳細については、「IAM ポリシーのバージョニング」を参照してください。 -
お客様のポリシーの変数が正しく設定されていることを確認してください。詳細については、「」を参照してくださいIAM ポリシーの要素: 変数とタグ
行った変更がすぐに表示されないことがある
世界中のデータセンター内のコンピューターを介してアクセスされるサービスとして、IAM は、結果整合性
発生する可能性のあるこれらの遅延を考慮して、グローバルなアプリケーションを設計する必要があります。ある場所で行われた変更が他の場所で直ちに表示されない場合でも、正常に動作することを確認します。このような変更には、ユーザー、グループ、ロール、またはポリシーの作成や更新が含まれます。アプリケーションの重要で高可用性のコードパスには、このような IAM の変更を含めないことをお勧めします。代わりに、実行頻度が低い別の初期化またはセットアップルーチンに IAM の変更を加えます。また、本番稼働ワークフローが依存する前に、変更が伝達済みであることを確認します。
AWS の他のいくつかのサービスがこの遅延からどのような影響を受けるかの詳細については、以下のリソースを参照してください。
-
Amazon DynamoDB: DynamoDB のよくある質問の「Amazon DynamoDB の整合性モデルとは何ですか?
」および Amazon DynamoDB デベロッパーガイドの「読み込み整合性」。 -
Amazon EC2: Amazon EC2 API リファレンスの EC2 結果整合性。
-
Amazon EMR: AWS ビッグデータブログの「ETL ワークフローに Amazon S3 および Amazon Elastic MapReduce を使用する場合の整合性の確保
」 -
Amazon Redshift: Amazon Redshift Database デベロッパーガイドの データの一貫性の管理
-
Amazon S3: Amazon Simple Storage Service ユーザーガイドの Amazon S3 データ整合性モデル
iam:DeleteVirtualMFADevice を実行する権限がありません
自分または他のユーザーに仮想 MFA デバイスを割り当てるまたは削除しようとすると、次のエラーが表示されることがあります。
User: arn:aws:iam::123456789012:user/Diego is not authorized to perform: iam:DeleteVirtualMFADevice on resource: arn:aws:iam::123456789012:mfa/Diego with an explicit deny
これは、誰かが以前に IAM コンソールでユーザーに仮想 MFA デバイスの割り当てを開始し、プロセスをキャンセルした場合に発生する可能性があります。これにより、IAM のユーザーの MFA デバイスが作成されますが、アクティブ化されることはありません。新しいデバイスをユーザーに関連付ける前に、既存の MFA デバイスを削除する必要があります。
AWS では、MFA を使用して認証された場合にのみ、ユーザーが自分の仮想 MFA デバイスを削除できるようにするポリシーを推奨しています。詳細については、「AWS: MFA で認証された IAM ユーザーが [My Security Credentials] (マイセキュリティ資格情報) ページで自分の認証情報を管理できるようにする」を参照してください。
この問題を修正するために、管理者はポリシーのアクセス許可を編集しないでください。代わりに、管理者は AWS CLI または AWS API を使用して、既存の非アクティブ化されたデバイスを削除する必要があります。
既存の非アクティブ化された MFA デバイスを削除するには
-
アカウントの仮想 MFA デバイスを表示します。
-
AWS CLI:
aws iam list-virtual-mfa-devices
-
AWS API:
ListVirtualMFADevices
-
-
レスポンスで、修正しようとしているユーザーの仮想デバイスの ARN を見つけます。
-
デバイスを削除します。
-
AWS CLI:
aws iam delete-virtual-mfa-device
-
AWS API:
DeleteVirtualMFADevice
-
IAM ユーザーを安全に作成するにはどうすればよいですか?
AWS へのアクセスを必要とする従業員がいる場合は、IAM ユーザーを作成するか、認証に IAM Identity Center を使用するかを選択できます。IAM を使用する場合、AWS では、IAM ユーザーを作成し、その認証情報を従業員に安全に伝達することを推奨しています。従業員の隣に物理的に配置されていない場合は、安全なワークフローを使用して、従業員に認証情報を伝達します。
IAM で新しいユーザーを安全に作成するには、次のワークフローを使用します。
-
AWS Management Console を使用して新しいユーザーを作成します。自動生成されたパスワードを使用して AWS Management Console アクセス権を付与することを選択します。必要に応じて、[Users must create a new password at next sign-in] (ユーザーは次回サインイン時に新しいパスワードを作成する必要があります) のチェックボックスをオンにします。ユーザーがパスワードを変更するまで、アクセス許可ポリシーをユーザーに追加しないでください。
-
ユーザーを追加したら、新しいユーザーのサインイン URL、ユーザー名、およびパスワードをコピーします。パスワードを表示するには、[Show] (表示) を選択します。
-
E メール、チャット、チケットシステムなど、社内の安全な通信方法を使用して、従業員にパスワードを送信します。別途、IAM ユーザーコンソールのリンクおよびユーザー名をユーザーに提供します。アクセス許可を付与する前に、正常にサインインできることを確認するよう従業員に伝えます。
-
従業員が確認したら、必要なアクセス許可を追加します。セキュリティのベストプラクティスとして、認証情報を管理するために MFA を使用した認証をユーザーに要求するポリシーを追加します。ポリシーの例については、「AWS: MFA で認証された IAM ユーザーが [My Security Credentials] (マイセキュリティ資格情報) ページで自分の認証情報を管理できるようにする」を参照してください。
その他のリソース
AWS を使用する際のトラブルシューティングに役立つリソースを以下に示します。
-
AWS CloudTrail ユーザーガイドユーザーガイド – AWS CloudTrail を使用して、AWS への API コールの履歴を追跡し、その情報をログファイルに保存します。この情報は、どのユーザーおよびアカウントがお客様のアカウントのリソースにアクセスしたか、いつその呼び出しが行われたか、どのアクションがリクエストされたかなどを調べるために役立ちます。詳細については、「AWS CloudTrail による IAM および AWS STS の API コールのログ記録」を参照してください。
-
AWS ナレッジセンター
— 問題のトラブルシューティングに役立つ FAQ やその他のリソースへのリンクを検索できます。 -
AWS サポートセンター
— テクニカルサポートを利用できます。 -
AWS プレミアムサポートセンター
– プレミアムテクニカルサポートを利用できます。