条件キーを含む RAM カスタムポリシーをアタッチして、RAM ユーザーが高リスクのセキュリティグループルールを作成したり、デフォルトセキュリティグループを使用したりすることを制限します。
背景情報
セキュリティグループは、クラウドにおける主要な防御層であり、分離境界です。機密性の高いポート (22、3389、80、8080、443) の開放や、承認オブジェクトとして 0.0.0.0/0 を使用するなど、ルールの設定を誤ると、ECS インスタンスや ApsaraDB RDS インスタンスなどの関連リソースが攻撃に晒されます。
RAM ユーザー間で一貫したセキュリティベースラインを適用するには、高リスクのセキュリティグループルールの作成または参照を禁止する RAM ポリシーを設定します。
RAM カスタムポリシーは、リソース、操作、および条件を正確に記述します。条件キーを使用して、高リスクのルールを拒否したり、承認されたルールのみを許可したりします。詳細については、「ポリシーの要素」の Condition セクションをご参照ください。
仕組み
RAM 条件キーは、2 つの方法で高リスクのセキュリティグループルールを制限します。
-
特定の IP アドレスまたはプロトコルを含むセキュリティグループルールを拒否し、承認されたルールのみを許可します。
-
ECS インスタンスの作成時にデフォルトセキュリティグループが使用されるのを防ぎます。
デフォルトセキュリティグループには機密性の高いルールが含まれています。詳細については、「デフォルトセキュリティグループ」をご参照ください。
次の表に、利用可能な RAM 条件キーを示します。
|
条件キー |
データ型 |
説明 |
|
ecs:SecurityGroupIpProtocols |
文字列 |
TCP や ICMP などのトランスポート層プロトコル。 |
|
ecs:SecurityGroupSourceCidrIps |
文字列 |
ソース IPv4 CIDR ブロックまたは IPv4 アドレス。 |
|
ecs:NotSpecifySecurityGroupId |
ブール値 |
セキュリティグループ ID が指定されているかどうか。 |
-
条件キーが配列の場合、セキュリティグループルールが配列内のいずれかの値に一致すると、条件が満たされます。
-
同じ条件で 2 つの条件キーが指定されている場合、セキュリティグループルールが両方の条件キーに一致すると、条件が満たされます。
操作手順
-
RAM 条件キーを使用してカスタムポリシーを作成します。詳細については、「カスタムポリシーの作成」をご参照ください。
このセクションと「結果の検証」セクションでは、「例2:承認オブジェクトとして 0.0.0.0/0 を含むセキュリティグループルールの作成を RAM ユーザーに禁止するカスタムポリシー」のカスタムポリシーを例として使用します。
説明カスタムポリシーのサンプルについては、「カスタムポリシーのサンプル」セクションをご参照ください。
-
カスタムポリシーを RAM ユーザーにアタッチします。詳細については、「RAM ユーザーへの権限付与」をご参照ください。
結果の検証
-
RAM ユーザーとして ECS コンソール にログインします。
-
カスタムポリシーが有効になっていることを確認します。
-
ターゲットリージョンにカスタムセキュリティグループが存在しないことを確認してから、デフォルトセキュリティグループを使用して ECS インスタンスを作成します。詳細については、「[カスタム起動] タブでのインスタンスの作成」をご参照ください。
説明選択したリージョンにカスタムセキュリティグループが存在しない場合、デフォルトセキュリティグループが自動的に作成されます。
ECS インスタンスの購入ページで次のエラーが表示された場合、RAM ユーザーはデフォルトセキュリティグループの使用を禁止されています。
エラーダイアログのタイトルが [作成失敗] の場合、インスタンスを作成する権限がないことを示しています。Alibaba Cloud アカウントの所有者に連絡し、RAM 権限を付与してもらってください。従量課金インスタンスを作成するには
ecs:RunInstances、サブスクリプションインスタンスを作成するにはecs:CreateInstance、注文を支払うにはbss:PayOrderの権限が必要です。 -
セキュリティグループを選択し、[承認オブジェクト] (送信元) を
0.0.0.0/0に設定してルールを作成します。 詳細については、「セキュリティグループルールを追加する」をご参照ください。ルールの作成に失敗し、以下のエラーが表示された場合、RAM ユーザーは [承認オブジェクト] を
0.0.0.0/0に設定してルールを作成することが禁止されています。エラーメッセージは「The current operation is not authorized. Contact the Alibaba Cloud account owner to grant RAM authorization before you perform this operation.」と表示されます。
-
カスタムポリシーのサンプル
例1:特定の承認オブジェクトを含むセキュリティグループルールのみの作成を RAM ユーザーに許可するカスタムポリシー
-
RAM ユーザーに、[承認オブジェクト] (ソース) が
140.205.XX.XX/27または140.205.XX.XX/28であるセキュリティグループルールのみの作成を許可し、ECS インスタンスの作成時にデフォルトセキュリティグループの使用を禁止するカスタムポリシー:説明要件に基づいて
XXを実際の値に置き換えてください。{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": [ "ecs:AuthorizeSecurityGroup", "ecs:ConfigureSecurityGroupPermissions", "ecs:ModifySecurityGroupRule" ], "Resource": "*", "Condition": { "ForAnyValue:StringNotLike": { "ecs:SecurityGroupSourceCidrIps": [ "140.205.XX.XX/27", "140.205.XX.XX/28" ] } } }, { "Effect": "Deny", "Action": [ "ecs:CreateInstance", "ecs:RunInstances" ], "Resource": "*", "Condition": { "Bool": { "ecs:NotSpecifySecurityGroupId": [ "true" ] } } } ] } -
RAM ユーザーに対し、
TCPの [承認オブジェクト] (ソース) として140.205.XX.XX/27を使用するセキュリティグループルールの作成のみを許可し、ECS インスタンスの作成時にデフォルトセキュリティグループの使用を禁止するカスタムポリシー:[]説明要件に応じて、
XXを実際の値に置き換えてください。{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": [ "ecs:AuthorizeSecurityGroup", "ecs:ConfigureSecurityGroupPermissions", "ecs:ModifySecurityGroupRule" ], "Resource": "*", "Condition": { "ForAnyValue:StringNotLike": { "ecs:SecurityGroupSourceCidrIps": [ "140.205.XX.XX/27" ] } } }, { "Effect": "Deny", "Action": [ "ecs:AuthorizeSecurityGroup", "ecs:ConfigureSecurityGroupPermissions", "ecs:ModifySecurityGroupRule" ], "Resource": "*", "Condition": { "ForAnyValue:StringNotLike": { "ecs:SecurityGroupIpProtocols": [ "TCP" ] } } }, { "Effect": "Deny", "Action": [ "ecs:CreateInstance", "ecs:RunInstances" ], "Resource": "*", "Condition": { "Bool": { "ecs:NotSpecifySecurityGroupId": [ "true" ] } } } ] }
例2:承認オブジェクトとして 0.0.0.0/0 を含むセキュリティグループルールの作成を RAM ユーザーに禁止するカスタムポリシー
RAM ユーザーによる [承認オブジェクト] (送信元) が 0.0.0.0/0 のセキュリティグループルールの作成と、ECS インスタンス作成時のデフォルトセキュリティグループの使用を禁止するカスタムポリシー:
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"ecs:AuthorizeSecurityGroup",
"ecs:ConfigureSecurityGroupPermissions",
"ecs:ModifySecurityGroupRule"
],
"Resource": "*",
"Condition": {
"ForAnyValue:StringLike": {
"ecs:SecurityGroupSourceCidrIps": [
"0.0.0.0/0"
]
}
}
},
{
"Effect": "Deny",
"Action": [
"ecs:CreateInstance",
"ecs:RunInstances"
],
"Resource": "*",
"Condition": {
"Bool": {
"ecs:NotSpecifySecurityGroupId": [
"true"
]
}
}
}
]
}
関連ドキュメント
-
RAM ポリシーを作成または更新する前に、その構文、構造、および評価プロセスを理解してください。詳細については、「ポリシーの構造と構文」および「ポリシー評価プロセス」をご参照ください。
-
RAM ポリシーのサンプルについては、「ポリシー例」をご参照ください。