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

Elastic Compute Service:OpenAPI 呼び出しのソース IP の制限

最終更新日:May 16, 2026

RAM ポリシーを使用して OpenAPI の呼び出しを信頼できるソース IP に制限し、漏洩した AccessKey の影響範囲を縮小します。

セキュリティリスク

デフォルトでは、有効な AccessKey を持つエンティティは、どの IP アドレスからでも OpenAPI を呼び出すことができます。設定ミス、ハードコードされたソースコード、または従業員の退職によって AccessKey が漏洩すると、攻撃者はクラウド リソースを直接制御できるようになり、データ盗難、悪意のある削除、または予期しない料金が発生する可能性があります。

仕組み

acs:SourceIp 条件を持つ RAM ポリシーは、API の呼び出しを、会社のエグレス IP や Bastion ホスト IP などの信頼できる IP に制限します。AccessKey が漏洩した場合でも、呼び出しはこれらのアドレスからのみ成功します。

acs:SourceIp に複数の IP または CIDR 範囲が指定されている場合、それらは OR ロジックで評価されます。つまり、ソース IP が いずれかの エントリに一致すれば、呼び出しは成功します。

制限事項

  • RAM ユーザーのみ: ソース IP 制限ポリシーは RAM ユーザーにのみ適用され、Alibaba Cloud アカウント自体には適用されません。

  • パブリック IP のみacs:SourceIp 条件は、呼び出し元のパブリック エグレス IP または NAT ゲートウェイのエグレス IP を評価し、VPC 内のプライベート IP アドレスは評価しません。

前提条件

以下のものが必要です。

  • RAM 管理者権限を持つ Alibaba Cloud アカウント。

  • 許可するエグレス IP アドレスまたは CIDR 範囲 (例えば、会社のアウトバウンド IP または Bastion ホスト IP)。

RAM コンソールでのソース IP 制限

ステップ 1:RAM ユーザーの作成

ソース IP 制限ポリシーは、Alibaba Cloud アカウントではなく、RAM ユーザーにアタッチされます。

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

  2. 左側のナビゲーションペインで、[アイデンティティ] > [ユーザー] を選択します。

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

ステップ 2:カスタムポリシーの作成

  1. 左側のナビゲーションペインで、[権限] > [ポリシー] を選択します。

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

  3. [ポリシーの作成] ページで、[JSON] タブをクリックして、次のポリシーを入力します。

    フィールド 説明
    Action 許可する操作。すべての Elastic Compute Service (ECS) 操作の場合は ecs:* を使用し、すべてのクラウドサービスの場合は * を使用します。 "ecs:*"
    acs:SourceIp 許可する IP または CIDR 範囲。複数のエントリは OR ロジックを使用します。ソース IP がいずれかのエントリに一致すれば、呼び出しは成功します。 "200.1.1.0/24""213.1.2.3"
    {
      "Version": "1",
      "Statement": [
        {
          "Action": "ecs:*",
          "Resource": "*",
          "Effect": "Allow",
          "Condition": {
            "IpAddress": {
              "acs:SourceIp": [
                "200.1.xxx.xxx/24",
                "213.1.xxx.xxx"
              ]
            }
          }
        }
      ]
    }

    ポリシーを保存する前に、プレースホルダーの値を置き換えてください。

  4. [ポリシー名](例: RestrictIPAccess)を入力し、必要に応じて説明を追加し、[OK] をクリックしてセキュリティ検証を完了します。

ステップ 3:RAM ユーザーへのポリシーのアタッチ

  1. 左側のナビゲーションペインで、[アイデンティティ] > [ユーザー] を選択します。

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

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

API を使用したソース IP の制限

以下の RAM API を順番に呼び出します。

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

    • UserName:ログイン名。

    • DisplayName:表示名。

  2. CreatePolicy API を呼び出してポリシーを作成します。

    • PolicyName:ポリシー名 (例:RestrictIPAccess)。

    • PolicyDocumentacs:SourceIp フィールドに許可された IP を含む JSON ポリシードキュメント。

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

    • PolicyTypeCustom

    • PolicyName:例:RestrictIPAccess

    • UserName:例:TestUser

コンプライアンス

Alibaba Cloud CLI で以下のスクリプトを使用して、すべての RAM ユーザーのソース IP 制限を監査および修復します。

チェック:ソース IP 制限のない RAM ユーザーの検索

指定のポリシーがアタッチされていないすべての RAM ユーザーをリスト表示します。

#!/bin/bash

# ご自身のポリシー名と ARN に置き換えてください。
POLICY_NAME="RestrictIPAccess"
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"

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 にはポリシー $POLICY_ARN がアタッチされていません"
  fi
done

修正:ソース IP 制限の RAM ユーザーへの一括アタッチ

ポリシーをまだ持っていないすべての RAM ユーザーにポリシーをアタッチします。

#!/bin/bash

# ご自身のポリシー名と ARN に置き換えてください。
POLICY_NAME="RestrictIPAccess"
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"

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 にポリシー $POLICY_ARN をアタッチしています..."
    aliyun ram AttachPolicyToUser \
      --PolicyType Custom \
      --PolicyName $POLICY_NAME \
      --UserName $USER

    if [ $? -eq 0 ]; then
      echo "$USER にポリシーをアタッチしました。"
    else
      echo "ユーザー $USER へのポリシーのアタッチに失敗しました。権限を確認するか、ポリシーが存在することを確認してください。"
    fi
  else
    echo "ユーザー $USER にはすでにポリシーがあります。スキップします。"
  fi
done