Minioのアクセス制限の設定

投稿者: | 1月 23, 2025

人間、3つのタイプがいると思う。

ものをもらうと

  1. 説明書をまず読んでから使う人
  2. 最初、使ってから説明書を読む人
  3. 最初、使って、その後、説明書を読まない。あるいは紛失したままの人
  4. 使う前にバラしてみる人

自分は、絶対1じゃない。まず、使ってみたいという衝動が抑えられない。みうらじゅん氏が提唱する、「男のテーゼ」の一つ、「ヤリテーゼ」に匹敵する。(詳細は、みうらじゅん著 正しい保健体育 をご確認ください。)

で、なかなかやろうと思ってできなかったことの一つを取り上げる。

 

閑話休題

 

Minioセキュリティを高めるためにアクセス制限をかける。動くからいいじゃんと思って使っていると後で痛い目をみる。

また、IAMポリシーの制限しかかけられない。AWS S3でいうバケットパーミッションはかけられない。

 

Minioの環境

minio関連がセットアップされていることが前提。、またGUIは使わない。GUIなら簡単にできるので。

 https://minio.example.internal:9000 (Let’s encrypt証明書で構築)

 クレデンシャル minioadminuser / minioadminuser

 mcコマンドのaliasでは、minioadminという名前で登録

 

テスト先が自己証明書の場合は

mcではなく、mc –insecure

として実行

 

#テスト環境作成

#test-bucket1バケットの作成
mc mb minioadmin/test-bucket1
#バケットをPrivateにする
mc policy set none minioadmin/test-bucket1
#この時点だと管理者権限でアクセスしているのであれば全てのバケットがリストされるはず。
mc ls minioadmin

#test-user1/testuser1passwordユーザの作成
mc admin user add minioadmin test-user1 testuser1password
mc admin user list minioadmin

#test-bucket1-policyポリシーファイルの作成
cat << 'EOF' > test-bucket1-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:GetObject",
              "s3:PutObject",
              "s3:ListBucket"
          ],
          "Resource": [
              "arn:aws:s3:::test-bucket1",
              "arn:aws:s3:::test-bucket1/*"
          ]
      }
  ]
}
EOF

#test-bucket1-policyポリシーの登録
mc admin policy create minioadmin test-bucket1-policy test-bucket1-policy.json
mc admin policy list minioadmin

#test-bucket1-policyポリシーをtest-user1に割り当て
mc admin policy attach minioadmin test-bucket1-policy --user test-user1
mc admin user list minioadmin


#test-bucket2バケットの作成
mc mb minioadmin/test-bucket2
#バケットをPrivateにする
mc policy set none minioadmin/test-bucket2
#この時点だと管理者権限でアクセスしているのであれば全てのバケットがリストされるはず。
mc ls minioadmin

#test-user2/testuser2passwordユーザの作成
mc admin user add minioadmin test-user2 testuser2password
mc admin user list minioadmin

#test-bucket2-policyポリシーファイルの作成
cat << 'EOF' > test-bucket2-policy.json
{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Effect": "Allow",
          "Action": [
              "s3:GetObject",
              "s3:PutObject",
              "s3:ListBucket",
              "s3:DeleteObject"
          ],
          "Condition": {
              "IpAddress": {
                  "aws:SourceIp": "192.168.11.91"
              }
          },
          "Resource": [
              "arn:aws:s3:::test-bucket2",
              "arn:aws:s3:::test-bucket2/*"
          ]
      }
  ]
}
EOF

#test-bucket2-policyポリシーの登録
mc admin policy create minioadmin test-bucket2-policy test-bucket2-policy.json
mc admin policy list minioadmin
#test-bucket2-policyポリシーをtest-user1に割り当て
mc admin policy attach minioadmin test-bucket2-policy --user test-user2
mc admin user list minioadmin

 

#テスト(test-user1)

#テストデータを作成
cat << EOF >testfile.txt
testfile.txt
EOF

#mcコマンドでtest-user1としてアクセスできるようにする。
mc alias set testuser1 https://minio.example.internal:9000 test-user1 testuser1password

#テスト(testuser1->test-bucket1)
# 以下は、test-bucket1しか見えないはず。
mc ls testuser1
# 以下は全て成功するはず。
mc cp ./testfile.txt testuser1/test-bucket1
mc cp testuser1/test-bucket1/testfile.txt download-testfile.txt
mc rm testuser1/test-bucket1/testfile.txt

#テスト(testuser1->test-bucket2)
# 以下は全て失敗するはず。
mc cp ./testfile.txt testuser1/test-bucket2
mc cp testuser1/test-bucket2/testfile.txt download-testfile.txt
mc rm testuser1/test-bucket2/testfile.txt

 

#テスト(test-user2)@192.168.11.91

#テストデータを作成
cat << EOF >testfile.txt
testfile.txt
EOF

#mcコマンドでtest-user2としてアクセスできるようにする。
mc alias set testuser2 https://minio.example.internal:9000 test-user2 testuser2password

#テスト(testuser2>test-bucket2)
# 以下は、test-bucket2しか見えないはず。
mc ls testuser2
# 以下は全て成功するはず。
mc cp ./testfile.txt testuser2/test-bucket2
mc cp testuser2/test-bucket2/testfile.txt download-testfile.txt
mc rm testuser2/test-bucket2/testfile.txt

 

#環境削除

#テスト(test-user2)@192.168.11.91 環境削除
mc alias remove testuser2
rm testfile.txt download-testfile.txt

#テスト(test-user1/test-user2)環境削除
mc admin policy detach minioadmin test-bucket1-policy --user test-user1
mc admin policy remove minioadmin test-bucket1-policy
mc admin policy detach minioadmin test-bucket2-policy --user test-user2
mc admin policy remove minioadmin test-bucket2-policy
mc admin user remove minioadmin test-user1
mc admin user remove minioadmin test-user2
mc rb minioadmin/test-bucket1 --force
mc rb minioadmin/test-bucket2 --force
mc alias remove testuser1

rm testfile.txt download-testfile.txt test-bucket1-policy.json test-bucket2-policy.json

ちなみにポリシーのJsonファイルを作るのが面倒だなぁというとき、AWSコンソールのエディタを使ってもいい。

 

結構、簡単にできるので、ぜひ設定したほうがいいと思う。たとえテスト環境であっても。

コメントを残す