Amazon Simple Storage Service (Amazon S3) コンソールを使用して Amazon S3 バケットのバケットポリシーを追加または編集しようとしているのですが、 次のエラーが表示されます:「Error: Invalid principal in policy.」
解決策
次のメッセージが表示されます: 「Error: Invalid principal in policy」(バケットポリシーのプリンシパルの値が無効な場合)。このエラーを解決するには、以下をチェックしてください。
- バケットポリシーが Principal 要素に、サポートされている値を使用していること。
- Principal 要素が正しくフォーマットされていること。
- Principal が AWS Identity and Access Management (IAM) のユーザーまたはロールの場合は、そのユーザーまたはロールが削除されていないこと。
バケットポリシーが Principal 要素に、サポートされている値を使用していること
バケットポリシーの Principal 要素を確認します。Principal 要素が、サポートされている次の値のいずれかを使用しているかどうかを確認します。
警告: "Action:" "Allow" と共に使用すると、 "*" Principal 要素は、認証されたユーザーと匿名ユーザーの全ユーザーにアクセス権を付与します。この組み合わせをバケットポリシーで使用する前に、コンテンツがこのレベルのアクセスをサポートしていることを確認してください。
Principal 要素の値が正しくフォーマットされていること
ポリシーの Principal 要素を確認し、正しくフォーマットされていることを確認します。1 人のユーザーのみが含まれる Principal 要素は、次の形式にする必要があります。
"Principal": {
"AWS": "arn:aws:iam::111111111111:user/user-name1"
}
Principal 要素に複数のユーザーを指定する場合は、"*" を使用してすべてのユーザーを指定することはできません。Principal 要素に含めることができるのは特定のユーザーのみだからです。
複数の IAM ユーザーまたは IAM ロールを指定する Principal 要素は、次の形式にする必要があります。
"Principal": {
"AWS": [
"arn:aws:iam::111111111111:user/user-name1",
"arn:aws:iam::111111111111:role/role-name1"
]
}
任意のユーザーにする Principal 要素は、次の形式である必要があります。
{
"Principal": "*"
}
リソースベースのポリシーの Principal 要素では、Allow 効果とワイルドカード (*) を併用しないことをおすすめします。ワイルドカードは、パブリックアクセスまたは匿名アクセスを許可する場合にのみ使用してください。Principal 要素内に、目的のプリンシパル、サービス、または AWS アカウントを指定します。次に、Condition 要素を使用してアクセスを制限します。これは特に IAM ロールの信頼ポリシーに当てはまります。これらのポリシーでは、他のプリンシパルがアカウントのプリンシパルになることを許可しているからです。
IAM ユーザーまたはロールが削除されていないこと
バケットポリシーの Principal 要素に IAM ユーザーまたはロールが含まれている場合は、それらの IAM ID が削除されていないことを確認します。Principal 要素には、完全な ARN ではなく、必ず一意の識別子を指定してください。これは、現在のバケットポリシーから削除された IAM ユーザーとロールを特定するのに役立つためです。
例:
"Principal": {
"AWS": [
"arn:aws:iam::111111111111:user/user-name1",
"AIDAJQABLZS4A3QDU576Q",
"arn:aws:iam::111111111111:user/user-name2"
]
}
一意の識別子を Principal 要素として使用してバケットポリシーを保存しようとすると、「Invalid principal in policy」というエラーが表示されます。これは、Principal 要素が有効な IAM ARN のみをサポートしているためです。このエラーを解決するには、Principal 要素から一意の識別子をすべて削除する必要があります。
IAM プリンシパルのアカウントに、有効になっている AWS リージョンがないこと
S3 バケットがデフォルトで有効にならない AWS リージョンにある場合は、IAM プリンシパルのアカウントでそのリージョンが有効になることを確認します。詳細については、「AWS リージョンの管理」を参照してください。
関連情報
AWS Policy Generator
AWS JSON ポリシー要素: Principal