2つのVPCからのトラフィックを除き、すべてのトラフィックを拒否するAWS S3バケットポリシーを記述しようとしています。私が書こうとしているポリシーは、次のようなもので、2つのStringNotEquals
の間の論理ANDを使用しています(ただし、無効なポリシーは除きます)。
{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Allow-access-only-from-two-VPCs",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbccc"
},
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbddd"
}
},
"Principal": "*"
}
]
}
これを使用する場合:
"StringNotEquals": {
"aws:sourceVpc": ["vpc-111bbccc", "vpc-111bbddd"]
}
次に、少なくとも1つの文字列比較がtrueを返し、S3バケットはどこからでもアクセスできません。
これまでに試したことはありませんが、次のように動作するはずです。 From: 詳細なアクセス制御のためのIAMポリシー条件の使用
"Condition": {
"ForAllValues:StringNotEquals": {
"aws:sourceVpc": [
"vpc-111bbccc",
"vpc-111bbddd"
]
},
元のJSONの問題:
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbccc"
},
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbddd"
}
}
StringNotEquals
という名前の重複するキーは使用できません。
しかし、問題を解決する方法はいくつかあります。
Allow
権限ではなくDeny
を指定します説明不要:Allow
の代わりにDeny
権限を使用してから、配列でStringEquals
を使用します。すべての値はOR
条件として使用されます。
{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Allow-access-only-from-two-VPCs",
"Action": "s3:*",
"Effect": "Allow",
"Resource": ["arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"],
"Condition": {
"StringEquals": {
"aws:sourceVpc": ["vpc-111bbccc", "vpc-111bbddd"]
}
},
"Principal": "*"
}
]
}
IAMポリシーでは ForAnyValues
およびForAllValues
を使用できます。これにより、Condition
内の複数の値をテストできます。
{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Deny-access-except-from-two-VPCs",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"],
"Condition": {
"ForAllValues:StringNotEquals": {
"aws:sourceVpc": ["vpc-111bbccc", "vpc-111bbddd"]
}
},
"Principal": "*"
}
]
}
StringNotEquals
とStringNotEqualsIgnoreCase
のハックの組み合わせを使用する私はこれがうまくいくと確信していますが、条件文でVPCを2つに制限するだけです。
{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Deny-access-except-from-two-VPCs",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": ["vpc-111bbccc"]
},
"StringNotEqualsIgnoreCase": {
"aws:sourceVpc": ["vpc-111ddeee"]
}
},
"Principal": "*"
}
]
}