IAM 信頼ポリシーエラー「信頼ポリシーの更新に失敗しました」を解決するにはどうすればよいですか。ポリシーのプリンシパルが無効ですとは?
AWS マネジメントコンソールを使用して AWS Identity and Access Management (IAM) ロールの信頼ポリシーを編集しようとすると「信頼ポリシーの更新に失敗しました。ポリシーのプリンシパルが無効です」というエラーが表示されます。
簡単な説明
このエラーメッセージは、IAM 信頼ポリシーの プリンシパル 要素の値が無効であることを示しています。このエラーを解決するには、次の点を確認します。
- IAM ロール信頼ポリシーは、プリンシパル要素に対して正しいフォーマットでサポートされている値を使用します。
- IAM ロール信頼ポリシーが IAM ID (ユーザー、ユーザーグループ、およびロール) をプリンシパルとして使用する場合は、ユーザーまたはロールが削除されていないことを確認してください。
注意: 標準の AWS アカウントが AWS GovCloud (米国) アカウント番号を追加しようとすると、AWS GovCloud (米国) アカウントにもこのエラーが表示されることがあります。AWS GovCloud (米国) アカウントと標準の AWS アカウント間でアクセスを委任するロールを作成することはできません。詳細については、AWS GovCloud (米国) の IAM の違いをご覧ください。
解決方法
プリンシパル要素でサポートされている値を確認します
ロールの IAM 信頼ポリシーのプリンシパル要素には、次のサポートされている値が含まれている必要があります。
1. IAM ポリシーに次のような正しい AWS 12 桁の AWS アカウント ID が含まれていることを確認します。
"Principal": { "AWS": "123456789012" }
**注:**AWS アカウントは、ルートユーザーの Amazon リソースネーム (ARN) を使用して指定することもできます。たとえば、arn:aws:iam::123456789012:root と入力します。
2. IAM 信頼ポリシープリンシパルが IAM ユーザー、ロール、またはフェデレーションユーザーである場合、ARN 全体を次のように指定する必要があります。
"Principal": { "AWS": [ "arn:aws:iam::123456789012:user/user-name", "arn:aws:iam::123456789012:role/role-name", "arn:aws:sts::123456789012:assumed-role/role-name/role-session-name", "arn:aws:sts::123456789012:federated-user/user-name" ] }
3. IAM 信頼ポリシーにワイルドカードが含まれている場合は、次のガイドラインに従ってください。
注意: ワイルドカード「*」を使用してプリンシパル名または ARN の一部に一致させることはできません。
次の例では、IAM 信頼ポリシーでワイルドカードが誤って使用されています。
"Principal": { "AWS": "arn:aws:iam::123456789012:user/user-*" }
ワイルドカードを使用してプリンシパル名の一部を照合するには、グローバルコンディションキー aws:PrincipalArn を使用して条件要素を使用し、ワイルドカードを使用してARNを指定します。 次に、ワイルドカードで ARN を指定します。
すべての AWS アカウントから ID を指定するには、次のようなワイルドカードを使用します。
"Principal": { "AWS": "*" }
重要: 信頼ポリシーで許可効果を持つプリンシパル要素でワイルドカードを使用できます。ただし、これにより、同じ パーティション 内の任意の AWS アカウントのすべての IAM ユーザー、引き受けたロールセッション、またはフェデレーションユーザーがロールにアクセスできます。AWS アカウント内の IAM ユーザーおよびロールプリンシパルの場合、他の許可は必要ありません。他の AWS アカウントのプリンシパルの場合、IAM ロールを引き受けるには、ID ベースの許可が必要です。
この方法では、Web アイデンティティセッションプリンシパル、SAML セッションプリンシパル、またはサービスプリンシパルがリソースにアクセスすることはできません。
ベストプラクティスとして、このメソッドは、条件要素と aws:PrincipalArn などの条件キーでのみ使用して、権限の制限をしてください。たとえば、ファイルは次のようになります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:PrincipalArn": "arn:aws:iam::123456789012:user/user-*" } } } ] }
この信頼ポリシーの例では、aws:PrincipalArn 条件キーを使用して、一致するユーザー名を持つユーザーのみが IAM ロールを引き受けることを許可しています。
4. IAM ロールが AWS サービスロールである場合、サービスプリンシパル全体を次のように指定する必要があります。
"Principal": { "Service": "ec2.amazonaws.com" }
5. 外部 SAML アイデンティティプロバイダーで SAML セッションプリンシパルを使用して、IAM ユーザーを認証できます。IAM ロールの信頼ポリシーには、次のようなプリンシパル要素が必要です。
"Principal": { "Federated": "arn:aws:iam::123456789012:saml-provider/provider-name" }
6. Web アイデンティティセッションプリンシパル を使用して、IAM ユーザーを認証できます。アクセスを提供する IAM ロールの信頼ポリシーには、次のようなプリンシパル要素が必要です。
"Principal": { "Federated": "cognito-identity.amazonaws.com" }
7. 1 つのステートメント内で異なるプリンシパルタイプを使用する場合は、次のように IAM 信頼ポリシーをフォーマットします。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/user-name", "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
IAM ユーザーまたはロールは既存のアイデンティティである必要があります
IAM ロール信頼ポリシーが IAM ユーザーまたはロールをプリンシパルとして使用する場合は、それらの IAM アイデンティティが削除されていないことを確認してください。「ポリシー内の無効なプリンシパル」エラーは、IAM 信頼ポリシーを変更し、プリンシパルが削除された場合に発生します。
**注:**プリンシパルが削除された場合は、ARN ではなく、IAM 信頼ポリシーでプリンシパルの 一意の ID をメモします。
関連情報
リソースへのユーザーアクセスを許可するために AWS Identity and Access Management (IAM) を使用する方法を教えてください。

関連するコンテンツ
- 質問済み 6年前lg...
- 質問済み 3年前lg...
- 質問済み 4ヶ月前lg...
- 質問済み 3年前lg...
- 質問済み 3年前lg...
- AWS公式更新しました 1年前
- AWS公式更新しました 1年前
- AWS公式更新しました 1年前