0
0

More than 3 years have passed since last update.

VPC エンドポイントへのアクセス許可は SourceIp ではなく VpcSourceIp を利用する

Last updated at Posted at 2020-09-25

概要

VPC エンドポイントを設定した AWS サービスへの IP アドレスによるアクセス許可は SourceIp ではなく、VpcSourceIp を利用する必要があります。

詳細

前提条件

S3 の特定のバケットに対して VPC エンドポイントを利用していると仮定します。

その S3 に対しては次のようにパブリックなアクセス許可を与えています。

{
    "Version": "2012-10-17",
    "Id": "Policy156583539788",
    "Statement": [
        {
            "Sid": "Stmt156583536527",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "0.0.0.0/0"
                }
            }
        }
    ]
}

この設定ではすべての IP アドレスからの GetObject を許可しています。

VpcSourceIp の指定

この状態で VPC 内のインスタンスなどからこのバケットにアクセスしようとしても Access Denied になります。

VPC エンドポイントへのアクセス許可(およびアクセス制限)に SourceIp は使えないからです。

VPC エンドポイントを介した Amazon S3 へのリクエストに、IAM ポリシーの aws:SourceIp 条件を使用することはできません。これはユーザーとロールの IAM ポリシー、およびバケットポリシーに適用されます。ステートメントに aws:SourceIp 条件が含まれる場合、値は指定した IP アドレスまたは IP アドレス範囲に一致しません。

ref: https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-endpoints-s3.html 

その代わり、VpcSourceIp を利用します。

リクエスト実行元が Amazon VPC エンドポイントを使用するホストである場合、aws:SourceIp キーは使用できません。代わりに、aws:VpcSourceIpなどの VPC 固有のキーを使用する必要があります。

ref: https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_condition-keys.html

{
    "Version": "2012-10-17",
    "Id": "Policy1565835397817",
    "Statement": [
        {
            "Sid": "Stmt1565835396529",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:VpcSourceIp": "0.0.0.0/0"
                }
            }
        }
    ]
}

これで VPN エンドポイントを経由した VPC 内からのアクセスを許可することができます。

SourceIp と VpcSourceIp の併用

VPC 内に加えて、外部からもアクセスを許可したい場合は次のように SourceIp と VpcSourceIp のアクセス許可を二つ列挙します。

{
    "Version": "2012-10-17",
    "Id": "Policy1565835397817",
    "Statement": [
       {
            "Sid": "Stmt156583539651",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "0.0.0.0/0"
                }
            }
        },
        {
            "Sid": "Stmt1565835396529",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition": {
                "IpAddress": {
                    "aws:VpcSourceIp": "0.0.0.0/0"
                }
            }
        }
    ]
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0