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

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

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

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

グローバル条件キーは、AWS のすべてのサービスで使用できるものもあれば、一部のサービスでのみサポートされているものもあります。

すべてのサービスに使用可能なキー

AWS は、IAM のアクセスコントロールをサポートする AWS のすべてのサービスに、以下の事前定義された条件キーを提供しています。これらのサービスのポリシーを作成する方法の詳細については、「」を参照してください。

aws:CurrentTime

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

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

aws:EpochTime

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

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

aws:MultiFactorAuthAge

桁演算子で動作します。

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

aws:MultiFactorAuthPresent

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

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

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

##### WARNING: USE WITH CAUTION ##### "Effect" : "Deny", "Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : false } }

Deny 効果、Bool 要素、false 値のこの組み合わせは、MFA を使用して認証できるが認証されなかったリクエストを拒否します。このステートメントは、MFA の使用をサポートする一時的認証情報にのみ適用されます。このステートメントは、長期的認証情報を使用して行われたリクエスト、または MFA を使用して認証されたリクエストへのアクセスを拒否しません。ロジックが複雑で MFA 認証が実際に使用されたかどうかをテストしないため、この例は慎重に使用してください。

また、Deny 効果、Null 要素、true の組み合わせは使用しないでください。この組み合わせも同様に、ロジックはさらに複雑になるためです。

代わりに、BoolIfExists 演算子を使用して、リクエストが MFA を使用して認証されたかどうかを確認することをお勧めします。

"Effect" : "Deny", "Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : false } }

DenyBoolIfExistsfalse のこの組み合わせは、MFA を使用して認証されないリクエストを拒否します。具体的には、MFA を使用しないで一時的認証情報を使用して行われたリクエストを拒否します。また、IAM ユーザーアクセスキーなどの長期的認証情報を使用して行われたリクエストも拒否します。*IfExists 演算子は、aws:MultiFactorAuthPresent キーが存在するかどうか、MFA が使用されているかどうかを確認します。これは、MFA を使用して認証されないリクエストを拒否する場合に使用します。

また、BoolIfExists 演算子を使用して、長期的認証情報を使用して行われた MFA 認証リクエストを許可することもできます。

"Effect" : "Allow", "Condition" : { "BoolIfExists" : { "aws:MultiFactorAuthPresent" : true } }

キーが存在して MFA が使用されている場合またはキーが存在しない場合、この条件に一致となります。AllowBoolIfExiststrue のこの組み合わせは、MFA を使用して認証されたリクエスト、または MFA を使用して認証できないリクエストを許可します。MFA を使用しないで一時的認証情報を使用して行われたリクエストは許可しません。このステートメントを使用して、長期的認証情報を使用して行われた MFA リクエストを許可します。

または、MFA を使用して認証されたリクエストのみを許可することもできます。

"Effect" : "Allow", "Condition" : { "Bool" : { "aws:MultiFactorAuthPresent" : true } }

AllowBooltrue のこの組み合わせは、MFA 認証リクエストのみを許可します。このステートメントは、MFA の使用をサポートする一時的認証情報にのみ適用されます。このステートメントは、長期的認証情報を使用して行われたリクエスト、または MFA を使用しないで一時的認証情報を使用して行われたリクエストへのアクセスを許可しません。

MFA キーが存在するかを確認する場合、以下のようなポリシーは使用しないでください。

##### WARNING: USE WITH CAUTION ##### "Effect" : "Allow", "Condition" : { "Null" : { "aws:MultiFactorAuthPresent" : false } }

Allow 効果、Null 要素、false 値のこの組み合わせは、リクエストが実際に認証されたかどうかにかかわらず、MFA を使用して認証できるリクエストのみを許可します。これにより、一時的認証情報を使用して行われたすべてのリクエストが許可され、長期的認証情報を使用して行われたリクエストは拒否されます。MFA 認証が実際に使用されたかどうかをテストしないため、この例は慎重に使用してください。

aws:SecureTransport

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

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

aws:UserAgent

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

依頼者のクライアント アプリケーションを確認します。

警告

このキーは慎重に使用する必要があります。しかし、aws:UserAgent 値は HTTP ヘッダー内の発信者によって渡されるため、不正な当事者が改造またはカスタムブラウザを使用して任意の aws:UserAgent 値を渡すことができます。そのため aws:UserAgent は、不正な当事者から AWS にリクエストが直接行われることを防止するために使用しないでください。このステートメントを使用して、ポリシーをテストした後にのみ、特定のクライアントアプリケーションのみを許可できます。

一部のサービスに使用可能なキー

AWS は、これらの機能をサポートする AWS の一部のサービスのみに、以下の事前定義された条件キーを提供しています。サービスがこれらの条件キーのいずれかをサポートしているかどうかを確認するには、そのサービスのドキュメントを参照する必要があります。

注記

いくつかのシナリオでのみ利用可能な条件キーを使用する場合は、条件演算子の IfExists バージョンを使用できます。リクエストコンテキストに条件キーがない場合、ポリシーエンジンは評価に失敗する可能性があります。たとえば、...IfExists 演算子を使用する以下のポリシーでは、リクエストの送信元が特定の IP 範囲または VPC である場合、この条件に一致となります。キーの一方または両方が存在しない場合にも、この条件に一致となります。これらの値は、指定したキーがリクエスト内に存在する場合にのみ確認されます。

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

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

AWS Organizations を使用して作成した組織の識別子。このグローバルキーは、組織内のすべての AWS アカウントのすべてのアカウント ID を一覧表示する代わりに使用できます。この条件キーを使用して、リソースベースのポリシーでの Principal 要素の指定を簡素化します。組織のメンバーであるすべてのアカウントを一覧表示する代わりに、条件要素に組織 ID を指定することができます。アカウントを追加したり削除したりすると、aws:PrincipalOrgID を含むポリシーには正しいアカウントが自動的に組み込まれ、手動で更新する必要はありません。

たとえば、以下の Amazon S3 バケットポリシーでは、o-xxxxxxxxxxx 組織の任意のアカウントのメンバーに policy-ninja-dev バケットへのオブジェクトの追加を許可します。

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowPutObject", "Effect": "Allow", "Principal": "*", "Action": "s3:putobject", "Resource": "arn:aws:s3:::policy-ninja-dev/*", "Condition": {"StringEquals": {"aws:PrincipalOrgID":["o-xxxxxxxxxxx"]} } } }

注記

また、このグローバル条件は、AWS 組織のマスターアカウントにも適用されます。

AWS Organizations の詳細については、『AWS Organizations ユーザーガイド』の「AWS Organizations とは」を参照してください。

この条件キーは一部のサービスでのみ利用可能です。

aws:PrincipalType

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

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

この条件キーは一部のサービスでのみ利用可能です。

aws:Referer

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

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

警告

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

この条件キーは一部のサービスでのみ利用可能です。

aws:RequestedRegion

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

特定のリージョンに対して AWS リクエストが行われたかどうかを確認します。このグローバル条件キーを使用して、ユーザーが呼び出せるリージョンを制御できます。各サービスでサポートされている AWS リージョンのリストについては、『アマゾン ウェブ サービス全般のリファレンス』の「AWS のリージョンとエンドポイント」を参照してください。

IAM などのグローバルサービスには、単一のエンドポイントがあります。ただし、このエンドポイントが 米国東部(バージニア北部) リージョンに物理的に配置されているため、IAM 呼び出しは常に us-east-1 リージョンに対して実行されます。たとえば、リクエストされたリージョンが us-west-2 でない場合にすべてのサービスへのアクセスを拒否するポリシーを作成すると、IAM 呼び出しは必ず失敗します。これを回避する方法の例を表示するには、「Deny での NotAction の使用」を参照してください。

注記

aws:RequestedRegion 条件キーを使用すると、呼び出されるサービスのエンドポイントを制御できますが、オペレーションの影響を制御することはできません。一部のサービスではリージョン間の影響があります。たとえば、Amazon S3 にはリージョン間レプリケーションを制御する API オペレーションがあります。1 つのリージョン (s3:PutBucketReplication の条件キーの影響を受ける) で aws:RequestedRegion を呼び出すことはできますが、他のリージョンはレプリケーションの構成設定に基づいて影響を受けます。

このコンテキストキーを使用して、指定された一連のリージョン内の AWS サービスへのアクセスを制限できます。たとえば、以下のポリシーでは、AWS マネジメントコンソール でのすべての Amazon EC2 インスタンスの表示をユーザーに許可します。ただし、変更できるインスタンスは、アイルランド (eu-west-1)、ロンドン (eu-west-2)、パリ (eu-west-3) のみです。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InstanceConsoleReadOnly", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeIamInstanceProfileAssociations", "ec2:DescribeInstanceAttribute", "ec2:DescribeReservedInstancesOfferings", "ec2:DescribeClassicLinkInstances", "ec2:DescribeSpotInstanceRequests", "ec2:GetReservedInstancesExchangeQuote", "ec2:DescribeInstanceCreditSpecifications", "ec2:DescribeSpotFleetInstances", "ec2:DescribeScheduledInstances", "ec2:DescribeScheduledInstanceAvailability", "ec2:DescribeReservedInstancesModifications", "ec2:DescribeReservedInstances", "ec2:DescribeReservedInstancesListings", "ec2:DescribeInstanceStatus" ], "Resource": "*" }, { "Sid": "InstanceWriteRegionRestricted", "Effect": "Allow", "Action": [ "ec2:ModifyInstancePlacement", "ec2:TerminateInstances", "ec2:ImportInstance", "ec2:StartInstances", "ec2:MonitorInstances", "ec2:RunScheduledInstances", "ec2:ResetInstanceAttribute", "ec2:RunInstances", "ec2:ModifyInstanceAttribute", "ec2:StopInstances", "ec2:AssociateIamInstanceProfile", "ec2:ModifyReservedInstances" ], "Resource": "*", "Condition": {"StringEquals": {"aws:RequestedRegion": [ "eu-west-1", "eu-west-2", "eu-west-3" ]}} } ] }

この条件キーは一部のサービスでのみ利用可能です。

aws:RequestTag/tag-key

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

このコンテキストキーは "aws:RequestTag/tag-key":"tag-value" という形式です。ここで tag-key および tag-value はタグキーと値のペアです。

AWS リクエストでタグとその値をチェックします。たとえば、リクエストに「"Dept"」タグキーが含まれ、「"Accounting"」という値が含まれているかどうかを確認できます。

この条件キーは一部のサービスでのみ利用可能で、Amazon EC2 に導入されました。

aws:SourceAccount

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

リクエストのソースが特定のアカウントであるかどうかを確認します。たとえば、SNS トピックにオブジェクト作成イベントを配信するように設定されたアカウントに S3 バケットがあるとします。この場合、この条件キーを使用して、Amazon S3 が混乱した代理として使用されていないことを確認できます。Amazon S3 は、バケットが属するアカウントを Amazon SNS に通知します。

この条件キーは一部のサービスでのみ利用可能です。

aws:SourceArn

ARN 演算子で動作します。

ソースの Amazon リソースネーム (ARN) を使用して、リクエストのソースを確認します。

この条件キーは一部のサービスでのみ利用可能です。

aws:SourceIp

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

依頼者の IP アドレスを確認するには、IP アドレス条件演算子 を参照します。

注記

aws:SourceIp 条件キーは、指定した IP 範囲内から API コールを行う IAM ユーザー、グループ、ロール、またはフェデレーティッドユーザーの JSON ポリシーでのみ使用する必要があります。このポリシーは、ユーザに代わって API をコールする AWS サービスへのアクセスを拒否します。たとえば、AWS CloudFormation がインスタンスを停止するために Amazon EC2 を呼び出すことを許可するサービスロールがあるとします。この場合、ターゲットサービス (Amazon EC2) がリクエスト実行元ユーザーの IP アドレスではなく呼び出し元サービス (AWS CloudFormation) の IP アドレスを認識するため、リクエストは拒否されます。JSON ポリシーで評価を行うために、発信元サービスを通じて元の IP アドレスをターゲットサービスに渡す方法はありません。

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

aws:SourceVpc

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

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

この条件キーは、VPC エンドポイント経由のトラフィックをサポートする一部のサービスでのみ利用可能です。

aws:SourceVpce

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

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

この条件キーは一部のサービスでのみ利用可能です。

aws:TagKeys

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

このコンテキストキーは "aws:TagKeys":"tag-key" という形式であり、ここで tag-key は値 (["Dept","Cost-Center"] など) のないタグキーのリストです。

AWS リクエストに存在するタグキーをチェックします。

ベストプラクティスとして、ポリシーでタグを使用してアクセスを制御する場合は、aws:TagKeys 条件キーを使用して、許可されるタグキーを定義できます。ポリシー例と詳細については、「タグキーの制御」を参照してください

注記

一部のサービスでは、リソースの作成、変更、削除などのリソースオペレーションを使用したタグ付けをサポートしています。1 回の呼び出しでタグ付けとオペレーションを許可するには、タグ付けアクションとリソース変更アクションの両方を含むポリシーを作成する必要があります。次に、aws:TagKeys 条件キーを使用して、リクエストで特定のタグキーを使用して適用できます。たとえば、だれかが Amazon EC2 スナップショットを作成するときにタグを制限するには、ポリシーに ec2:CreateSnapshot の作成アクションおよび ec2:CreateTags のタグ付けアクションを含める必要があります。aws:TagKeys を使用するこのシナリオのポリシーを表示するには、Linux インスタンス用 Amazon EC2 ユーザーガイドの「タグ付きのスナップショットの作成」を参照してください。

この条件キーは一部のサービスでのみ利用可能で、Amazon EC2 に導入されました。

aws:TokenIssueTime

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

一時的セキュリティ認証情報が発行された日付/時刻を確認します。

この条件キーは、一時的セキュリティ認証情報をサポートする一部のサービスでのみ利用可能です。一時的認証情報の使用がサポートされているサービスについては、「IAM と連携する AWS のサービス」を参照してください。

aws:userid

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

依頼者のユーザー ID を確認します。

この条件キーは一部のサービスでのみ利用可能です。

aws:username

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

依頼者のユーザー名を確認します。

この条件キーは一部のサービスでのみ利用可能です。