もしもOCIのObject Storage を削除しようとして"Active Preauthenticated Requests still exist..."で失敗したら


ObjectStorageの削除の失敗時

ObjectStorageを削除しようしても、"Active Preauthenticated Requests still exist for bucket 'バケット名'. Delete them first. "と表紙されて、削除が失敗することがあります。

そのURIさえ知っていたらObjectStorageにアクセスできるアクセスポイントが公開されていて、削除できないという意味なので事前承認済みリクエストを削除する必要があります

https://docs.cloud.oracle.com/en-us/iaas/Content/Object/Tasks/usingpreauthenticatedrequests.htm
のガイドに従い preauth-request がどうなっているかcliで調査します。

oci cli コマンドで preauth-requestの取得

 preauth-requestのlist取得例
$namespace = "iddktd4oigof"
$bucketname = "bucket-nemotech2"
oci os preauth-request list -ns $namespace -bn $bucketname

で Preauthenticated request を調査します、bucket名は ocid ではなく名前そのものを使います。
なお、ここでは --profile <自分の設定したprofile> というオプションが効かず、cliのconfigファイル内の [DEFAULT] が使われて 

FileNotFoundError: [Errno 2] No such file or directory: '.oci/key.pem'

といった感じのエラーが出ることがあります、この場合は
.oci/config のファイルを修正して [DEFAULT] のアカウントでcliが動くように書き換えて、 --profile のオプションを使わないようにします。
今度は動きます。

json:出力例
{
  "data": [
    {
      "access-type": "AnyObjectWrite",
      "id": "2Ai9lUumHSwQxUch5LI0+1AHM8OHChynqF7ft9FH7JY=",
      "name": "standardbucket-20191229-1554",
      "object-name": null,
      "time-created": "2019-12-29T06:55:02.270000+00:00",
      "time-expires": "2020-01-05T06:54:52.271000+00:00"
    },
    {
      "access-type": "ObjectReadWrite",
      "id": "H0WJO/lNLipod6wLY139Epiq/bKt/ppsxTTxGmcUPzc=:pre-auth-bucket1",
      "name": "\u6a19\u30af\u30c8-20191229-1551",
      "object-name": "pre-auth-bucket1",
      "time-created": "2019-12-29T06:51:54.695000+00:00",
      "time-expires": "2020-01-31T06:51:00+00:00"
    }
  ]
}

ここで、2つのidが見えるので、この2つの preauthenticated_request_id を削除します
この2つを削除を実行します

oci cli コマンドで preauth-request の削除

削除コマンドサンプル
$preauthenticated_request_id = "2Ai9lUumHSwQxUch4LI0+1AHM8OHChynqF7ft9FH7JY="
oci os preauth-request delete -ns $namespace -bn $bucketname --par-id $preauthenticated_request_id

$preauthenticated_request_id = "H0WJO/lNLipod6wLY1e9Epiq/bKt/ppsxTTxGmcUPzc=:pre-auth-bucket1"
oci os preauth-request delete -ns $namespace -bn $bucketname --par-id $preauthenticated_request_id

再び、コンソールからバケットを削除してみると、今度は消せると思います。