S3のバケットポリシーの設定項目についてまとめてみた

はじめに

S3のバケットポリシーを設定する際のパラメータについてまとめてみました

バケットポリシーの設定項目

Version

設定ファイルの文法のバージョン
2012-10-17なのでもう10年近く変わってないが、どこかで変わったりするのだろうか

Statement

この中に設定を配列形式で書いていく それぞれのstatementは{}で囲む

Sid

Sid(statement id)はポリシードキュメントに与える任意の識別子のこと
各statementに割り当てることができ、そのポリシードキュメント内でユニークでなければならない

Effect

Allow(ホワイトリスト)かDeny(ブラックリスト)を選択

Principal

リソースへのアクセスを許可、または拒否する相手を指定する
次のいずれかを指定できる

  • AWSアカウント及びルートユーザ
  • IAMユーザ
  • フェデレーティッドユーザー(ウェブ ID または SAML フェデレーションを使用)
  • IAM ロール
  • ロールを引き受けるセッション
  • AWS のサービス
  • 匿名ユーザー

Action

許可または拒否するアクションを指定する

Resource

statementをどのリソースに設定するか指定する

Condition

ポリシーを適用する条件を設定できる バケットポリシーに複数のコンディションやstatementを設定した際の挙動は、下記のクラメソさんの記事がとても参考になりました。 https://dev.classmethod.jp/articles/learn-aws-policy-documents-with-examples/

上記踏まえて特定のIPからと特定のvpceから接続可能にするポリシードキュメントを作ってみた

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "test1",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::test",
                "arn:aws:s3:::test/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "XXX.XXX.XXX.XXX/32"
                }
            }
        },
        {
            "Sid": "test2",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::test",
                "arn:aws:s3:::test/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpce": "vpce-XXXXXXXXX"
                }
            }
        }
    ]
}

nginxでrequestheaderのoriginを書き換える

結論

nginx.conf

http {
    ~~~
    server {
        ~~~
        proxy_set_header Origin http://example.com
    }
   ~~~
}

補足

backendに送るリクエストのoriginを固定したい場合があったのでメモとして残しておく
proxy_set_headerを使えば既に同じ名前のheaderがある場合は再定義してくれる
add_headerを使うと既に同名のheaderが存在する場合には再定義してくれないので注意

Linuxでroot権限を付与する方法まとめ

結論

# visudo

sudoersファイルの編集画面に移行する
(viじゃなくてnanoで開かれることもある。viへの変更方法は後述)
下記のようにtargetuser(ユーザ名)を追記

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
targetuser ALL=NOPASSWD: ALL

コマンド説明

visudo

sudoの設定ファイルは/etc/sudoersにあり、それを編集するためのコマンド
visudoは実行後にsudoersファイルをロックして、sudoersファイルとは別の一時ファイルとして編集画面に入る、編集後は一時ファイルを/etc/sudoersとして保存する前に構文チェックを行ってくれる
sudoersファイルは間違って編集すると2度とrootでログインすることができなくなる危険性があるため、編集の際はvisudoを使うべきである

visudoで開くediterを変更する

viといいながらnanoが開く場合があったので、変更方法

sudo update-alternatives --set editor /usr/bin/vim.basic