LoginSignup
2
3

More than 3 years have passed since last update.

IBM Cloud Object Storage (ICOS) のバケットでディレクトリリスティングする

Last updated at Posted at 2019-10-14

やりたいこと

ディレクトリリスティングとは、URLで指定するとディレクトリに含まれるファイル一覧を表示する Web サーバーの機能です。
例えばでファイルをダウンロードする Web サイトでは、このようにファイル一覧が表示されます。
この機能を IBM Cloud Object Storage (ICOS) だけで実現します。

Kobito.0Ae7GE.png

IBM Cloud コマンドでログイン

ibmcloud コマンドを使っていきます。

ibmcloud login

IBM Cloud Object Storage (ICOS) インスタンス作成

IBM Cloud Object Storage (ICOS) が存在しない場合は、作成します。

https://cloud.ibm.com/docs/services/cloud-object-storage/basics?topic=cloud-object-storage-gs-dev#gs-dev-provision

# リソースグループを指定
export RESOURCE_GROUP=khayama
ibmcloud target -g $RESOURCE_GROUP

# サービスインスタンスを作成
export INSTANCE_NAME=khayama-cos
export PLAN=lite # or standard
ibmcloud resource service-instance-create $INSTANCE_NAME cloud-object-storage $PLAN global
...

Creating service instance khayama-cos in resource group khayama of account TEST as khayama-user...
OK
Service instance khayama-cos was created.

Name:         khayama-cos   
ID:           crn:v1:bluemix:public:cloud-object-storage:global:a/039dbe6794084c7cb514a276dd2345da:ea7a91a5-30be-4ed0-a94c-d10115b03210::   
GUID:         ea7a91a5-30be-4ed0-a94c-d10115b03210   
Location:     global   
State:        active   
Type:         service_instance   
Sub Type:        
Created at:   2019-10-14T09:15:05Z   
Updated at:   2019-10-14T09:15:05Z   

IBM Cloud Object Storage (ICOS) CLI プラグインのインストール・設定

IBM Cloud Object Storage (ICOS) のバケット作成に必要なプラグインをインストールして設定ます。

https://cloud.ibm.com/docs/cloud-object-storage-cli-plugin?topic=cloud-object-storage-cli-ic-cos-cli#ic-installation

ibmcloud plugin install cloud-object-storage
export CRN=`ibmcloud resource service-instance khayama-cos | grep crn | awk '{print $2}'`
ibmcloud cos config crn --crn $CRN

IBM Cloud Object Storage (ICOS) バケット作成

バケットを作成します。

https://cloud.ibm.com/docs/cloud-object-storage-cli-plugin?topic=cloud-object-storage-cli-ic-cos-cli#ic-create-bucket

export BUCKET_NAME=khayama-ibmcloud
ibmcloud cos create-bucket --bucket $BUCKET_NAME --region jp-tok --class SMART
ibmcloud cos list-buckets

IBM Cloud Object Storage (ICOS) バケットの Public Access を有効化 (CLI)

バケット単位で公開するコマンドを実行します。
ibmcloud コマンドのバージョン 1.3.0 以上で実行してください。

export INSTANCE_ID=$(ibmcloud resource service-instance khayama-cos --output json | jq -r '.[].guid')

ibmcloud iam access-group-policy-create パブリック・アクセス --roles "Content Reader" \
--service-name cloud-object-storage \
--service-instance $INSTANCE_ID \
--resource-type bucket \
--resource $BUCKET_NAME

【参考】 IBM Cloud Object Storage (ICOS) バケットの Public Access を有効化 (curl)

バケット単位で公開するコマンドを実行します。

https://cloud.ibm.com/apidocs/iam-policy-management#create-a-policy

export ACCESS_TOKEN=`ibmcloud iam oauth-tokens | head -n 1 | awk '{print $5}'`
export ACCOUNT_ID=`ibmcloud account show | grep ID | awk '{print $3}'`
export INSTANCE_ID=`ibmcloud resource service-instance khayama-cos | grep GUID | awk '{print $2}'`

curl -X POST \
'https://iam.cloud.ibm.com/v1/policies' \
-H "Authorization: $ACCESS_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
  "type": "access",
  "subjects": [
    {
      "attributes": [
        {
          "name": "access_group_id",
          "value": "AccessGroupId-PublicAccess"
        }
      ]
    }
  ],
  "roles":[
    {
      "role_id": "crn:v1:bluemix:public:cloud-object-storage::::serviceRole:ContentReader"
    }
  ],
  "resources":[
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "'$ACCOUNT_ID'"
        },
        {
          "name": "serviceName",
          "value": "cloud-object-storage"
        },
        {
          "name": "serviceInstance",
          "value": "'$INSTANCE_ID'"
        },
        {
          "name": "resourceType",
          "value": "bucket"
        },
        {
          "name": "resource",
          "value": "'$BUCKET_NAME'"
        }
      ]
    }
  ]
}'

ディレクトリリスティングに必要な index.html をダウンロード

GitHub からクローンします。

nolanlawson/pretty-s3-index-html

git clone https://github.com/nolanlawson/pretty-s3-index-html.git
cd pretty-s3-index-html

コンテンツタイプを指定してアップロード

export ENDPOINT=s3.jp-tok.cloud-object-storage.appdomain.cloud

curl -X PUT "https://$BUCKET_NAME.$ENDPOINT/index.html" -H "x-amz-acl: public-read" -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-Type: text/html" -T index.html

ディレクトリリスティングを確認

Web にアクセスすると確認できます。

open "https://$BUCKET_NAME.$ENDPOINT/index.html"

Kobito.sgIl6i.png

さいごに

このようにクラウドではサーバーレスで簡単にディレクトリリスティングを実現できました。
ファイルをダウンロードする Web サイトは簡単に作れることがわかりましたね。

2
3
1

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
2
3