特定のVPCへのmy_bucket
のアクセスを制限するために、次のポリシーを適用しようとしています。
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"
}
}
}
]
}
私はこれを機能させました。私は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ブログエントリ を参照してください。
私を悩ませ、エディのニースの答えに追加するのに役立つかもしれない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"
]
}