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 ユーザーにアタッチされます。
-
Alibaba Cloud アカウントまたは RAM 管理者として RAM コンソールにログインします。
-
左側のナビゲーションペインで、[アイデンティティ] > [ユーザー] を選択します。
-
[ユーザー] ページで [ユーザーの作成] をクリックしてユーザー情報を入力し、[OK] をクリックしてセキュリティ検証を完了します。
ステップ 2:カスタムポリシーの作成
-
左側のナビゲーションペインで、[権限] > [ポリシー] を選択します。
-
[アクセスポリシー] ページで、[ポリシーの作成] をクリックします。
-
[ポリシーの作成] ページで、[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" ] } } } ] }ポリシーを保存する前に、プレースホルダーの値を置き換えてください。
-
[ポリシー名](例:
RestrictIPAccess)を入力し、必要に応じて説明を追加し、[OK] をクリックしてセキュリティ検証を完了します。
ステップ 3:RAM ユーザーへのポリシーのアタッチ
-
左側のナビゲーションペインで、[アイデンティティ] > [ユーザー] を選択します。
-
[ユーザー] ページで、目的の RAM ユーザーを見つけ、[操作] 列の [権限の追加] をクリックします。
-
[権限付与] パネルで、ポリシーを選択し、[権限付与] をクリックします。
API を使用したソース IP の制限
以下の RAM API を順番に呼び出します。
-
CreateUser API を呼び出して RAM ユーザーを作成します。
-
UserName:ログイン名。 -
DisplayName:表示名。
-
-
CreatePolicy API を呼び出してポリシーを作成します。
-
PolicyName:ポリシー名 (例:RestrictIPAccess)。 -
PolicyDocument:acs:SourceIpフィールドに許可された IP を含む JSON ポリシードキュメント。
-
-
AttachPolicyToUser API を呼び出して、ポリシーを RAM ユーザーにアタッチします。
-
PolicyType:Custom。 -
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