IAM の条件コンテキストキー
IAM の JSON ポリシーの Condition
要素を使用して、すべての AWS API リクエストの評価コンテキストに含まれるキーの値をテストできます。これらのキーは、リクエスト自体、またはリクエストが参照するリソースに関する情報を示します。ユーザーが要求したアクションを許可する前に、キーが指定された値を持っているかどうかを確認できます。これにより、JSON
ポリシーステートメントが着信 API リクエストと照合するとき、しないときを細かく制御できます。JSON ポリシーで Condition
要素を使用する方法の詳細については、「IAM JSON ポリシーの要素:Condition」を参照してください。
このトピックでは、IAM サービスで定義および提供されているキー (iam:
プレフィックス付き) について説明します。他のいくつかの AWS サービスは、そのサービスによって定義されたアクションおよびリソースに関連するサービス固有のキーも提供します。詳細については、「AWS のサービスのアクション、リソース、および条件キー」を参照してください。条件キーをサポートするサービスのドキュメントには、追加情報がある場合があります。Amazon S3 リソースのポリシーで使用できるキーについては、『Amazon Simple Storage Service 開発者ガイド』の「Amazon S3 ポリシーキー」を参照してください。
IAM に利用可能なキー
IAM リソースへのアクセスを制御するポリシーで以下の条件キーを使用できます。
- iam:AWSServiceName
-
文字列演算子で動作します。
このロールがアタッチされる AWS のサービスを指定します。
- iam:PassedToService
-
文字列演算子で動作します。
ロールを渡すことができるサービスのサービスプリンシパルを指定します。サービスプリンシパルは、ポリシーの
Principal
要素で指定できるサービスの名前です。通常の形式は、SERVICE_NAME_URL.amazonaws.com
です。iam:PassedToService
条件キーで、ロールを引き受けるサービスのサービスプリンシパルを指定します。特定のサービスにのみロールを渡すことができるようにユーザーを制限するには、
iam:PassedToService
を使用します。たとえば、ユーザーは、代理で Amazon S3 バケットにログデータを書き込むために CloudWatch を信頼するサービスロールを作成する場合があります。次に、ユーザーは新しいサービスロールにアクセス許可ポリシーと信頼ポリシーをアタッチする必要があります。この場合、信頼ポリシーで、cloudwatch.amazonaws.com
要素のPrincipal
を指定する必要があります。ユーザーがロールを CloudWatch に渡すことができるように、次のポリシーをアタッチします。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": {"StringEquals": {"iam:PassedToService": "cloudwatch.amazonaws.com"}} } ] }
この条件キーを使用することで、ユーザーは、指定したサービスにのみ、サービスロールを作成することができます。たとえば、前述のポリシーが適用されるユーザーが Amazon EC2 のサービスロールを作成しようした場合、そのユーザーには Amazon EC2 にロールを渡すアクセス許可がないため、オペレーションは失敗します。
- iam:PermissionsBoundary
-
文字列演算子で動作します。
指定したポリシーが IAM プリンシパルリソースのアクセス許可の境界としてアタッチされていることを確認します。詳細については、「IAM エンティティのアクセス許可の境界」を参照してください。
- iam:PolicyARN
-
ARN 演算子で動作します。
管理ポリシーを含むリクエストの管理ポリシーの Amazon リソースネーム (ARN) を確認します。詳細については、「ポリシーへのアクセスの制御」を参照してください。
- iam:ResourceTag/
key-name
-
文字列演算子で動作します。
リソース (ユーザーまたはロール) を識別するためにアタッチされたタグが、指定されたキーの名前および値と一致するかどうかをチェックします。
カスタム属性は、キー – 値のペアの形式でユーザーまたはロールに追加できます。IAM タグの詳細については、「IAM エンティティのタグ付け」を参照してください。IAM ユーザーおよびロールへのアクセスを制御するには、
iam:ResourceTag
を使用します。ただし、IAM ではグループのタグをサポートしていないため、タグを使用してグループへのアクセスを制御することはできません。この例では、次のようなポリシーを作成する方法を示します。 を使用することで、
status=terminated
タグを使用してユーザーを削除することができます。このポリシーを使用するには、ポリシー例の赤の斜体テキストを自分の情報に置き換えます。{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:DeleteUser", "Resource": "*", "Condition": {"StringLike": {"iam:ResourceTag/
status
": "terminated
"}} }] }
ウェブ 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_id
とwww.amazon.com:user_id
です。 -
Facebook ユーザーの場合、キーは
graph.facebook.com:app_id
とgraph.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
キー (認証方法リファレンス) にユーザーのログイン情報が含まれます。このキーには複数の値が含まれるため、条件 set 演算子を使用してポリシーでキーをテストします。キーには、次の値が含まれている可能性があります。-
ユーザーが認証されていない場合、キーには
unauthenticated
のみが含まれています。 -
ユーザーが認証されている場合、キーには
authenticated
という値と、呼び出しで使用されるログインプロバイダーの名前 (graph.facebook.com
、accounts.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 フェデレーションの詳細については、以下を参照してください。
-
AWS Mobile SDK for Android Developer Guide の「Amazon Cognito の概要」
-
AWS Mobile SDK for iOS Developer Guide の「Amazon Cognito の概要」
-
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*
-
文字列演算子で動作します。
このキーの値は、
persistent
かtransient
、または SAML アサーションで使用されているFormat
とSubject
要素の完全なNameID
URI で構成されます。persistent
の値は、saml:sub
値がセッション間のユーザーでも同じことを意味します。値がtransient
の場合、ユーザーのsaml:sub
値はセッションごとに異なります。NameID
エレメントのFormat
属性の詳細については、「認証レスポンスの SAML アサーションを設定する」を参照してください。
eduPerson
および eduOrg
属性に関する一般的な情報については、Internet2 のウェブサイトを参照してください。eduPerson
属性のリストについては、「eduPerson Object Class Specification (201203)」を参照してください。
リストタイプの条件キーには、複数の値を含めることができます。リスト値のポリシー内で条件を作成するには、set 演算子 (ForAllValues
、ForAnyValue
) を使用できます。たとえば、所属先が「faculty」、「staff」、または「employee」である (ただし、「student」、「alum」など、他の可能な所属先ではない)
すべてのユーザーを許可するには、次のような条件を使用します。
"Condition": { "ForAllValues:StringLike": { "saml:edupersonaffiliation":[ "faculty", "staff", "employee" ] } }
SAML ロールのアクセス許可ポリシー
ユーザーが AWS で許可されている操作を定義する SAML フェデレーションのアクセス権限ポリシーには、次のキーを追加することができます。
- saml:namequalifier
-
文字列演算子で動作します。
これには、
saml:doc
値とsaml:iss
値の組み合わせを表すハッシュ値が含まれます。これは名前空間の限定子として使用されます。saml:namequalifier
とsaml:sub
の組み合わせによってユーザーが識別されます。 - saml:sub
-
文字列演算子で動作します。
* これはクレームの件名です。組織内の個々のユーザーを一意に識別する値が含まれます (例:
_cbb88bf52c2510eabe00c1642d4643f41430fe25e3
)。 - saml:sub_type
-
文字列演算子で動作します。
このキーの値は、
persistent
かtransient
、または SAML アサーションで使用されているFormat
とSubject
要素の完全なNameID
URI で構成されます。persistent
の値は、saml:sub
値がセッション間のユーザーでも同じことを意味します。値がtransient
の場合、ユーザーのsaml:sub
値はセッションごとに異なります。NameID
エレメントのFormat
属性の詳細については、「認証レスポンスの SAML アサーションを設定する」を参照してください。
これらのキーの使用の詳細については、「SAML 2.0 ベースのフェデレーションについて」を参照してください。