属性ベースのアクセス制御 (ABAC) を使用してパブリックサブネットを保護 - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

属性ベースのアクセス制御 (ABAC) を使用してパブリックサブネットを保護

作成者: Joel Alfredo Nunez Gonzalez (AWS) と Samuel Ortega Sancho (AWS)

環境:PoC またはパイロット

テクノロジー: セキュリティ、アイデンティティ、コンプライアンス、ネットワーク、コンテンツ配信

AWS サービス: AWS Organizations、AWS 識別とアクセス管理

[概要]

集中型ネットワークアーキテクチャでは、検査とエッジ仮想プライベートクラウド (VPC) が、インターネットとの間のトラフィックなどの、すべてのインバウンドトラフィックとアウトバウンドトラフィックを集中させます。ただし、これによりボトルネックが発生したり、AWS Service Quotasの制限に達したりする可能性があります。ネットワークエッジセキュリティを VPC のワークロードと一緒にデプロイして、一般的な集中型アプローチと比較して、これまでにないスケーラビリティを提供します。これは分散型エッジアーキテクチャと呼ばれます。

パブリックサブネットをワークロードアカウントにデプロイすることには利点がありますが、アタックサーフェスが増えるため、新たなセキュリティリスクも生じます。これらの VPC のパブリックサブネットでは、アプリケーションロードバランサーや NAT ゲートウェイなどのElastic Load Balancing (ELB) リソースのみをデプロイすることを推奨します。専用のパブリックサブネットでロードバランサーと NAT ゲートウェイの使用は、インバウンドトラフィックとアウトバウンドトラフィックのきめ細かな制御に役立ちます。

属性ベースのアクセス制御 (ABAC)は、部署、役職、チーム名など、ユーザーの属性に基づいて、きめ細かなアクセス許可を設定する方法です。詳細については、「AWS のための ABAC」 をご参照ください。ABAC は、ワークロードアカウントのパブリックサブネットにガードレールを提供することができます。これにより、アプリケーションチームは、」インフラストラクチャのセキュリティを損なうことなく機敏に対応できます。

このパターンでは、AWS Organization の「サービスコントロールポリシー (SCP)」 と AWS 識別と管理(IAM) の「ポリシー」 を通じて ABAC を実装することによる、パブリックサブネットを保護する方法を説明します。SCP は、組織のメンバーアカウントまたは組織単位 (OU) のいずれかに適用されます。これらの ABAC ポリシーは、ユーザーがターゲットサブネットに NAT ゲートウェイをデプロイすることを許可し、EC2 インスタンスや Elastic Network Interface (ENI) などの他の Amazon Elastic Compute Cloud (Amazon EC2) リソースをデプロイすることを禁止します。  

前提条件と制限

前提条件

  • AWS Organizations 内の組織

  • AWS Organizations ルートアカウントに対する管理アクセス

  • 組織での、SCP をテストするためのアクティブメンバーアカウントまたは OU

制約事項

  • このソリューションの SCP は、サービスにリンクされたロールを使用する AWS サービスが、ターゲットサブネットにリソースをデプロイすることを阻止しません。これらのサービスの例としては、Elastic Load Balancing (ELB)、Amazon Elastic Container Service (Amazon ECS)、および Amazon Relational Database Service (Amazon RDS) があります。詳細については、AWS Organizations のドキュメントの「許可に対する SCP の影響」 を参照してください。これらの例外を検出するためのセキュリティコントロールを実装します。

アーキテクチャ

ターゲットテクノロジースタック

  • AWS アカウントまたは AWS Organizations の OU に適用される SCP

  • 次の IAM ロールは:

    • AutomationAdminRole — SCPの実装後にサブネットタグを変更し、VPC リソースを作成するために使用されます

    • TestAdminRole — SCP が、管理者権限を持つプリンシパルを含む他の IAM プリンシパルが、AutomationAdminRole 向けのアクションを実行することを妨げているかどうかをテストするために使用されます

ターゲットアーキテクチャ

SCP タグと IFA タグは、ユーザーが NAT ゲートウェイ以外のリソースをパブリックサブネットにデプロイすることを阻止します。
  1. ターゲットアカウントに AutomationAdminRole IAMロールを作成します。このロールにはネットワークリソースを管理する権限があります。このロール専用の以下の権限に注意します。

    • このロールは VPC とパブリックサブネットを作成できます。

    • このロールはターゲットサブネットのタグアサインを変更できます。

    • このロールはその自らの権限を管理できます。

  2. AWS Organizations では、ターゲットの AWS アカウントまたは OU に SCP を適用します。サンプルポリシーについて、このパターンの「追加情報」 を参照してください。

  3. CI/CD パイプライン内のユーザーまたはツールは、AutomationAdminRoleのロールを引き受けて、 SubnetTypeのタグをターゲットサブネットに適用します。

  4. 他の IAM ロールを引き受けることで、組織の IAM プリンシパルは、ターゲットサブネットの NAT ゲートウェイ、およびルートテーブルなどの AWS アカウントで許可されているその他のネットワークリソースを管理できます。IAMポリシ―を使用して、これらの許可を与します。詳細については、「Amazon VPCの識別とアクセス管理」を参照してください。

自動化とスケール

パブリックサブネットを保護するには、対応する「AWS タグ」 を適用する必要があります。SCP が適用された後、承認済のユーザーが SubnetType:IFA タグを持つサブネットに作成できる Amazon EC2 リソースの種類は NAT ゲートウェイだけです(IFAインターネット向けのアセットを指します)。SCP は、インスタンスや ENI などの、他の Amazon EC2 リソースの作成を阻止します。推奨は、これらのタグがパブリックサブネットに正しく適用されるように、VPC リソースを作成するAutomationAdminRole のロールを引き受ける CI/CD パイプラインを使用することです。

ツール

AWS サービス

  • AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。

  • AWS Organizations は、作成して一元管理している複数の AWS アカウントを1つの組織に統合するためのアカウント管理サービスです。AWS Organizations では、サービスコントロールポリシー (SCP) は、組織のアクセス許可の管理に使用できる組織ポリシーの一種です。

  • Amazon Virtual Private Cloud (Amazon VPC) を使用すると、定義した仮想ネットワーク内で AWS リソースを起動できます。この仮想ネットワークは、お客様自身のデータセンターで運用されていた従来のネットワークに似ていますが、AWS のスケーラブルなインフラストラクチャを使用できるというメリットがあります。

エピック

タスク説明必要なスキル

テスト管理者ロールを作成します。

管理者アカウントで、TestAdminRole という名前の IAM ロールを作成します。AWS マネージド AdministratorAccess IAM ポリシーを新しいロールにアタッチします。手順については、IAM ドキュメントの「IAM ユーザーにアクセス許可を委任するロールの作成」 を参照してください。

AWS 管理者

自動化管理者ロールを作成します。

  1. 管理者アカウントで、AutomationAdminRoleという名前の IAM ロールを作成します。

  2. AWS マネージド AdministratorAccess IAM ポリシーを新しいロールにアタッチします。

以下は、000000000000 アカウントからのロールをテストするために使用できる、信頼ポリシーの例です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::000000000000:root" ] }, "Action": "sts:AssumeRole", "Condition": {} } ] }
AWS 管理者

SCP を作成して添付します。

  1. 追加情報」 セクションにあるサンプルコードを使用して、セキュリティコントロールポリシーを作成します。手順については、AWS Organizations ドキュメントの「SCP の作成」 を参照してください。

  2. SCP をターゲット AWS アカウントまたは OU にアタッチします。手順については、AWS Organizations のドキュメントの「サービスコントロールポリシーのアタッチとデタッチ」 を参照してください。

AWS 管理者
タスク説明必要なスキル

VPC またはサブネットを作成します。

  1. ターゲット AWS の TestAdminRole アカウントでロールを引き受けます。

  2. VPC を作成するか、既存の VPC に新しいパブリックサブネットを作成してみます。手順については、Amazon VPC ドキュメントの「VPC、サブネット、他の VPC リソースを作成」 を参照してください。これらのリソースは作成できないはずです。

  3. AutomationAdminRole のロールを引き受けて、前のステップをやり直します。これでネットワークリソースを作成できます。

AWS 管理者

タグを管理します。

  1. ターゲット AWS の TestAdminRole アカウントで、ロールを引き受けます。

  2. 使用可能なパブリックサブネットに SubnetType:IFA タグを追加します。このタグは追加できるはずです。AWS コマンドラインインターフェイス (AWS CLI)を介してタグを追加する方法の手順は、AWS CLI コマンドリファレンスの create-tags」 を参照してください。

  3. 認証情報を変更することなく、このサブネットにアサインされた SubnetType:IFA のタグを変更します。このタグは変更できないはずです。

  4. AutomationAdminRole のロールを引き受けて、前のステップをやり直します。このロールは、このタグを追加したり変更したりできるはずです。

AWS 管理者

ターゲットサブネットでリソースをデプロイします。

  1. TestAdminRole のロールを引き受けます。

  2. SubnetType:IFA のタグが付けられたパブリックサブネットの場合、EC2 インスタンスを作成してみてください。手順については、Amazon EC2 ドキュメントの「インスタンスの起動」を参照してください。このサブネットでは、NAT ゲートウェイ以外の Amazon EC2 リソースを作成、変更、削除ができないはずです。

  3. 同じサブネット内に、NAT ゲートウェイを作成します。手順については、Amazon VPC ドキュメントの「NAT ゲートウェイの作成」 を参照してください。このサブネットでは NAT ゲートウェイの作成、変更、削除ができるはずです。

AWS 管理者

AutomationAdminRole ロールを管理します。

  1. TestAdminRole のロールを引き受けます。

  2. AutomationAdminRole のロールを変更してみます。手順については、IAM ドキュメントの「ロールの変更」 を参照してください。このロールは変更できないはずです。

  3. AutomationAdminRole のロールを引き受けて、前のステップをやり直します。これでロールを変更できます。

AWS 管理者
タスク説明必要なスキル

デプロイされたリソースをクリーンアップします。

  1. AWS アカウントまたは OU から SCP をデタッチします。手順については、AWS Organizations ドキュメントの「SCP のデタッチ」 を参照してください。

  2. SCP を削除します。手順については、「SCP の削除」 (AWS Organizations ドキュメント) を参照してください。

  3. AutomationAdminRole のロールと TestAdminRole のロールを削除します。手順については、IAM ドキュメントの「ロールの削除」 を参照してください。

  4. このソリューション用に作成した VPC やサブネットなどのネットワークリソースをすべて削除します。

AWS 管理者

関連リソース

AWS ドキュメント

追加の AWS リファレンス

追加情報

以下のサービスコントロールポリシーは、このアプローチを組織でテストするために使用できる例です。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyVPCActions", "Effect": "Deny", "Action": [ "ec2:CreateVPC", "ec2:CreateRoute", "ec2:CreateSubnet", "ec2:CreateInternetGateway", "ec2:DeleteVPC", "ec2:DeleteRoute", "ec2:DeleteSubnet", "ec2:DeleteInternetGateway" ], "Resource": [ "arn:aws:ec2:*:*:*" ], "Condition": { "StringNotLike": { "aws:PrincipalARN": ["arn:aws:iam::*:role/AutomationAdminRole"] } } }, { "Sid": "AllowNATGWOnIFASubnet", "Effect": "Deny", "NotAction": [ "ec2:CreateNatGateway", "ec2:DeleteNatGateway" ], "Resource": [ "arn:aws:ec2:*:*:subnet/*" ], "Condition": { "ForAnyValue:StringEqualsIfExists": { "aws:ResourceTag/SubnetType": "IFA" }, "StringNotLike": { "aws:PrincipalARN": ["arn:aws:iam::*:role/AutomationAdminRole"] } } }, { "Sid": "DenyChangesToAdminRole", "Effect": "Deny", "NotAction": [ "iam:GetContextKeysForPrincipalPolicy", "iam:GetRole", "iam:GetRolePolicy", "iam:ListAttachedRolePolicies", "iam:ListInstanceProfilesForRole", "iam:ListRolePolicies", "iam:ListRoleTags" ], "Resource": [ "arn:aws:iam::*:role/AutomationAdminRole" ], "Condition": { "StringNotLike": { "aws:PrincipalARN": ["arn:aws:iam::*:role/AutomationAdminRole"] } } }, { "Sid": "allowbydefault", "Effect": "Allow", "Action": "*", "Resource": "*" } ] }