[アップデート]Amazon SQSでもタグベースのアクセス制御(ABAC)が可能になりました!

Amazon SQSくんが対応したことにより、アプリケーション統合サービスが全て対応したことになったみたい。
2022.11.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、AWS事業本部@福岡オフィスのべこみん(@beco_minn)です。

今日のアップデートでAmazon SQSがABAC(attribute-based access control)に対応し、タグによるアクセス制御が可能になりました。

ざっくりまとめ

  • Amazon SQSがABAC(attribute-based access control)に対応した
  • つまり、タグベースでのアクセス制御が可能になった
  • アプリケーション統合サービスでABACに対応していないのはAmazon SQSだけだった

ABAC(attribute-based access control)とは

ABAC(attribute-based access control)とは、その名の通り属性ベースでアクセス制御を行う仕組みです。AWSでは各IAMリソースや各AWSリソースに付与する"タグ"がこの属性にあたります。

ABACに関しての詳細は下記公式ドキュメントをご参照ください。

また、ABACの設計や運用に関しては下記記事が非常におすすめです。ABACへの理解も深まると思いますので是非ご一読ください。

現在ABACに対応しているAWSサービス

記事執筆時点(2022/11/18)でABACに対応しているAWSサービスは下記ページのEnglish版から確認することが出来ます。日本語版は未対応でした。

日本語版のページと見比べると、今回のアップデートで記載されているアプリケーション統合サービスが全てABACに対応したことが分かりますね。

ちなみに記事執筆時点では英語版のみですが、Amazon SQSのドキュメントにもABACに関する記載がありました。テスト方法も書いてあって非常に丁寧ですね。

やってみた

というわけでAmazon SQSのアクセス制御をやってみます。

今回は簡単に以下のような手順で確認をしてみます。

  1. valueが異なるタグを付与した2つのキューを作成する
  2. 片方のキューに対して全てのアクションが行えないIAMポリシーを作成して、確認用のIAMユーザーにアタッチする
  3. 確認用のユーザーでマネジメントコンソール上からAmazon SQSの一覧を参照し、アクションが拒否されているキューが表示されておらず、もう片方のキューだけが表示されていれば成功

まずはキューを作成します。

今回は environment:prod, environment:stg という異なるタグをつけた2つのキューを作成しました。

次に environment:prod に対して全てのアクションを拒否するIAMポリシーを作成し、確認用のIAMユーザーにアタッチします。

作成したのは下記のIAMポリシー sqs-abac-deny-prod

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyAccessForProd",
            "Effect": "Deny",
            "Action": "sqs:*",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "aws:ResourceTag/environment": "prod"
                }
            }
        }
    ]
}

確認用のユーザーにはPowerUserAccessも付与済みです。

それでは確認用のユーザーでAmazon SQSのコンソールを確認してみましょう。

はい、確かに拒否したprod-queueは表示されていませんね。

Chromeの開発者ツールで確認したところ、prod-queueに対するgetQueueAttributesが拒否されたようです。

下図はprod-queueに対するPOSTリクエストのペイロードです。このリクエストの結果は403だったので図内左の「sqs」が赤色になっています。すぐ下の「sqs」リクエストはstg-queueに対するものです。

レスポンスはこんな感じ

<?xml version="1.0"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Type>Sender</Type><Code>AccessDenied</Code><Message>Access to the resource https://sqs.ap-northeast-1.amazonaws.com/ is denied.</Message><Detail/></Error><RequestId>8555680f-9e19-5683-a79f-33febd090f31</RequestId></ErrorResponse>

まとめ

というわけでSQSもABACに対応しました!めでたい。

使い方は限られますが、アクセス制御の選択肢が増えるのは嬉しいですね。

AWSで一番最初(2004年11月)にβ版が公開されたサービスことAmazon SQSくんがアプリケーション統合サービスの中で一番最後にABAC対応したというのが個人的に面白かったです。

本記事がどなたかのお役に立てれば幸いです。

以上、べこみんでした。