IAM 信頼ポリシーエラー「信頼ポリシーの更新に失敗しました」を解決するにはどうすればよいですか。ポリシーのプリンシパルが無効ですとは?

所要時間2分
0

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 リソースベースのポリシーに不明なプリンシパルフォーマットがあるのはなぜですか?

コメントはありません

関連するコンテンツ