皆さんこんにちは。どうも。
今回は、Azure blob storageにREST APIでblobデータを書き込む時に、SAS認証を使ったのですが、その際の注意点をまとめました。
まず、SASを生成する時に、アカウントキーか、ユーザーの委任キーかで挙動が異なります。
アカウントキーだと、アクセスキーに紐づいてSASが作成されます。
つまり、ユーザーに権限があろうと無かろうと、storageアカウント(のblobデータ)にアクセスできます。
ただ、ユーザーの委任キーにすると、ユーザー自体に紐づいてSASが作成されるので、ユーザーに(storage blobデータ作成者の)権限が無いと、blobデータを書き込めません。
私は初め、ここでハマってしまい、ユーザーの委任キーでSAS作成して、REST APIのリクエストを送る時に権限が無いって怒られてしまいました。
後、もう1つ、SASをアカウントキーで作った時に、もしもそのトークンを誰か悪意のある人に盗まれたら、どうするか?ですが、これはそのSASに紐づいているキーを交換することで、そのSASを無効化できます。
ただ、ただちにキーを交換してしまうと、そのSASを普通に使っている人まで使えなくなってしまうので、緊急でなければ、そのSASに紐づいていない方のキーで新たにSASを作って、普通に使っている人に、その新たに作ったSASを配布してから、(悪い人に盗まれたSASに紐づく)キーの交換を行うといいと思います。
後、あらかじめ、上記のSASに紐づけるアクセスポリシーを設定しておくことで、盗まれた後に、そのアクセスポリシーの有効期限を切れさせるか、アクセスポリシー自体を削除することでも、SASのトークンを無効化できるとAzureに詳しい人?が言っていました(本当なのかな?)。
逆に、ユーザーの委任キーでSASを作成して、そのトークンを誰か悪意のある人に盗まれたら、緊急であればそのユーザーの権限をすべて無効にしてしまえばいいと思います(例、上記の、ユーザーに権限が無いとblobデータを書き込めないことによるセキュリティ)。
緊急でなければ、トークンの期限が切れるまで待つのもありですが、期限が切れるまでは、そのトークンは悪意ある人が使用できる状態です。
