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

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

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

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

注記

場合によって利用可能な条件キーを使用している場合 (aws:SourceIpaws: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:MultiFactorAuthAge

桁演算子で動作します。

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

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 演算子を使用して値を確認することをお勧めします。以下に例を示します。

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

*IfExists 演算子は値が存在し「false」の場合または値が存在しない場合でも、ステートメントがそのいずれかに一致することを示しています。値が使用されている場合、*IfExists はその値のみを重視することを意味します。値が使用されていないときに一致を失敗させたくない場合は、これを使用します。

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

##### THIS EXAMPLE DOES NOT WORK ##### "Action" : "Deny", "Condition" : { "Null" : { "aws:MultiFactorAuthPresent" : true } }

MFA を使用していない場合に限り、前の例でアクセスが拒否されると思うかもしれません。IAM ロール、フェデレーティッドユーザー、AWS マネジメントコンソール、または sts:GetSessionToken の認証情報を使用してリクエストを行う場合は、そのとおりです。ただし、IAM ユーザーの長期認証情報 (アクセスキー) を使用して API リクエストを行う場合は、MFA コンテキストをテストできません。したがって、テスト対象のユーザーが MFA で認証されているかどうかを問わず、この条件キーは常に false になります。

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 呼び出しは必ず失敗します。これを回避する方法の例を表示するには、「拒否の NotAction」を参照してください。

注記

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

このコンテキストキーを使用して、指定された一連のリージョン内の 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"」という値が含まれているかどうかを確認できます。

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

aws:SecureTransport

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

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

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 サービスへのトラフィックでサポートされています)

aws:SourceVpce

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

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

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

aws:TagKeys

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

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

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

aws:TokenIssueTime

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

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

aws:UserAgent

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

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

aws:userid

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

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

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

aws:username

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

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

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