AWS Identity and Access Management
ユーザーガイド

AWS JSON ポリシーの要素:Principal

リソースへのアクセスが許可されない、または拒否される IAM ユーザー、フェデレーティッドユーザー、IAM ロール、AWS アカウント、AWS サービス、またはその他のプリンシパルエンティティを指定するには、Principal エレメントを使用します。Principal エレメントを IAM アイデンティティベースのポリシーで使用することはできません。これは、IAM ロール用の信頼ポリシーおよびリソースベースのポリシーで使用することができます。リソースベースのポリシーは、IAM リソースに直接埋め込むポリシーです。たとえば、Amazon S3 バケットあるいは AWS KMS カスタマーマスターキー (CMK) にポリシーを埋め込むことができます。

Principal エレメントは次のように使用します。

  • IAM ロールでは、ロールの信頼ポリシー内の Principal 要素を使用して、だれがこのロールを引き受けることができるかを指定します。クロスアカウントアクセスとして、信頼されたアカウントの 12 桁の ID を指定する必要があります。

    注記

    ロールを作成した後、アカウントを「*」に変更すると、誰もがそのロールを引き受けることができます。これを行う場合は、アクセスを特定の IP アドレスのみに制限する Condition エレメントなど、他の方法でロールへのアクセスを制限することを強くお勧めします。誰でもロールにアクセスできる状態のままにしないでください。

  • リソースベースのポリシーでは、Principal エレメントを使用して、リソースへのアクセスが許可されるアカウントまたはユーザーを指定します。

IAM ユーザーおよびグループにアタッチするポリシーで Principal 要素は使用しないでください。同様に、IAM ロールのアクセス許可ポリシー内ではプリンシパルを指定しないでください。このような場合、プリンシパルは、暗黙的に、ポリシーがアタッチされたユーザーとなるか (IAM ユーザーの場合)、ロールを引き受けるユーザーとなります (ロールアクセスポリシーの場合)。ポリシーが IAM グループにアタッチされている場合、そのグループ内のリクエスト元 IAM ユーザーがプリンシパルです。

プリンシパルの指定

プリンシパルは、AWS アカウント、IAM ユーザー、IAM ロール、フェデレーティッドユーザー、または引き受けたロールユーザーの Amazon リソースネーム (ARN) を使用して指定します。IAM グループやインスタンスプロファイルをプリンシパルとして指定することはできません。

以下の例は、プリンシパルを指定する際に使用できるいくつかの方法を示しています。

特定の AWS アカウント

ポリシー内のプリンシパルとして AWS アカウント ID を使用する場合、そのアカウントに含まれるすべての ID に、ポリシーステートメント内でアクセス許可を付与できます。そのアカウントには、IAM ユーザーおよびロールが含まれます。AWS アカウントを指定するときは、アカウント ARN (arn:aws:iam::AWS-account-ID:root)、または AWS: プレフィックスの後に ID を付けた短縮形を使用できます。

たとえば、割り当てられた アカウント ID (123456789012) から、次のいずれかのメソッドを使用して、Principal 要素でそのアカウントを指定できます。

"Principal": { "AWS": "arn:aws:iam::123456789012:root" }
"Principal": { "AWS": "123456789012" }

また、配列を使用して、前述のメソッドの任意の組み合わせで、プリンシパルとして複数の AWS アカウントを指定することもできます。

"Principal": { "AWS": [ "arn:aws:iam::123456789012:root", "999999999999" ] }

個別の IAM ユーザー

次の例に示されているように、個別の IAM ユーザー (または一連のユーザー) をプリンシパルとして指定することができます。

注記

Principal エレメントでは、ユーザー名の大文字と小文字が区別されます。

"Principal": { "AWS": "arn:aws:iam::AWS-account-ID:user/user-name" }
"Principal": { "AWS": [ "arn:aws:iam::AWS-account-ID:user/user-name-1", "arn:aws:iam::AWS-account-ID:user/UserName2" ] }

Principal エレメント内でユーザーを指定する際に、"すべてのユーザー" の意味でワイルドカード (*) を使用することはできません。プリンシパルには、常に特定のユーザー(または複数の特定ユーザー)を指定する必要があります。

重要

ロールの信頼ポリシーの Principal 要素に、特定の IAM ユーザーを指し示す ARN が含まれている場合、その ARN はポリシーを保存するときにユーザーの一意のプリンシパル ID に変換されます。これにより、ユーザーを削除して再作成することにより、誰かがそのユーザーの特権をエスカレートするリスクを緩和できます。通常、この ID はコンソールには表示されません。これは、信頼ポリシーが表示されるときに、ユーザーの ARN への逆変換が行われるためです。ただし、ユーザーを削除すると、関係が壊れます。ユーザーを再作成しても、ポリシーが適用されることはありません。これは、新しいユーザーには、信頼ポリシーに保存されている ID と一致しない新しいプリンシパル ID が付与されるためです。この場合、プリンシパル ID はコンソールに表示されます。これは、AWS が有効な ARN に ID をマッピングできなくなるためです。その結果、信頼ポリシーの Principal エレメントで参照されているユーザーを削除して再作成する場合は、ロールを編集して、正しくなくなったプリンシパル ID を正しい ARN に置き換える必要があります。ポリシーを保存するときに、ARN は再びユーザーの新しいプリンシパル ID に変換されます。

フェデレーティッドユーザー (ウェブ ID フェデレーションを使用)

"Principal": { "Federated": "cognito-identity.amazonaws.com" }
"Principal": { "Federated": "www.amazon.com" }
"Principal": { "Federated": "graph.facebook.com" }
"Principal": { "Federated": "accounts.google.com" }

フェデレーティッドユーザー (SAML ID プロバイダーを使用)

"Principal": { "Federated": "arn:aws:iam::AWS-account-ID:saml-provider/provider-name" }

IAM ロール

"Principal": { "AWS": "arn:aws:iam::AWS-account-ID:role/role-name" }

重要

ロールの Principal 要素に、特定の IAM ロールを指し示す ARN が含まれている場合、その ARN はポリシーを保存するときにロールの一意のプリンシパル ID に変換されます。これにより、ロールを削除して再作成することにより、誰かがそのユーザーの特権をエスカレートするリスクを緩和できます。通常、この ID はコンソールには表示されません。これは、信頼ポリシーが表示されるときに、ロールの ARN への逆変換が行われるためです。ただし、ロールを削除すると、関係が壊れます。ロールを再作成した場合でも、ポリシーは適用されません。これは、新しいロールは信頼ポリシーに保存されている ID と一致しない新しいプリンシパル ID を持っているためです。この場合、プリンシパル ID はコンソールに表示されます。これは、AWS が有効な ARN に ID をマッピングできなくなるためです。その結果、信頼ポリシーの Principal エレメントで参照されているロールを削除して再作成する場合は、ロールを編集して正しくなくなったプリンシパル ID を正しい ARN に置き換える必要があります。ポリシーを保存するときに、ARN は再びロールの新しいプリンシパル ID に変換されます。

特定の引き受けたロールユーザー

"Principal": { "AWS": "arn:aws:sts::AWS-account-ID:assumed-role/role-name/role-session-name" }

AWS サービス

AWS のサービスが引き受けることのできる IAM ロールは、サービスロールと呼ばれます。サービスロールには信頼ポリシーを含める必要があります。信頼ポリシー は、どのプリンシパルがそのロールを果たすことができるかを定義するロールにアタッチされるリソースベースのポリシーです。一部のサービスロールには事前定義済みの信頼ポリシーがあります。ただし、状況によっては、信頼ポリシーでプリンシパルサービスを指定する必要があります。サービスプリンシパルは、サービスにアクセス許可を付与するために使用される識別子です。この識別子には、長いバージョンのサービス名が含まれ、通常は次の形式になります。

long_service-name.amazonaws.com

サービスプリンシパルはサービスによって定義されます。サービスのサービスプリンシパルについては、そのサービスのドキュメントを参照してください。一部のサービスについては、「IAM と連携する AWS のサービス」を参照してください。これらのサービスでは、「サービスにリンクされたロール」列が「はい」になっています。サービスにリンクされたロールに関するドキュメントをサービスで表示するには、[はい] リンクを選択します。サービスのプリンシパルを表示するには、そのサービスの [Service-Linked Role Permissions (サービスにリンクされたロールのアクセス許可)] を表示します。

次の例では、サービスロールにアタッチできるポリシーを示します。ポリシーは、Amazon EMR および AWS Data Pipeline の 2 つのサービスを有効にして、ロールを引き受けます。これらのサービスは、ロールに割り当てられた権限ポリシー (表示されていない) によって付与されたタスクを実行できます。複数のサービスプリンシパルを指定する場合に、2 つの Service エレメントは指定できません。1 つのみ指定できます。代わりに、1 つの Service エレメントの値として複数のサービスのプリンシパルのアレイを使用します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "elasticmapreduce.amazonaws.com", "datapipeline.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

一部の AWS サービスでは、プリンシパルを指定するための追加オプションがサポートされています。たとえば、Amazon S3 では、以下の形式を使用して正規ユーザー ID を指定できます。

"Principal": { "CanonicalUser": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be" }

すべてのユーザー (匿名ユーザー)

以下が同等 :

"Principal": "*"
"Principal" : { "AWS" : "*" }

注記

これらの例では、アスタリスク (*) はすべてのユーザー/匿名ユーザーのプレースホルダーとして使用されます。これをワイルドカードとして使用して、名前または ARN の一部に一致させることはできません。また、ポリシー内で Principal エレメントを使用してアクセスを制限する場合を除き、ロールの信頼ポリシーの Condition エレメントにワイルドカードを使用しないことを強くお勧めします。そうしないと、すべてのアカウントの IAM ユーザーがロールにアクセスできてしまいます。

詳細情報

詳細については、以下を参照してください。

このページの内容: