1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS S3のアクセス制御の話

Last updated at Posted at 2022-11-18

AWS Cosole、ヘルプの説明がわかりずらかった話でAWS S3のアクセス制御のAWS Consoleの表記がわかりずらいという記事を書きましたが、実際にどのような違いがあるのかを見てみましょう。

ます、S3はバケットという単位を作る際に

  • ACLによる制御
  • バケットポリシーによる制御
    が選べます。AWSはバケットポリシーを推奨しています。
    68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3933333430382f37303936396237372d626563652d316261662d336162312d3332613839383633343364632e706e67.png
    ACL無効がバケットポリシーによる制御
    ACL有効がACLによる制御
    です。(てか、最初からそう書けばいいのに)

それらについて、「新しい」/「任意」、「ACL」/「バケットポリシー」で、2×2で4つの選択肢があります。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3933333430382f64323139336431622d653534302d353731662d663438612d3766313032393962656636372e706e67.png
「新しい」は新たにパブリックアクセスを許可するような設定をできないようにブロックします。
「任意の」は既にパブリックアクセスを許可するように設定されいても、それを上書きしてブロックします。

「新しい」、「ACL」の場合

以下のように、「新しい」、「ACL」のチェックをつけると
Screenshot_20221118_223519.png
オブジェクトのアクセス許可でACLを編集しようとすると、
Screenshot_20221118_223954.png
パブリックアクセスのチェックボックスがdisableになっているのがわかると思います。
逆に、「新しい」、「ACL」のチェックを外すと、パブリックアクセスのチェックボックスがenableになります。

「任意の」、「ACL」の場合

今度はオブジェクトのACLでパブリックアクセスが有効になっているものに対して
Screenshot_20221118_224302.png
「任意の」、「ACL」のチェックをつけると
Screenshot_20221118_224440.png
ACLでは許可しているのに、パブリックアクセスがブロックされているのがわかると思います。
「任意の」、「ACL」のチェックを外すとパブリックアクセスが有効になります。

「新しい」、「バケットポリシー」の場合

今度はバケットポリシーですが、「新しい」、「バケットポリシー」にチェックを入れます。
Screenshot_20221118_224717.png
バケットポリシーの場合はその下のバケットポリシーのへ週ボタンを押して、テキストボックスにjsonで入力していきます。
Screenshot_20221118_225011.png
このjsonの詳細な書き方はヘルプや、他の色々なページを参考にしていただいたいのですが、とりあえず、ここではパブリックアクセスを許可するようなjsonを書きます。このjsonの書き方が・・・一応、AWS Consoleの中で入力支援もあるのですが、Eclipseや、IntelliJのようなものを期待すると、がっかりします。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mybucketxxxx",
                "arn:aws:s3:::mybucketxxxx/*"
            ]
        }
    ]
}

この状態で保存を押すと
Screenshot_20221118_230049.png
文字通り、パブリックアクセスを許可するような設定ができないようにブロックされているのがわかります。

「任意の」、「バケットポリシー」の場合

今度は、「新しい」、「バケットポリシー」のチェックを一旦外して、バケットポリシーでパブリックアクセスが許可されている状態にします。その状態で、「任意の」、「バケットポリシー」のチェックをつけると、
Screenshot_20221118_230332.png
今までパブリックアクセスができていたのが、ブロックされたのがわかると思います。「任意の」、「バケットポリシー」のチェックを外すと、またパブリックアクセスが可能になります。

これで、「新しい」/「任意」、「ACL」/「バケットポリシー」の、2×2で4パターンの動きがわかったと思います。

が、ここで疑問に思ったのが、「ACL」か「バケットポリシー」かはバケット単位でどちらしか選べません。(同時には選べない)なのに、「新しい」/「任意」、「ACL」/「バケットポリシー」で4パターンの選択肢が出てくるのは変なのでは?

ACLの場合は下のふたつは意味がないし、バケットポリシーの場合は上のふたつ意味がないと思いますが、どうなんでしょうか?

結局、バケットポリシー、どう書けばいいねん?

ちなみに、私はS3のアクセス制御はパブリック・アクセスブロックは全部有り、バケットポリシーでこれを入れて置くのが一番簡単でわかりやすいと思いました。ここで一元管理できるし。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mybucketxxxx",
                "arn:aws:s3:::mybucketxxxx/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "1.2.3.4/32"
                }
            }
        }
    ]
}

SourceIpは光回線ならルータのWAN側のアドレスです。企業内のproxyサーバの中だとproxyサーバのWAN側のアドレスです。これだと自分(またはその企業内)だけ外からアクセスできて、他はブロックされます。
画像とかだと、各オブジェクトのオブジェクトURLのリンクをクリックしてプレビューしたい場合もあるので、こうすると便利です。

ただ、jsonだと一時的にある部分だけコメントアウトして無効化できないので・・・そこだけが不便。
バケットポリシーのjsonの入力支援もイマイチ。もうちょっとわかりやすくならないかなー。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?