接続元 IP アドレスに基づいた制限を持つ IAM エンティティから AWS Marketplace を利用できない事象

記事タイトルとURLをコピーする

みなさん、こんにちは。 AWS CLI が好きなテクニカルサポート課の市野です。

弊社テクニカルサポート宛でいただいたお問い合わせで、私が認識していなかった挙動についての投稿となります。

発生していた事象

以下のような IAM ポリシーで、接続元グローバル IP アドレスに基づいて制約を設けていた際に、AWS Marketplace の利用ができなくなる事象が発生していました。

IAM ポリシーの例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "NotAction": [
                "kms:*"
            ],
            "Resource": "*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "203.0.113.0/24"
                    ]
                },
                "Bool": {
                    "aws:ViaAWSService": "false"
                }
            }
        }
    ]
}

事象の詳細

AWS マネジメントコンソールを利用した操作として、以下の流れの <6> の時点で、
You do not have the required permissions. Please contact your account admin to request the missing permissions. The missing permission(s) are: aws-marketplace:ViewSubscriptions, aws-marketplace:Subscribe. As a result, some controls on this page are disabled.
のエラーが発生していました。

  1. AWS マネジメントコンソールへのアクセス
  2. AWS Marketplace サービスへの遷移
  3. 「製品を検出」への遷移
  4. 「製品を検出」画面での製品を検索
  5. 「製品詳細ページ」への遷移
  6. 「製品詳細ページ」での「View purchase options」ボタンのクリック

事象の発生原因

AWS サポートへの確認の結果、現時点(2023年6月13日時点)において、Marketplace が aws:SourceIp 条件キーおよび aws:ViaAWSService 条件キーの組み合わせによるアクセス制御に対応していないこと が原因であることがわかりました。

対応策1

前述のような IAM ポリシーを維持したまま、AWS Marketplace の利用を可とするために、着想した対応策は、安直ではありますが "aws-marketplace:*" を許可するアクションとして設定する方法です。

ポリシーとして記載すると以下のような変更内容となります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "NotAction": [
                "aws-marketplace:*",
                "kms:*"
            ],
            "Resource": "*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "203.0.113.0/24"
                    ]
                },
                "Bool": {
                    "aws:ViaAWSService": "false"
                }
            }
        }
    ]
}

対応策2

上記対応策に加え、AWS サポートより以下の手法により、対応することが可能と案内がありました。

repost.aws

上記 re:Post の内容は、制御を行いたい送信元 IP アドレスからのみスイッチロール(AssumeRole アクション)を許可する IAM ロールを作成し、そのスイッチした先の IAM ロールの許可ポリシーにおいては送信元 IP アドレスによる制限は設けずに、必要な権限を付与するように設計するという主旨でした。

当初、私が着想した、既存の IAM ポリシーの許可条件に "aws-marketplace:*" を追加する方法では、AWS Marketplace が aws:SourceIp 条件キーおよび aws:ViaAWSService 条件キーの組み合わせによる制御を行えない以上、すべての IP アドレスから AWS Marketplace の操作を許してしまうことになります。

反面、後者のスイッチロールの際に IP アドレス制限を行う方法であれば、本来目的としていた接続元 IP アドレス制限を維持したまま、AWS Marketplace を利用させることができる実装になると理解しました。

まとめ

  • 現時点(2023年6月13日時点)において、Marketplace は aws:SourceIp 条件キーおよび aws:ViaAWSService 条件キーの組み合わせによるアクセス制御に対応していない。
  • この問題に対処するためには、以下、いずれかのアプローチが必要
    • IAM ポリシーで "aws-marketplace:*" のアクションを許可する。
      • ただし、この方法では、Marketplace が現時点で抱える問題により、すべての IPアドレスからの接続を許すものとなってしまう。
    • 制御を行いたい送信元 IP アドレスからのみスイッチロール(AssumeRole アクション)を許可する IAM ロールを作成し、そのスイッチした先の IAM ロールの許可ポリシーにおいては送信元 IP アドレスによる制限は設けずに、必要な権限を付与するように設計する
  • (個人としては)やっぱり IAM できめ細かい制御を行おうとした時には、深い IAM への理解と一層の精進が必要。

この投稿が、同じような問題でお困りのみなさまのお役に立てば幸いです。

ではまた。

市野 和明 (記事一覧)

マネージドサービス部・テクニカルサポート課

お客様から寄せられたご質問や技術検証を通じて得られた気づきを投稿していきます。

情シスだった前職までの経験で、UI がコロコロ変わる AWS においては GUI で手順を残していると画面構成が変わってしまって後々まごつくことが多かった経験から、極力変わりにくい AWS CLI での記事が多めです。

X(Twitter):@kazzpapa3(AWS Community Builder)