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

IAM の条件コンテキストキー

IAM の JSON ポリシーの Condition 要素を使用して、すべての AWS API リクエストの評価コンテキストに含まれるキーの値をテストできます。これらのキーは、リクエスト自体、またはリクエストが参照するリソースに関する情報を示します。ユーザーが要求したアクションを許可する前に、キーが指定された値を持っているかどうかを確認できます。これにより、JSON ポリシーステートメントが着信 API リクエストと照合するとき、しないときを細かく制御できます。JSON ポリシーで Condition 要素を使用する方法の詳細については、「IAM JSON ポリシーエレメント: Condition」を参照してください。

このトピックでは、IAM サービスで定義および提供されているキー (iam: プレフィックス付き) について説明します。他のいくつかの AWS サービスは、そのサービスによって定義されたアクションおよびリソースに関連するサービス固有のキーも提供します。詳細については、「」を参照してください。条件キーをサポートするサービスのドキュメントには、追加情報がある場合があります。Amazon S3 リソース用ポリシーで使用できるキーについては、Amazon Simple Storage Service 開発者ガイド の「Amazon S3 Policy Keys」を参照してください。

IAM に利用可能なキー

IAM リソースへのアクセスを制御するポリシーで以下の条件キーを使用できます。

iam:AWSServiceName

文字列演算子で動作します。

このロールがアタッチされる AWS のサービスを指定します。

iam:PassedToService

文字列演算子で動作します。

ロールを渡すことができるサービスのサービスプリンシパルを指定します。サービスプリンシパルは、ポリシーの Principal 要素で指定できるサービスの名前です。通常の形式は、SERVICE_NAME_URL.amazonaws.com です。iam:PassedToService 条件キーで、ロールを引き受けるサービスのサービスプリンシパルを指定します。

特定のサービスにのみロールを渡すことができるようにユーザーを制限するには、iam:PassedToService を使用します。たとえば、ユーザーは、代理で Amazon S3 バケットにログデータを書き込むために CloudWatch を信頼するサービスロールを作成する場合があります。次に、ユーザーは新しいサービスロールにアクセス許可ポリシーと信頼ポリシーをアタッチする必要があります。この場合、信頼ポリシーで、Principal 要素の cloudwatch.amazonaws.com を指定する必要があります。ユーザーがロールを CloudWatch に渡すことができるように、次のポリシーをアタッチします。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": {"StringEquals": {"iam:PassedToService": "cloudwatch.amazonaws.com"}} } ] }

この条件キーを使用することで、ユーザーは、指定したサービスにのみ、サービスロールを作成することができます。たとえば、前述のポリシーを持つユーザーが Amazon EC2 のサービスロールを作成しようした場合、そのユーザーには Amazon EC2 にロールを渡すアクセス許可がないため、オペレーションは失敗します。

iam:PolicyARN

ARN 演算子で動作します。

管理ポリシーを含むリクエストの管理ポリシーの Amazon リソースネーム (ARN) を確認します。詳細については、「ポリシーへのアクセスの制御」を参照してください。

ウェブ ID フェデレーションで利用可能なキー

Login with Amazon、Amazon Cognito、Google、または Facebook などの ID プロバイダー (IdP) によって認証されたユーザーに一時的なセキュリティ認証情報を与えるには、ウェブ ID フェデレーションを使用します。その場合、一時的なセキュリティ認証情報を使用してリクエストするときに、他にも条件キーを使用することができます。これらのキーを使用して、フェデレーティッドユーザーが特定のプロバイダー、アプリケーション、またはユーザーに関連付けられたリソースにのみアクセスできるようにポリシーを作成できます。

aws:FederatedProvider

文字列演算子で動作します。

FederatedProvider キーは、ユーザーの認証にどの IdP が使用されたかを示します。たとえば、ユーザーが Amazon Cognito を使用して認証された場合、キーには cognito-identity.amazonaws.com が含まれます。同様に、ユーザーが Login with Amazon を使用して認証された場合、キーには www.amazon.com という値が含まれます。リソースポリシーにおいて、キーは以下のように使用されます。この場合 aws:FederatedProvider キーはリソースの ARN においてポリシー変数として使用されます。このポリシーでは、IdP を使用して認証されたすべてのユーザーは、Amazon S3 バケット内のフォルダからオブジェクトを取得できます。ただし、このバケットは、ユーザーが認証するプロバイダー固有のものでなければなりません。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::BUCKET-NAME/${aws:FederatedProvider}/*" } }
アプリケーション ID およびユーザー ID

文字列演算子で動作します。

さらに、ユーザーに対する一意の ID、ならびにユーザーが認証されるアプリケーションやサイトに対する ID を提供する 2 つのキーを使用できます。これらのキーは、次に示すとおり IdP 固有の名前を持っています。

  • Amazon Cognito ユーザーの場合、キーは cognito-identity.amazonaws.com:aud (ID プール ID) と cognito-identity.amazonaws.com:sub (ユーザー ID) です。

  • Login with Amazon ユーザーの場合、キーは www.amazon.com:app_idwww.amazon.com:user_id です。

  • Facebook ユーザーの場合、キーは graph.facebook.com:app_idgraph.facebook.com:id です。

  • Google ユーザーの場合、キーは accounts.google.com:aud (アプリケーション ID) と accounts.google.com:sub (ユーザー ID) です。

Amazon Cognito の amr キー

文字列演算子で動作します。

ウェブ ID フェデレーションに Amazon Cognito を使用する場合、信頼ポリシーの cognito-identity.amazonaws.com:amr キー (認証方法リファレンス) にユーザーのログイン情報が含まれます。このキーには複数の値が含まれるので、条件セット演算子を使用してポリシーでキーをテストします。キーには、次の値が含まれている可能性があります。

  • ユーザーが認証されていない場合、キーには unauthenticated のみが含まれています。

  • ユーザーが認証されている場合、キーには authenticated という値と、呼び出しで使用されるログインプロバイダーの名前 (graph.facebook.comaccounts.google.com、または www.amazon.com) が含まれています。

たとえば、Amazon Cognito ロールの信頼ポリシーの次の条件では、ユーザーが認証されていないかどうかをテストします。

"Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-2:identity-pool-id" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } }
ウェブ ID フェデレーションの詳細

ウェブ ID フェデレーションの詳細については、以下を参照してください。

SAML ベースのフェデレーションに利用可能なキー

SAML ベースのフェデレーションを使用する場合、追加の条件キーをポリシーに含めることができます。

SAML ロールの信頼ポリシー

ロールの信頼ポリシーには、以下のキーを含めることができます。これらのキーは、ロールの引き受け許可を発信者に与えるかどうかを規定するのに役立ちます。saml:doc を除いて、すべての値が SAML アサーションから派生します。以下の一覧内でアスタリスク (*) が付いているアイテムをコンソールの UI で使用して、条件を作成できます。[] とマークされている項目は、指定された型のリストである値を持つことができます

saml:aud

文字列演算子で動作します。

SAML アサーションの提供先のエンドポイント URL。このキーの値は、アサーションの SAML Recipient フィールドから取得されます。Audience フィールドから取得された値ではありません

saml:cn[]

文字列演算子で動作します。

これは eduOrg 属性です。

saml:doc*

文字列演算子で動作します。

これは、ロールの引き受けに使用されたプリンシパルを表します。形式は、account-ID/provider-friendly-name です (例: 123456789012/SAMLProviderName)。account-ID 値は、SAML プロバイダを所有するアカウントを参照します。

saml:edupersonaffiliation[]

文字列演算子で動作します。

これは eduPerson 属性です。

saml:edupersonassurance[]

文字列演算子で動作します。

これは eduPerson 属性です。

saml:edupersonentitlement[]*

文字列演算子で動作します。

これは eduPerson 属性です。

saml:edupersonnickname[]

文字列演算子で動作します。

これは eduPerson 属性です。

saml:edupersonorgdn*

文字列演算子で動作します。

これは eduPerson 属性です。

saml:edupersonorgunitdn[]

文字列演算子で動作します。

これは eduPerson 属性です。

saml:edupersonprimaryaffiliation

文字列演算子で動作します。

これは eduPerson 属性です。

saml:edupersonprimaryorgunitdn

文字列演算子で動作します。

これは eduPerson 属性です。

saml:edupersonprincipalname

文字列演算子で動作します。

これは eduPerson 属性です。

saml:edupersonscopedaffiliation[]

文字列演算子で動作します。

これは eduPerson 属性です。

saml:edupersontargetedid[]

文字列演算子で動作します。

これは eduPerson 属性です。

saml:eduorghomepageuri[]

文字列演算子で動作します。

これは eduOrg 属性です。

saml:eduorgidentityauthnpolicyuri[]

文字列演算子で動作します。

これは eduOrg 属性です。

saml:eduorglegalname[]

文字列演算子で動作します。

これは eduOrg 属性です。

saml:eduorgsuperioruri[]

文字列演算子で動作します。

これは eduOrg 属性です。

saml:eduorgwhitepagesuri[]

文字列演算子で動作します。

これは eduOrg 属性です。

saml:namequalifier*

文字列演算子で動作します。

Issuer のレスポンス値 (saml:iss)、AWS アカウント ID および IAM の SAML プロバイダーのわかりやすい名前 (ARN の最後の部分) を「/」文字で区切った文字列を連結したハッシュ値。アカウント ID および SAML プロバイダーのわかりやすい名前の連結は saml:doc として、IAM のポリシーで使用できます。詳細については、「SAML ベースのフェデレーションでユーザーを一意に識別する」を参照してください。

saml:iss*

文字列演算子で動作します。

発行者。URN で表されます。

saml:sub*

文字列演算子で動作します。

* これはクレームの件名です。組織内の個々のユーザーを一意に識別する値が含まれます (例: _cbb88bf52c2510eabe00c1642d4643f41430fe25e3)。

saml:sub_type*

文字列演算子で動作します。

このキーの値は、persistenttransient、または SAML アサーションで使用されている SubjectNameID 要素の完全な Format URI で構成されます。persistent の値は、saml:sub 値がセッション間のユーザーでも同じことを意味します。値が transient の場合、ユーザーの saml:sub 値はセッションごとに異なります。NameID エレメントの Format 属性の詳細については、「認証レスポンスの SAML アサーションを設定する」を参照してください。

eduPerson および eduOrg 属性に関する一般的な情報については、Internet2 のウェブサイトを参照してください。eduPerson 属性のリストについては、「eduPerson Object Class Specification (201203)」を参照してください。

リストタイプの条件キーには、複数の値を含めることができます。リスト値のポリシー内で条件を作成するには、設定演算子 (ForAllValuesForAnyValue) を使用できます。たとえば、所属先が「faculty」、「staff」、または「employee」である (ただし、「student」、「alum」など、他の可能な所属先ではない) すべてのユーザーを許可するには、次のような条件を使用します。

"Condition": { "ForAllValues:StringLike": { "saml:edupersonaffiliation":[ "faculty", "staff", "employee" ] } }

SAML ロールのアクセス許可ポリシー

ユーザーが AWS で許可されている操作を定義する SAML フェデレーションのアクセス権限ポリシーには、次のキーを追加することができます。

saml:namequalifier

文字列演算子で動作します。

これには、saml:doc 値と saml:iss 値の組み合わせを表すハッシュ値が含まれます。これは名前空間の限定子として使用されます。saml:namequalifiersaml:sub の組み合わせによってユーザーが識別されます。

saml:sub

文字列演算子で動作します。

* これはクレームの件名です。組織内の個々のユーザーを一意に識別する値が含まれます (例: _cbb88bf52c2510eabe00c1642d4643f41430fe25e3)。

saml:sub_type

文字列演算子で動作します。

このキーの値は、persistenttransient、または SAML アサーションで使用されている SubjectNameID 要素の完全な Format URI で構成されます。persistent の値は、saml:sub 値がセッション間のユーザーでも同じことを意味します。値が transient の場合、ユーザーの saml:sub 値はセッションごとに異なります。NameID エレメントの Format 属性の詳細については、「認証レスポンスの SAML アサーションを設定する」を参照してください。

これらのキーの使用の詳細については、「SAML 2.0 ベースのフェデレーションについて」を参照してください。