を答えが...IfExists Condition Operators
に関連するAWSのドキュメント上にあります
以外の条件演算子名の末尾にIfExistsを追加できます(たとえば、StringLikeIfExists)。 "ポリシーキーが要求のコンテキスト内に存在する場合は、ポリシーに指定されたキーを キーで処理します。キーが存在しない場合、私は 気にしません。その欠如のために。他の ステートメントの条件要素は、一致しない場合もありますが、 と一致していますが、IfExistsでチェックするとキーがありません。
例IfExistsを用い
多くの条件キーは リソースの特定のタイプに関する情報を記述し、リソースの種類にアクセスするときにのみ存在します。これらの 条件キーは、他のタイプのリソースには存在しません。この は、ポリシーステートメントが1つの リソースタイプにのみ適用される場合には問題を発生しません。ただし、単一のステートメント が、ポリシー ステートメントが複数のサービスからのアクションを参照する場合や、サービス内の特定の アクションが同じサービス内の複数の異なるリソースタイプ にアクセスする場合など、複数のタイプのリソースに適用できます。そのような場合、 がポリシーステートメントのリソースの1つのみに適用される条件キーを含めると、 ステートメントの「効果」が適用されないように、ポリシーステートメントの条件要素が に失敗することがあります。
{
"Version": "2012-10-17",
"Statement": {
"Sid": "THISPOLICYDOESNOTWORK",
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {"StringLike": {"ec2:InstanceType": [
"t1.*",
"t2.*",
"m3.*"
]}}
}
}
先行ポリシーの目的は、T1、T2又はM3を入力任意 インスタンスを起動することをユーザに可能にすることです。ただし、インスタンス を起動するには、実際には、インスタンス 自体に加えて、多くのリソースにアクセスする必要があります。たとえば、イメージ、キーペア、セキュリティグループなどが含まれます。 文全体は、 がインスタンスを起動するために必要なすべてのリソースに対して評価されます。これらの追加リソースには ec2:InstanceType条件キーが含まれていないため、StringLikeチェックに失敗し、 ユーザーにインスタンスの種類を起動する権限が与えられていません。 にこれに対処するには、代わりにStringLikeIfExists条件演算子を使用してください。 このようにして、条件キーが存在する場合にのみテストが実行されます。 は次のようになります。 "確認するリソースに " ec2:InstanceType "条件キーがある場合は、 キー値が" t1 "で始まる場合にのみアクションを許可します。 "、" t2。 "、または" m3。* "。リソースが である場合、条件キーがない場合は、それを心配しないでください。「
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {"StringLikeIfExists": {"ec2:InstanceType": [
"t1.*",
"t2.*",
"m3.*"
]}}
}
}
あなたの条件は次のようになります。
"Condition": {
"NotIpAddressIfExists": {
"aws:SourceIp": [
"12.34.56.78/32"
]
},
"StringNotEqualsIfExists": {
"aws:sourceVpce": "vpce-xxxxxxxx"
}
}
説明
ポリシーを定義する、要求がVPCエンドポイントを通じて来ている場合は、送信元IPキー同様に、要求がVPCエンドポイント外に出た場合、VPC rエラートキーは使用できません。条件付きで利用可能なキーを評価するためにIfExistsを使用する必要があります。
試しましたか? 'aws:sourceIp'はVPCエンドポイントトラフィックの無効なテストで、' aws:sourceVpce'は非VPCエンドポイントトラフィックの無効なテストなので、 'StringNotEqualsIfExists'と' NotIpAddressIfExists'を使う必要があります。不在の値は、おそらく等しくないとはいえず、これらの条件がどのように評価されているかは明確に定義されていないように見える(または、失敗するため、* IfExistsテストの可用性)。 –
StringNotEqualsIfExists + NotIpAddressIfExistsとStringNotEquals + NotIpAddressを使用すると、両方のオプションが正常に動作しているようです。私はIfExistsを追加することが適切な解決策になることに同意します。 –
このドキュメントを確認する必要があります:http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Conditions_IfExists – Robert