メニュー
AWS Identity and Access Management
ユーザーガイド

AWS グローバルキーと IAM 条件コンテキストキー

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

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

注記

場合によって利用可能な条件キーを使用している場合 (aws:SourceIp や aws:SourceVpc など) は IfExists バージョンの比較演算子を使用できます。リクエストコンテキストに条件キーがない場合 (かつ、IfExists を設定していない場合)、ポリシーエンジンは評価に失敗する可能性があります。たとえば、特定の IP 範囲または特定の VPC からのアクセスを制限するポリシーを記述する場合、次のように条件を作成できます。

"Condition": {"IpAddressIfExists": {"aws:SourceIp" : ["xxx"] }, "StringEqualsIfExists" : {"aws:SourceVpc" : ["yyy"]} }

この条件は (1) aws:SourceIp コンテキストキーの値 xxx があるまたは (2) aws:SourceVpc コンテキストキーに値 yyy がある場合のいずれかに該当します。キーのいずれかまたは両方が存在しない場合でも、条件は照合します。テストは、リクエストコンテキスト内に指定されたキーが存在する場合にのみ行われます。ない場合は、問題ないものとして扱われます。

使用できるグローバル条件キー

AWS では、AWS をサポートするすべての IAM サービス用に、以下に示すアクセス制御用の所定の条件キーが提供されています。

aws:CurrentTime

日付演算子で動作します。

現在の日付と時間が日付/時刻条件を確認します。

aws:EpochTime

日付演算子で動作します。

エポックまたは UNIX の現在の日付と時間が日付/時刻条件を確認します。

aws:TokenIssueTime

日付演算子で動作します。

一時的セキュリティ認証情報が発行された日付/時刻を確認します。このキーは一時的セキュリティ認証情報を使用してサインインをしようとするリクエストにのみ存在します。一時的セキュリティ認証情報の詳細については、「一時的セキュリティ認証情報」を参照してください。

aws:MultiFactorAuthPresent

ブール演算子で動作します。

現在のリクエストで一時的なセキュリティ認証情報を検証するために多要素認証 (MFA) を使用したか確認します。ユーザーが API を呼び出す場合に一時的な認証情報を使用した場合に限り、リクエストコンテキストでこのキーが表示されます。こうした認証情報は sts:GetSessionToken からの認証情報を持つ IAM ロール、フェデレーティッドユーザー、IAM ユーザーや AWS マネジメントコンソール のユーザーが使用します。(ユーザーの代理としてバックグラウンドで生成したコンソールは一時的な認証情報を使用します。)aws:MultiFactorAuthPresent キーは、API または CLI コマンドが標準のアクセスキーペアなど長期的な認証情報で呼び出された場合には表示されません。したがって、このキーを確認する場合は ...IfExists バージョンの条件演算子の使用をお勧めします。

次の Condition 要素は MFA の使用を確認する信頼性の高い方法ではない点にご注意ください。

#####     THIS EXAMPLE DOES NOT WORK      #####

"Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : false } }

長期的な認証情報を使用する場合、aws:MultiFactorAuthPresent キーはリクエスト内に存在せず、テストは常に失敗して不一致となるためです。代わりに BoolIfExists 演算子を使用して値を確認することをお勧めします。例::

Copy
"Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : false } }

この演算子は値が存在し「false」の場合または値が存在しない場合でも、ステートメントがそのいずれかに一致することを示しています。...IfExists はリクエストのコンテキスト内にキーが存在しなくても、マッチングしないことはないので特に問題はないと述べています。

MFA キーが存在するか確認する場合、次のように作成されたポリシーは使用しないでください。

#####     THIS EXAMPLE DOES NOT WORK      #####

"Action" : "Deny",
"Condition" : { "Null" : { "aws:MultiFactorAuthPresent" : true } }

MFA を使用していない場合は過去の例のアクセス拒否を想定するかもしれません。長期的な認証情報 (アクセスキー) で API リクエストを作成すると、MFA 条件コンテキストキーが常に 見つからなくなります。そのため、この方法で MFA をテストすると常に長期的な認証情報へのアクセス拒否といった結果になります。

aws:MultiFactorAuthAge

桁演算子で動作します。

リクエストを送信した MFA 認証済みの認証情報がどれぐらい前(秒)に発行されたのかを多要素認証(MFA)を使用して確認する。MFA が使用されていなかった場合、このキーは存在しません (「AWS での多要素認証 (MFA) の使用」を参照)。そのため、このキーでも ...IfExists バージョンの比較演算子を使用することをご検討ください。そうすることで、リクエストコンテキストにキーが存在しない場合でも、比較結果は予想通りになります。

aws:PrincipalType

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

現在のリクエストに対するプリンシパルのタイプ (ユーザー、アカウント、フェデレーティッドユーザーなど)を確認する。

aws:Referer

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

クライアント ブラウザーでリクエスト送信先のアドレスを参照した人を確認します。ウェブブラウザーで直接アドレスを参照できる一部のサービス(Amazon S3 など)でのみサポートされています。値は AWS への HTTPS リクエスト内の Referer ヘッダーから取得されます。

警告

このキーは慎重に使用する必要があります。aws:referer を使用することで、Amazon S3 バケットの所有者は、その内容が不正なサードパーティサイトから標準的なウェブブラウザーに渡されないようにできます(詳細については上記のリンクを参照)。しかし、aws:referer 値は HTTP ヘッダー内の呼び出し元によって渡されるため、不正な当事者が改造またはカスタムブラウザーを使用して任意の aws:referer 値を渡すことができます。そのため aws:referer は、不正な当事者から AWS にリクエストが直接行われることを防止するために使用しないでください。このキーは、Amazon S3 に保存されているデジタルコンテンツが不正なサードパーティサイトで参照されることから保護するためにのみ、お客様に提供されています。

aws:RequestTag/tag-key

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

AWS オブジェクトに割り当てられたタグキーとタグ値を確認するにはこのコンテキストキーは "aws:RequestTag/tag-key":"tag-value" という形式です。ここで tag-key および tag-value はタグキーと値のペアです。たとえば、dept=sales タグと cost-center=123 タグが AWS オブジェクトにアタッチされているかどうか確認するには、以下の条件を使用します。

Copy
"Condition": { "ForAllValues:StringLike": { "aws:RequestTag/dept": "sales", "aws:RequestTag/cost-center": "123", }

この AWS の条件キーは Amazon EC2 に導入されており、他の一部のサービスでもサポートされます。この条件キーの使用をサポートしているかどうか、サービスを確認してください。

aws:SecureTransport

ブール演算子で動作します。

リクエストが SSL を使用して送信されたかどうかを確認する。

aws:SourceArn

ARN 演算子で動作します。

ソースの Amazon リソースネーム (ARN) を使用して、リクエストのソースを確認します。(この値は一部のサービスでのみ利用可能です。)

aws:SourceIp

IP アドレス演算子で動作します。

リクエスタの IP アドレスを確認する(IP アドレス条件演算子を参照)。

注記

リクエストが Amazon VPC エンドポイントを使用するホストから来ている場合、aws:SourceIp キーは使用できません。代わりに VPC 固有のキーを使用する必要があります。詳細については、Amazon VPC ユーザーガイドの「VPC エンドポイント - エンドポイントの使用の管理」を参照してください。

aws:SourceVpc

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

特定の VPC へのアクセスを制限する。詳細については、『Amazon Simple Storage Service 開発者ガイド』にある「特定の VPC へのアクセスの制限」を参照してください。 (この条件キーは、VPC エンドポイント経由の AWS サービスへのトラフィックでサポートされています)

aws:SourceVpce

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

特定の VPC エンドポイントへのアクセスを制限する 詳細については、『Amazon Simple Storage Service 開発者ガイド』の「特定の VPC エンドポイントへのアクセスの制限」を参照してください。

aws:TagKeys

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

AWS オブジェクトに割り当てられたタグキーとタグ値を確認するにはこのコンテキストキーは "aws:TagKeys":"tag-key-list" という形式であり、ここで tag-key-list はタグキーのリストです。たとえば、dept タグキーと cost-center タグキーが AWS オブジェクトにアタッチされているかどうか確認するには、以下の条件を使用します。

Copy
"Condition": {"ForAllValues:StringLike": {"aws:TagKeys": [ "dept", "cost-center" ]}

この AWS の条件キーは Amazon EC2 に導入されており、他の一部のサービスでもサポートされます。この条件キーの使用をサポートしているかどうか、サービスを確認してください。

aws:UserAgent

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

リクエスタのクライアント アプリケーションを確認する。

aws:userid

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

リクエスタのユーザー ID を確認する。

aws:username

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

リクエスタのユーザー名を確認する。

IAM に利用可能なキー

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

iam:PolicyArn

ARN 演算子で動作します。

管理ポリシーを含むリクエストの管理ポリシーの Amazon リソースネーム (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 バケット内にあるフォルダからオブジェクトを取得できます。

Copy
{ "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)です。

  • 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 キー(Authenticated Methods Reference)にユーザーのログイン情報が含まれます。このキーには複数の値が含まれるので、条件セット演算子を使用してポリシーでキーをテストします。キーには、次の値が含まれている可能性があります。

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

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

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

Copy
"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:doc を除いて、すべての値が SAML アサーションから派生します。以下の一覧内でアスタリスク(*)が付いているアイテムをコンソールの UI で使用して、条件を作成できます。[] とマークされている項目は、指定された型のリストである値を持つことができます

saml:aud

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

SAML アサーションの提供先のエンドポイント URL。このキーの値は、[Audience] フィールドではなくアサーションの [SAML Recipient] フィールドからのものです。

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 アサーションで使用されている Subject および NameID 要素の完全な 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」など、他の可能な所属先ではない) すべてのユーザーを許可するには、次のような条件を使用します。

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

権限 (アクセス) ポリシー

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

saml:namequalifier

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

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

saml:sub

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

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

saml:sub_type

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

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

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