web-dev-qa-db-ja.com

VPCへのS3バケットアクセスの制限

特定のVPCへのmy_bucketのアクセスを制限するために、次のポリシーを適用しようとしています。

  1. これをバケットポリシーとして適用しようとすると、Policy has an invalid condition key - ec2:Vpcが表示されます。どうすれば修正できますか?

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Deny",
         "Principal": {
            "AWS": "*"
         },
         "Action":"*",
         "Resource":"arn:aws:s3:::my_bucket/*",
         "Condition":{
            "StringNotEquals":{
               "ec2:Vpc":"arn:aws:ec2:region:account:vpc/vpc-ccccccc"
            }
         }
      }
   ]
}

19

私はこれを機能させました。私は2つのことをしなければなりませんでした。 1)S3バケットにバケットポリシーを作成します。2)「VPCエンドポイント」を作成します

私のS3バケットポリシーは次のようになります(もちろん、バケット名とVPC識別子を入力してください)。

{
    "Version": "2012-10-17",
    "Id": "Policy1234567890123",
    "Statement": [
        {
            "Sid": "Stmt1234567890123",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my_bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpc": "vpc-12345678"
                }
            }
        }
    ]
}

S3バケットには、AWSポリシーからのアクセスを許可するために、バケットポリシーの外部にいくつかの権限もあります。上記を行ってもアクセスできませんでした。アクセスするには、AWSコンソール-> VPC->エンドポイントに移動して、エンドポイントを作成する必要もありました。新しく作成したエンドポイントを、現時点でアカウントが持っている唯一のルーティングポリシー(すべてのサブネットが接続されている)にアタッチし、デフォルトのポリシーを使用しました

{
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        }
    ]
}

エンドポイントを作成したら、正しいURLでwgetを使用するだけで、VPC内の任意のEC2インスタンスからS3バケットから読み取ることができました。 AWSコンソールから引き続きバケットにアクセスできます。しかし、VPCの外部からURLにアクセスしようとすると、403が禁止されます。したがって、S3バケットへのアクセスは、探しているものと同じように、単一のVPCに制限されます。

これは明らかに新しい機能です。詳細はこちら AWSブログエントリ を参照してください。

35
Eddie

私を悩ませ、エディのニースの答えに追加するのに役立つかもしれない2つのことは次のとおりです。

最初に、S3 AWSコンソールでバケットを表示することはできません(または、ポリシーを変更したらそのポリシーを変更することもできません)。 bucket。これを行うには、AWSアカウント番号(右上 here に表示)を見つけて、このステートメントをバケットポリシーステートメントリストに追加します。

    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::YOUR_AWS_ACCOUNT_NUMBER:root"
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::my_bucket",
            "arn:aws:s3:::my_bucket/*"
        ]
    },

次に、複数のVPCがある場合、vpc-XXXXXXとvpc-YYYYYYにアクセス権を与えるには、エディの回答のステートメントを次のように調整する必要があります(「許可」「StringEquals」とsourceVpcのリストに注意してください)値:

... 
"Effect": "Allow",
...
"Condition": {
    "StringEquals": {
        "aws:sourceVpc": [
            "vpc-XXXXXXXX",
            "vpc-YYYYYYYY"
        ]
    }
2
JJC