S3に対するアクセス制限方法についてまとめました。
今回の環境について
S3バケット名は、「hogefuga」として説明させて頂きます。
1.特定S3バケットの中身を、全てのユーザーに見せる
下記の設定をする事により、hogefugaのS3バケット内にあるものは全て外部から見る事ができます。
S3バケットのWebホスティングを有効にしている場合などで利用します。
{
"Version": "2012-10-17",
"Id": "Policy1450760425940",
"Statement": [
{
"Sid": "Stmt1450760424377",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::hogefuga/*"
]
}
]
}
主要な項目について説明します。
<Effect>
許可・拒否するかをここで指定します。
今回はAllowなので、続くPrincipal・Action・Resourceで指定した行為を許可します。
拒否する場合は、Allowの代わりにDenyを記述します。
<Principal>
アクセス許可・拒否したい対象。
<Action>
S3に対して許可・拒否するアクション。
<Resource>
アクセス許可・拒否させたいS3バケット。
2.特定の階層にあるフォルダ以下にあるファイルを、全てのユーザーに見せる
「1」ではS3バケット以下を指定しましたが、下記のようにS3バケット内にあるフォルダを指定してアクセス許可させることもできます。
{
"Version": "2012-10-17",
"Id": "Policy1450760425940",
"Statement": [
{
"Sid": "Stmt1450760424377",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::hogefuga/folder/*"
]
}
]
}
3.IPアドレス制限を掛けてみる
特定の拠点にいる人からのみ、S3バケットを閲覧する事ができます。
aws:SourceIpにアクセスさせたい拠点のIPを記入します。
{
"Version": "2012-10-17",
"Id": "Policy1450760425940",
"Statement": [
{
"Sid": "Stmt1450760424377",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::hogefuga/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"52.XX.XX.XX/32",
"52.XX.XX.XX/32"
]
}
}
}
]
}
逆にアクセス拒否したい拠点を記入することも出来ます。
{
"Version": "2012-10-17",
"Id": "Policy1450760425940",
"Statement": [
{
"Sid": "Stmt1450760424377",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::hogefuga/*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"52.XX.XX.XX/32",
"52.XX.XX.XX/32"
]
}
}
}
]
}
4.応用
{
"Version": "2012-10-17",
"Id": "Policy1450760425940",
"Statement": [
{
"Sid": "Stmt1450760424377",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::hogefuga/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"52.XX.XX.XX/32",
"52.XX.XX.XX/32"
]
}
}
},
{
"Sid": "Stmt1450760424377",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::hogefuga/folder/*"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"52.XX.XX.XX/32",
"52.XX.XX.XX/32"
]
}
}
}
]
}
最初の"Effect": "Deny"から次の"aws:SourceIp"までで、hogefuga以下のデータにアクセスできないようにして
"Effect": "Allow"以降の記述で、hogefuga/folderにアクセスできるよう設定してます。
S3のバケットポリシーは、基本的に上から下に処理されていくようなので、アクセスさせたくないものを最初に書いておき、アクセスさせたいものは最後に書くと良いでしょう。