[技術ブログvol.37] AWS S3バケットポリシーあれこれ

今回は、S3のバケットポリシーについて、実際の事例ベースでサンプルをご紹介しようと思います。

よくあるのは、Webホスティング機能を使っていて、「一部にしか公開したくない」とか「特定フォルダ以下を除き公開したい」といったリクエストがよくあります。

そこで、そういった利用シーンに応じたポリシーサンプルをババーンと大公開です。

それでは早速いってみたいと思います。

WebホスティングでANY公開する

これは、公式ドキュメントでも公開されているものですね。
「your-backet-name」の箇所は実際のバケット名に合わせてください。

{
"Id": "Policy1445583370774",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1445583369663",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::your-backet-name/*",
"Principal": "*"
}
]
}

拠点IPからのみアクセス許可する

サイトは非公開で、特定のIPだけサイトへのアクセスを許可するポリシーです。
いわゆるホワイトリスト方式です。

下記のサンプルでは、「203.0.113.51」と「198.51.100.2」のIPを許可する例です。

{
"Id": "Policy1437113956086",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1437113953451",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::your-backet-name/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"203.0.113.51/32",
"198.51.100.2/32"
]
}
},
"Principal": "*"
}
]
}

特定IPだけ拒否する

上記とは逆に、サイトは全公開で、特定のIPだけサイトへのアクセスを拒否するポリシーです。
ブラックリスト方式ですね。

ポイントは、先ほどのポリシーとは違い、Conditionの条件にNotIpAddressを使っているという点です。

下記のサンプルでは、「203.0.113.51」と「198.51.100.2」のIPを拒否する例です。

{
"Id": "Policy1445573554804",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1445573553373",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::your-backet-name/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"203.0.113.51/32",
"198.51.100.2/32"
]
}
},
"Principal": "*"
}
]
}

応用例

サイトは全公開で、指定のフォルダだけ指定のIPだけサイトへのアクセスを許可するポリシーです。
(指定フォルダへのアクセスは、指定IP以外は拒否します。)

下記のサンプルでは「folder」というフォルダに対して、指定IPからのみアクセスできるようになっています。
その他のフォルダのページは全公開です。

ポイントは、対象のarnでポリシーを2つに分けているという点です。

下記のサンプルでは、「203.0.113.51」と「198.51.100.2」のIPのみ「folder」というフォルダにアクセスできます。
その他のオブジェクトに対しては、全公開になります。

{
"Id": "Policy1445573059412",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1445572735113",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::your-backet-name/*",
"Principal": "*"
},
{
"Sid": "Stmt1445573058285",
"Action": [
"s3:GetObject"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::your-backet-name/folder/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": [
"203.0.113.51/32",
"198.51.100.2/32"
]
}
},
"Principal": "*"
}
]
}

ポリシージェネレータ

上記のポリシーは、全てポリシージェネレータで作成したものです。

ポリシージェネレーター

技術ブログ中の人
ポリシージェネレータは、リファラー制限などが指定できなかったりしますが、簡単にポリシーが作成できて便利です。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA