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) を使用する方法を教えてください。
AWS IAM を使用して別の AWS アカウントのリソースにアクセスする方法を教えてください。
IAM リソースベースのポリシーに不明なプリンシパルフォーマットがあるのはなぜですか?