この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
はじめに
協栄情報石井です、今回は以下のようなS3バケットを作るために行った調査の結果を書こうと思います。
また、今後それを行う人の助けになれるようにブログを作成いたします。
S3
┝3月フォルダ(管理ユーザのみ閲覧可能)
┝4月フォルダ(管理ユーザのみ閲覧可能)
┝5月フォルダ(管理ユーザのみ閲覧可能)
┗6月フォルダ(一般ユーザはここだけ確認可能)
S3に付与されたバケットポリシー(管理ユーザのみ修正、削除可能)
※こちらの管理ユーザーは特定のIAMユーザーであり、一般ユーザーはその他大勢のIAMユーザーという意味になります。
流れ
手順を簡単に説明いたします。
1.まず、s3バケットを作成します。
2.作成いただいたs3バケットに3月フォルダ、4月フォルダ、5月フォルダ、6月フォルダを作成します。
適当なファイルを3,4,5月にアップロードしましょう。
3.バケットポリシーを実際にs3バケットに割り当てます。
4.その後、同一アカウント内の別のIAMユーザーで実際に6月フォルダ以外のフォルダにアップロード、ダウンロードができないことを確認します。
バケットポリシーの削除、変更が出来ないことを確認します。
以上が今回の調査で行った流れになります。
※本ブログはs3バケットの作成とフォルダの作成、ファイルのアップロードを行った前提で進めていきます。(項目1.2)
s3バケットの作成は特に変更を加えずに作成していただければ問題なく進めることが出来ます。
1.バケットポリシーの作成
まずは、対象のS3バケットを指定して、アクセス許可の欄を押します。
バケットポリシーの欄にある、編集を押して実際に編集を行っていきます。
2.ポリシーの設定
編集画面を開いたら、下記のポリシーを貼り付けてください。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::管理アカウントID:user/名前"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::バケット名/3月フォルダ/*",
"arn:aws:s3:::バケット名/4月フォルダ/*",
"arn:aws:s3:::バケット名/5月フォルダ/*"
]
},
{
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::管理アカウントID:user/名前"
},
"Action": [
"s3:DeleteBucketPolicy",
"s3:PutBucketPolicy"
],
"Resource": "arn:aws:s3:::バケット名"
}
]
}
3.ポリシーの解説
このバケットポリシーは2つのステートメントで構成されています。
・フォルダへのアクセス制御:
まず、最初のステートメントでは、3月、4月、5月のフォルダへのアクセス制御が行われます。
Effectの値がDenyであるため、NotPrincipalに指定されていない(管理ユーザではない)ユーザーに対して、S3バケット内のこれらのフォルダに対するすべての操作s3:*が禁止されます。
・ポリシーの修正と削除制御:
次に、2番目のステートメントでは、バケットポリシーの修正と削除に関する制御が行われます。
同様に、Effectの値がDenyであり、NotPrincipalに指定されていないユーザーに対して、ポリシーの修正と削除のアクションs3:DeleteBucketPolicyおよびs3:PutBucketPolicyが禁止されます。
このバケットポリシーを使用することで、S3バケットへのアクセスと制御を行うことができます。
管理ユーザーは3月、4月、5月、6月のフォルダを閲覧でき、一般ユーザーは6月のフォルダのみを閲覧できるようになります。
また、ポリシーの修正と削除は管理ユーザーのみが行えます。
このポリシーの作成により、データのセキュリティを確保しながら、必要なアクセス制御を実現することができます。
4.ポリシーによる制御確認
それでは、実際に設定したバケットポリシーによる制御がきちんと出来ているかの確認を行っていきます。
4-1.一般ユーザーで検証
それではまず、同一アカウント内でIAMユーザーを作成、もしくはすでに持っているIAMユーザー、でバケットポリシーで指定した管理ユーザー以外のIAMユーザーでログインします。
4-2.3.4.5フォルダの検証
その後、3、4、5月のフォルダにアクセスし、実際に検証を行っていきます。
例として3月フォルダの検証を行っていきます。
あらかじめアップロードしていたファイルを選択しましょう。
その後、ダウンロードを押しましょう。
上記の画面が表示されればダウンロードが出来ないように制御されていることがわかります。
続いて、アップロードできるか確認していきましょう。
3月フォルダにもどり、アップロードを押しましょう。
適当なファイルを選択したら、アップロードを押します。
上記のようにアップロードが失敗と出れば制御されている事がわかります。
これを他のフォルダでも確認してみましょう。
3.6月フォルダ確認
それでは6月フォルダを選択しましょう。
ダウンロードを押しましょう。
ダウンロードされていることがわかりますね。
一般ユーザーでダウンロードできているので成功です。
次にアップロードを確認していきましょう。
それでは適当なファイルをアップロードしていきましょう。
上記のようにアップロードに成功しましたと表示されていれば成功です。
4.バケットポリシーの制御
最後にバケットポリシーの変更と削除を一般ユーザーが行えないようになっているかを確認していきます。
バケットポリシーの編集を押して、何か加えて変更を押してみましょう。
上記のように変更が出来ない表示が出たら成功です。
次に削除できないかを確認します、削除出来てしまうとポリシーを削除した後変更できてしまうので重要です。
上記のように削除が出来なければ成功です。
お疲れ様です、これでバケットポリシーによるバケットの制御の検証は完了です。
5.バケットポリシーのアクションの種類やNotPrincipal、補足解説。
・アクション(Action):
アクションは、S3バケット上で実行できる操作やリソースに対する操作を指定します。
バケットポリシーでは、許可または拒否するアクションを指定します。
以下に、バケットポリシーで使用される一般的なアクションの例をいくつか書きます。
- s3:GetObject: オブジェクト(ファイル)の取得
- s3:PutObject: オブジェクト(ファイル)のアップロード
- s3:DeleteObject: オブジェクト(ファイル)の削除
- s3:ListBucket: バケット内のオブジェクト一覧の取得
- s3:CreateBucket: バケットの作成
- s3:DeleteBucket: バケットの削除
- s3:GetBucketPolicy: バケットポリシーの取得
- s3:PutBucketPolicy: バケットポリシーの設定
- s3:DeleteBucketPolicy: バケットポリシーの削除
このように、アクションはS3バケットで実行できる様々な操作を表します。
バケットポリシーでは、これらのアクションを制御することができます。
・NotPrincipal:
NotPrincipalは、バケットポリシーにおいて特定のプリンシパル(IAMユーザーやロールなど)以外のアクセスを制御するために使用されます。
NotPrincipalを使用することで、特定のプリンシパルに対してはアクセスを許可し、それ以外のプリンシパルに対してはアクセスを拒否することができます。
例えば、バケットポリシーのNotPrincipalには管理アカウントのIAMユーザーが指定されており、EffectがDenyに設定されています。この設定により、管理アカウント以外のユーザーに対しては指定されたアクションs3:*が拒否されます。
つまり、管理ユーザーのみが3月、4月、5月のフォルダを閲覧可能であり、バケットポリシーの変更や削除も行えるようになります。
NotPrincipalを使用することで、特定のアカウントやユーザーに対して制限をかけることができ、セキュリティとアクセス制御を強化することができます。
・補足:
今回行った調査で知った大切なことを書いておこうと思います。
・AllowやDenyの優先順位
優先順は下記の通りです。
明示的な拒否(Denyが記載されている)一番強い
↓
明示的な許可(Allowが記載されている)
これを忘れなければ、バケットポリシーを作成する際に大きく困ることはないと思います。
最後に
今回の調査で一番悩んだ部分のすべてがこのブログの補足に集約していると思っております。
これからバケットポリシーに困る方々の助けになれることを祈っております。