

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

# スタックポリシーを制限および要求する
<a name="limiting-and-requiring-stack-policies"></a>

最小特権のアクセス許可のベストプラクティスとして、IAM プリンシパルにスタックポリシーの割り当てを要求すること、IAM プリンシパルが割り当てできるスタックポリシーを制限することを検討してください。通常は、IAM プリンシパルにカスタムスタックポリシーの作成や自身のスタックへの割り当ての権限を与えないでください。

スタックポリシーを作成したら、S3 バケットにアップロードすることを推奨します。その後、`cloudformation:StackPolicyUrl` 条件キーを使用して S3 バケットのスタックポリシーの URL を指定することで、これらのスタックポリシーを参照できます。

## アクセス許可を付与してスタックポリシーをアタッチする
<a name="granting-permissions-to-attach-stack-policies"></a>

最小特権のアクセス許可のベストプラクティスとして、IAM プリンシパルが CloudFormation のスタックにアタッチできるスタックポリシーを制限することを検討してください。IAM プリンシパルの ID ベースのポリシーでは、IAM プリンシパルが割り当てのアクセス許可を持つスタックポリシーを指定できます。こうすることで IAM プリンシパルがスタックポリシーをアタッチできなくなり、設定ミスのリスクを軽減できます。

例えば、組織に要件の異なるさまざまなチームがあるとします。そのため、各チームはチーム固有の CloudFormation スタックに対するスタックポリシーを構築します。共有環境で、すべてのチームがスタックポリシーを同じ S3 バケットに保存すると、あるチームのメンバーが、利用はできるが自チームの CloudFormation スタック向けではないスタックポリシーをアタッチしてしまう可能性があります。そのような状況を回避するには、ポリシーステートメントを定義して、IAM プリンシパルが特定のスタックポリシーのみアタッチできるようにできます。

次のサンプルポリシーは、IAM プリンシパルが S3 バケット内のチーム固有フォルダに保存されているスタックポリシーをアタッチできるようにします。このバケットに、承認されたスタックポリシーを保存できます。

```
{
  "Version": "2012-10-17",		 	 	 		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudformation:SetStackPolicy"
      ],
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "cloudformation:StackPolicyUrl": "{{<Bucket URL>}}/{{<Team folder>}}/*"
        }
      }
    }
  ]
}
```

このポリシーステートメントでは、IAM プリンシパルがすべてのスタックにスタックポリシーを割り当てることを要求しません。IAM プリンシパルが特定のスタックポリシーを持つスタックを作成する権限を持っていても、スタックポリシーを持たないスタックを作成するように選択できます。

## スタックポリシーを要求する
<a name="requiring-stack-policies"></a>

すべての IAM プリンシパルがスタックポリシーを確実にスタックに割り当てるように、サービスコントロールポリシー (SCP) またはアクセス許可の境界を予防的ガードレールとして定義できます。

以下のサンプルポリシーは、スタックの作成時に、IAM プリンシパルにスタックポリシーの割り当てを要求する SCP を設定する方法を示しています。IAM プリンシパルがスタックポリシーをアタッチしないと、スタックを作成できません。このポリシーはさらに、スタックの更新権限を持つ IAM プリンシパルが、更新中にスタックポリシーを削除することを防止します。このポリシーは `cloudformation:StackPolicyUrl` 条件キーを使用することで `cloudformation:UpdateStack` アクションを制限します。

```
          {
  "Version": "2012-10-17",		 	 	 		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "cloudformation:CreateStack",
        "cloudformation:UpdateStack"
      ],
      "Resource": "*",
      "Condition": {
        "Null": {
          "cloudformation:StackPolicyUrl": "true"
        }
      }
    }
  ]
}
```

このポリシーステートメントを、アクセス許可の境界ではなく SCP に含めることで、組織内のすべてのアカウントにガードレールを適用できます。これにより、以下のことが可能になります。

1.  AWS アカウント内の複数の IAM プリンシパルにポリシーを個別にアタッチする労力を削減できます。アクセス許可の境界は、IAM プリンシパルにのみ直接アタッチできます。

1. 異なる AWS アカウントに対し、アクセス許可の境界のコピーを複数作成して管理する労力を削減できます。これにより、複数の同じアクセス許可の境界で設定エラーが発生するリスクを軽減できます。

**注記**  
SCP とアクセス許可の境界は、1 つのアカウントまたは組織内で IAM プリンシパルが使用できるアクセス許可の最大数を定義する、アクセス許可のガードレールです。これらのポリシーが IAM プリンシパルにアクセス許可を付与することはありません。アカウントまたは組織内のすべての IAM プリンシパルがスタックポリシーを割り当てる要件を標準化したい場合は、アクセス許可ガードレールと ID ベースのポリシーの両方を使用する必要があります。