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

Elastic Compute Service:RAM ポリシーを使用してクラウド操作を制約する

最終更新日:Nov 09, 2025

Resource Access Management (RAM) ポリシーの Condition および Deny メカニズムを使用して、セキュリティ標準とコンプライアンス要件を、クラウドプラットフォーム上で強制力のあるセキュリティベースラインに変換できます。このアプローチにより、安全でないクラウドリソースの作成と構成をソースで防ぐことができます。たとえば、ECS インスタンスへのパブリック IP アドレスの割り当てを禁止したり、ログインにキーペアの使用を強制したり、セキュリティグループが脆弱なポートを開くことを制限したりできます。これにより、デフォルトで安全なクラウド環境を構築できます。

セキュリティリスク

標準の RAM アクセスポリシーは通常、Allow モードを使用します。これは、ユーザーが実行できる操作を指定する権限を付与します。たとえば、ポリシーは ecs:RunInstances を使用して ECS インスタンスの作成を許可できます。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",  #許可
      "Resource": "acs:ecs:*:*:instance/*", #リソース範囲
      "Action": [   #OpenAPI 操作
        "ecs:RunInstances"
        ]
    }
}

このモードは単純ですが、権限の範囲内で過度の自由を与えることにより、隠れた脅威をもたらします。これにより、セキュリティ標準を満たさないリソースが作成される可能性があります。例:

  • 攻撃対象領域の露出: 内部サービス専用のデータベースサーバーに、誤って Elastic IP アドレス (EIP) が割り当てられます。

  • 脆弱な認証情報: ECS インスタンスの作成時にパスワードベースのログイン方法が使用されると、インスタンスはブルートフォース攻撃に対して脆弱になります。

  • コンプライアンス違反: セキュリティ強化が施された会社の標準イメージを使用せずにリソースが作成されます。

ベストプラクティス

コア原則

コア原則は、Allow ポリシーの上に条件付き Deny ポリシーのレイヤーを追加することです。

  1. Deny が優先: RAM が操作リクエストを評価するとき、関連するすべてのポリシーをチェックします。Deny ポリシールールが一致した場合、Allow ポリシーも存在するかどうかに関係なく、操作は直ちに拒否されます。

  2. 正確な条件付き制約: Deny ポリシーには Condition ブロックを含めることができます。Deny 効果は、操作が指定された Action、Resource、および Condition に一致する場合にのみトリガーされます。

たとえば、ユーザーが任意のインスタンスリソース (acs:ecs:*:*:instance/*) のインスタンス (ecs:RunInstances) を作成するときに、パブリック IP アドレスがアタッチされている場合 ("ecs:AssociatePublicIpAddress": "true")、操作は拒否されます ("Effect": "Deny")。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Deny",  #拒否
      "Resource": "acs:ecs:*:*:instance/*", #リソース範囲
      "Action": [   #OpenAPI 操作
        "ecs:RunInstances"
      ],
      "Condition": {  #条件付きルール
        "Bool": {
            "ecs:AssociatePublicIpAddress": "true"   #条件キーのアサーション
        }
      }
    }
}

この「Allow + Deny with Condition」の組み合わせは、まず操作に対して広範な Allow 権限を付与します。次に、セキュリティベースラインに準拠しない特定の操作を正確に拒否することで、セーフガードとして機能します。たとえば、「ECS インスタンスの作成を許可するが、パブリック IP アドレスをアタッチしようとした場合は操作を拒否する」などです。これにより、セキュリティポリシーは単なるガイドラインではなく、プラットフォーム上で強制力のあるルールになります。

手順

制約したいエンティティには、操作を許可する AliyunECSFullAccess などの Allow ポリシーと、作成した Deny ポリシーの 2 つのポリシーをアタッチする必要があります。ユーザーが操作を実行すると、Allow ポリシーが権限を付与し、Deny ポリシーはセキュリティ監査役として機能し、準拠していない試みを拒否します。次の手順では、RAM ポリシーに基づいてセキュリティベースラインを作成し、実装する方法を説明します。

  1. 制約する主要な操作と条件を特定する

    まず、適用したいセキュリティルールを特定し、対応する RAM Action と条件キーを見つけます。条件キーは、Alibaba Cloud サービス API が評価のために RAM に提供するパラメーターです。これらのキーは、特定のサービスの API ドキュメントに記載されています。たとえば、ecs:RunInstances 操作の場合、サポートされているすべての条件キーは、RunInstances ドキュメントの「Authorization Information」セクションにあります。

  2. 条件付き Deny アクセスポリシーを作成する

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

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

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

      次の例は、一般的で検証済みのアクセスポリシーを示しています。

      例 1: ECS インスタンスの作成時にパブリック IP アドレスのアタッチを禁止する

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Deny",
            "Action": "ecs:RunInstances",
            "Resource": "acs:ecs:*:*:instance/*",
            "Condition": {
              "Bool": {
                "ecs:AssociatePublicIpAddress": "true"
              }
            }
          }
        ]
      }

      例 2: ECS インスタンスの作成時にログインに SSH キーペアの使用を強制する

      "Null": {"ecs:KeyPairName": "true"} は、ecs:KeyPairName パラメーターが空の場合 (ユーザーがキーペアを選択しなかった場合)、条件が満たされ、Deny 操作が有効になることを意味します。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": "ecs:RunInstances",
                  "Effect": "Deny",
                  "Resource": "acs:ecs:*:*:instance/*",
                  "Condition": {
                      "Null": {
                          "ecs:KeyPairName": "true"
                      }
                  }
              }
          ]
      }

      例 3: セキュリティグループルールが脆弱なポートをインターネット (0.0.0.0/0) に開くことを禁止する

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": "ecs:AuthorizeSecurityGroup",
                  "Effect": "Deny",
                  "Resource": "acs:ecs:*:*:securitygroup/*",
                  "Condition": {
                      "StringEquals": {
                          "ecs:SourceCidrIp": "0.0.0.0/0"
                      },
                      "ForAnyValue:StringEquals": {
                          "ecs:PortRange": [
                              "22/22",
                              "3389/3389",
                              "3306/3306",
                              "6379/6379",
                              "27017/27017"
                          ]
                      }
                  }
              }
          ]
      }

      注: ForAnyValue:StringEquals は、ユーザーが開こうとするポート範囲がリスト内のいずれかの範囲と一致する場合に条件が満たされることを意味します。

    4. [ポリシー名][メモ] を入力し、[OK] をクリックして、セキュリティ認証を完了します。

  3. アクセスポリシーをアタッチする

    ポリシーを作成したら、制約したい RAM ユーザー、ユーザーグループ、またはロールにアタッチします。

    1. RAM コンソールにログインします。左側のナビゲーションウィンドウで、[ID 管理] > [ユーザー] を選択します。

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

    3. [権限の追加] パネルで、アクセスポリシーを選択し、[OK] をクリックします。