すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:OpenAPI 呼び出しの送信元 IP アドレスの制限

最終更新日:Jan 14, 2026

Resource Access Management (RAM) ポリシーを設定して、許可される OpenAPI 呼び出しのソース IP アドレスを制限できます。これにより、攻撃者が漏洩した認証情報を使用して、インターネット上の任意の場所からクラウドリソースを制御またはアクセスするのを防ぎます。

セキュリティリスク

デフォルトでは、有効な AccessKey を持つエンティティは、インターネット上のどこからでも OpenAPI を呼び出して、ご利用のクラウド リソースにアクセスできます。設定ミス、ハードコーディング、または従業員の退職によって AccessKey が漏洩した場合、攻撃者はご利用のクラウド リソースを直接コントロールできるようになります。これは、データ盗難、悪意のあるリソース削除、または高額な請求につながる可能性のあるグローバルな脅威です。

ベストプラクティス

RAM ポリシーを使用して、送信元 IP アドレスを制限できます。AccessKey が漏洩した場合でも、攻撃が成功するのは、会社の出口 IP アドレスや Bastion ホストの IP アドレスなど、事前に定義された信頼できる IP アドレスから発信された場合に限られます。

コンソール

  1. RAM ユーザーを作成します。(RAM ポリシーでは、Alibaba Cloud アカウントの送信元 IP からのアクセスを制限することはできません。)

    1. Alibaba Cloud アカウントまたは RAM 管理者として Resource Access Management (RAM) コンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[ID 管理] > [ユーザー] を選択します。

    3. [ユーザー] ページで、[ユーザーの作成] をクリックします。プロンプトに従ってユーザー情報を入力し、[OK] をクリックして、セキュリティ認証を完了します。

  2. カスタムポリシーを作成します。

    1. RAM 管理者として RAM コンソールにログインします。左側のナビゲーションウィンドウで、[権限管理] > [アクセスポリシー] を選択します。

    2. [アクセスポリシー] ページで、[ポリシーの作成] をクリックします。

    3. [ポリシーの作成] ページで、[スクリプトエディター] タブをクリックします。ポリシードキュメントを入力し、[OK] をクリックします。

      {
        "Version": "1",
        "Statement": [
          {
            "Action": "ecs:*",  // ECS のすべての OpenAPI 操作。すべてのクラウドサービスのすべての OpenAPI 操作に適用するには、これを * に設定します。
            "Resource": "*",
            "Effect": "Allow",
            "Condition": {
              "IpAddress": {
                "acs:SourceIp": [
                  "200.1.xxx.xxx/24",  // 許可する IP アドレス範囲に置き換えます。
                  "213.1.xxx.xxx"      // 許可する単一の IP アドレスに置き換えます。
                ]
              }
            }
          }
        ]
      }
    4. [ポリシー名][説明] を入力し、[OK] をクリックして、セキュリティ認証を完了します。

  3. アクセスポリシーを RAM ユーザーにアタッチします。

    1. RAM 管理者として RAM コンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[ID 管理] > [ユーザー] を選択します。

    3. [ユーザー]ページで、対象の RAM ユーザーを見つけ、[操作]列の[権限の追加]をクリックします。

    4. [権限の付与] パネルで、アクセスポリシーを選択し、[権限を付与] をクリックします。

API

  1. CreateUser 操作を呼び出して RAM ユーザーを作成します:

    • UserName: RAM ユーザーのログイン名。

    • DisplayName: RAM ユーザーの表示名。

  2. CreatePolicy 操作を呼び出して RAM ポリシーを作成します:

    • PolicyName:ポリシーの名前。例:RestrictIPAccess

    • PolicyDocument: JSON 形式のポリシードキュメント。このドキュメントは、許可される IP アドレス範囲を指定します。

  3. AttachPolicyToUser 操作を呼び出して、ポリシーを RAM ユーザーにアタッチします:

    • PolicyType: ポリシーのタイプ。値を "Custom" に設定します。

    • PolicyName: ポリシーの名前。RestrictIPAccess など。

    • UserName: RAM ユーザーの名前。TestUser など。

説明

RAM ポリシーは、送信元 IP アドレスに基づいて VPC からの OpenAPI へのアクセスを直接制限することはできません。これは、acs:SourceIp 条件キーが、VPC 内のプライベート IP アドレスではなく、OpenAPI 呼び出しのパブリックエグレス IP アドレスまたは NAT Gateway のエグレス IP アドレスを使用するためです。

コンプライアンス

チェック: ソース IP 制限ポリシーがアタッチされていない RAM ユーザーを検索する

クラウドアシスタント CLI を使用して、次のスクリプトを実行できます。このスクリプトは、すべての RAM ユーザーを走査し、各ユーザーに送信元 IP 制限ポリシーがアタッチされているかどうかを確認します。

#!/bin/bash

# ポリシー名を定義します。
POLICY_NAME="RestrictIPAccess" # ご利用のポリシー名に置き換えてください。

# ポリシー ARN (Alibaba Cloud リソースネーム) を定義します。
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"  # ご利用のポリシー ARN に置き換えてください。

# すべての RAM ユーザーのリストを取得します。
USER_LIST=$(aliyun ram ListUsers | jq -r '.Users.User[].UserName')

# 各ユーザーを走査し、指定されたポリシーがアタッチされているか確認します。
for USER in $USER_LIST; do
  # ユーザーにアタッチされているポリシーのリストを取得します。
  POLICIES=$(aliyun ram ListPoliciesForUser --UserName $USER | jq -r '.Policies.Policy[].PolicyName')

  # ポリシーのリストにターゲットのポリシー名が含まれているか確認します。
  if ! echo "$POLICIES" | grep -q "$POLICY_NAME"; then
    echo "User $USER is not attached to policy $POLICY_ARN"
  fi
done

修正: ソース IP 制限ポリシーを RAM ユーザーにバッチでアタッチする

クラウドアシスタント CLI を使用して、次のスクリプトを実行できます。このスクリプトは、すべての RAM ユーザーを走査し、ポリシーがアタッチされていないユーザーにポリシーをアタッチします。

#!/bin/bash
# ポリシー名を定義します。
POLICY_NAME="RestrictIPAccess" # ご利用のポリシー名に置き換えてください。

# ポリシー ARN (Alibaba Cloud リソースネーム) を定義します。
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"   # ご利用のポリシー ARN に置き換えてください。

# すべての RAM ユーザーのリストを取得します。
USER_LIST=$(aliyun ram ListUsers | jq -r '.Users.User[].UserName')

# 各ユーザーを走査し、指定されたポリシーがアタッチされているか確認します。
for USER in $USER_LIST; do
  # ユーザーにアタッチされているポリシー名のリストを取得します (注:PolicyArn ではなく PolicyName を使用します)。
  POLICIES=$(aliyun ram ListPoliciesForUser --UserName $USER | jq -r '.Policies.Policy[].PolicyName')

  # ポリシーのリストにターゲットのポリシー名が含まれているか確認します。
  if ! echo "$POLICIES" | grep -q "^${POLICY_NAME}$"; then
    echo "User $USER is not attached to policy $POLICY_ARN"
    
    # ユーザーにポリシーをアタッチします。
    echo "Attaching policy $POLICY_ARN to user $USER ..."
    aliyun ram AttachPolicyToUser \
      --PolicyType Custom \
      --PolicyName $POLICY_NAME \
      --UserName $USER
    
    if [ $? -eq 0 ]; then
      echo "Policy $POLICY_ARN was successfully attached to user $USER"
    else
      echo "Failed to attach policy $POLICY_ARN. Check your permissions or if the policy exists."
    fi
  else
    echo "User $USER is already attached to policy $POLICY_ARN. Skipping."
  fi
done