

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

# パブリックサブネットのための属性ベースの予防的アクセスコントロールをデプロイする
<a name="deploy-preventative-attribute-based-access-controls-for-public-subnets"></a>

*Joel Alfredo Nunez Gonzalez と Samuel Ortega Sancho、Amazon Web Services*

## 概要
<a name="deploy-preventative-attribute-based-access-controls-for-public-subnets-summary"></a>

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

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

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

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

## 前提条件と制限事項
<a name="deploy-preventative-attribute-based-access-controls-for-public-subnets-prereqs"></a>

**前提条件**
+ 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 の影響](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html#scp-effects-on-permissions)」 を参照してください。これらの例外を検出するためのセキュリティコントロールを実装します。

## アーキテクチャ
<a name="deploy-preventative-attribute-based-access-controls-for-public-subnets-architecture"></a>

**ターゲットテクノロジースタック**
+ AWS アカウントまたは AWS Organizations の OU に適用される SCP
+ 次の IAM ロールは:
  + `AutomationAdminRole` — SCPの実装後にサブネットタグを変更し、VPC リソースを作成するために使用されます
  + `TestAdminRole` — SCP が、管理者権限を持つプリンシパルを含む他の IAM プリンシパルが、`AutomationAdminRole` 向けのアクションを実行することを妨げているかどうかをテストするために使用されます 

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

![タグは、ユーザーが NAT ゲートウェイ以外のリソースをパブリックサブネットにデプロイするのを阻止します。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/25f22f67-5bb6-42ac-8fd6-836e00c436f1/images/b8345c8c-0fc5-46a3-be60-c171979cf979.png)


1. ターゲットアカウントに `AutomationAdminRole` IAMロールを作成します。このロールにはネットワークリソースを管理する権限があります。このロール専用の以下の権限に注意します。
   + このロールは VPC とパブリックサブネットを作成できます。
   + このロールはターゲットサブネットのタグアサインを変更できます。
   + このロールはその自らの権限を管理できます。

1. AWS Organizations では、ターゲットの AWS アカウントまたは OU に SCP を適用します。サンプルポリシーについて、このパターンの「[追加情報](#deploy-preventative-attribute-based-access-controls-for-public-subnets-additional)」 を参照してください。

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

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

**自動化とスケール**

パブリックサブネットを保護するには、対応する「[AWS タグ](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)」 を適用する必要があります。SCP が適用された後、承認済のユーザーが `SubnetType:IFA` タグを持つサブネットに作成できる Amazon EC2 リソースの種類は NAT ゲートウェイだけです(`IFA` は*インターネット向けのアセット*を指します)。SCP は、インスタンスや Elastic Network Interface などの、他の Amazon EC2 リソースの作成を阻止します。これらのタグがパブリックサブネットに正しく適用されるように、`AutomationAdminRole` のロールを引き受ける CI/CD パイプラインを使用して VPC リソースを作成することをお勧めします。

## ツール
<a name="deploy-preventative-attribute-based-access-controls-for-public-subnets-tools"></a>

**AWS サービス**
+ 「[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。
+ [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) は、作成して一元管理している複数の AWS アカウントを１つの組織に統合するためのアカウント管理サービスです。AWS Organizations では、[サービスコントロールポリシー (SCP) ](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)は、組織のアクセス許可の管理に使用できる組織ポリシーの一種です。
+ [Amazon Virtual Private Cloud (Amazon VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html) を使用すると、定義した仮想ネットワーク内で AWS リソースを起動できます。この仮想ネットワークは、お客様自身のデータセンターで運用されていた従来のネットワークに似ていますが、AWS のスケーラブルなインフラストラクチャを使用できるというメリットがあります。

## エピック
<a name="deploy-preventative-attribute-based-access-controls-for-public-subnets-epics"></a>

### SCP を適用します
<a name="apply-the-scp"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| テスト管理者ロールを作成します。 | 管理者アカウントで、`TestAdminRole` という名前の IAM ロールを作成します。**AdministratorAccess** AWS マネージド IAM ポリシーを新しいロールにアタッチします。手順については、IAM ドキュメントの「[IAM ユーザーにアクセス許可を委任するロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)」 を参照してください。 | AWS 管理者 | 
| 自動化管理者ロールを作成します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-preventative-attribute-based-access-controls-for-public-subnets.html)以下は、`111122223333` アカウントからのロールをテストするために使用できる、信頼ポリシーの例です。<pre>{<br />    "Version": "2012-10-17",		 	 	 <br />    "Statement": [<br />        {<br />            "Effect": "Allow",<br />            "Principal": {<br />                "AWS": [<br />                    "arn:aws:iam::111122223333:root"<br />                ]<br />            },<br />            "Action": "sts:AssumeRole",<br />            "Condition": {}<br />        }<br />    ]<br />}</pre> | AWS 管理者 | 
| SCP を作成して添付します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-preventative-attribute-based-access-controls-for-public-subnets.html) | AWS 管理者 | 

### SCP をテストします
<a name="test-the-scp"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| VPC またはサブネットを作成します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-preventative-attribute-based-access-controls-for-public-subnets.html) | AWS 管理者 | 
| タグを管理します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-preventative-attribute-based-access-controls-for-public-subnets.html) | AWS 管理者 | 
| ターゲットサブネットでリソースをデプロイします。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-preventative-attribute-based-access-controls-for-public-subnets.html) | AWS 管理者 | 
| AutomationAdminRole ロールを管理します。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-preventative-attribute-based-access-controls-for-public-subnets.html) | AWS 管理者 | 

### クリーンアップ
<a name="clean-up"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| デプロイされたリソースをクリーンアップします。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/deploy-preventative-attribute-based-access-controls-for-public-subnets.html) | AWS 管理者 | 

## 関連リソース
<a name="deploy-preventative-attribute-based-access-controls-for-public-subnets-resources"></a>

**AWS ドキュメント**
+ [SCP のアタッチとデタッチ](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_attach.html)
+ [SCP の作成、更新、削除](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_create.html)
+ [AWS Config を使用して、パブリックサブネットに属性ベースのアクセス制御をデプロイする](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/deploy-detective-attribute-based-access-controls-for-public-subnets-by-using-aws-config.html)
+ 「[発見的コントロール](https://docs.aws.amazon.com/prescriptive-guidance/latest/aws-security-controls/detective-controls.html)」
+ 「[サービス認可リファレンス](https://docs.aws.amazon.com/service-authorization/latest/reference/reference.html)」
+ 「[AWS リソースへのタグ付け](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)」
+ 「[AWS 向けの ABAC とは?](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)」

「**追加の AWS リファレンス**」
+ 「[AWS Organizations のサービスコントロールポリシーを使用して、認可に使われるリソースタグを保護](https://aws.amazon.com/es/blogs/security/securing-resource-tags-used-for-authorization-using-service-control-policy-in-aws-organizations/)」 (AWS ブログ記事)

## 追加情報
<a name="deploy-preventative-attribute-based-access-controls-for-public-subnets-additional"></a>

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

```
{
  "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"]
        }
      }
    }
  ]
}
```