サービスマネージド型のアクセス許可を持つ AWS CloudFormation StackSets の作成 - AWS CloudFormation

サービスマネージド型のアクセス許可を持つ AWS CloudFormation StackSets の作成

サービスマネージド型のアクセス許可を使用すると、AWS Organizations が管理する特定のリージョン内のアカウントにスタックをデプロイできます。このモデルでは、必要な IAM ロールを作成する必要はありません。ユーザーの代わりに CloudFormation が IAM ロールを作成します。詳細については、「信頼されたアクセスをアクティブ化する」を参照してください。

考慮事項

サービスマネージド型のアクセス許可を持つ StackSet を作成する前に、次の点を考慮してください。

  • サービスマネージド型のアクセス許可を持つ StackSets は、委任された管理者によって作成された StackSets を含め、管理アカウントに作成されます。

  • StackSet は、組織全体 (すべてのアカウントを含む) または指定した組織単位 (OU) をターゲットにすることができます。StackSet が親 OU をターゲットにする場合、StackSet は子 OU もターゲットにします。StackSet が特定の OU をターゲットにする場合、それらの OU 内のすべてのアカウントがデフォルトで含まれます。ただし、アカウントフィルターオプションを使用して特定のアカウントをターゲットにすることはできます。

  • 複数の StackSets で同じ組織または OU をターゲットにすることができます。

  • StackSet は組織外のアカウントをターゲットにすることはできません。

  • StackSet はネストされたスタックをデプロイできません。

  • CloudFormation は、管理アカウントが組織内または組織の OU 内にあっても、スタックを組織の管理アカウントにデプロイしません。

  • 自動デプロイは StackSet レベルで設定されます。OU、アカウント、リージョンを選択して自動デプロイを調整することはできません。

  • 管理アカウントにサインインするために使用する IAM プリンシパルエンティティ (ユーザー、ロール、グループ) のアクセス許可によって、StackSets でデプロイが許可されるかどうかが決まります。組織にデプロイするアクセス許可を付与する IAM ポリシーの例については、「リージョンとリソースタイプに基づいてスタックセットのオペレーションを制限する」を参照してください。

  • 委任された管理者は、組織内のアカウントにデプロイするための完全なアクセス許可を持っています。管理アカウントでは、特定の OU にデプロイしたり、特定の StackSet のオペレーションを実行したりする、委任管理者のアクセス許可を制限することはできません。

サービスマネージド型のアクセス許可を持つ StackSet の作成 (コンソール)

StackSet を作成するには
  1. AWS Management Console にサインインし、AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。

  2. 画面の上部のナビゲーションバーで、StackSet を管理する AWS リージョン を選択します。

  3. ナビゲーションペインから [StackSets] を選択します。

  4. [StackSets] ページの上部から [StackSets の作成] を選択します。

  5. [アクセス権限] で、[Service-managed permissions (サービスマネージド型のアクセス許可)] を選択します。

    注記

    AWS Organizations との信頼されたアクセスが無効になっている場合は、バナーが表示されます。サービスマネージド型のアクセス許可を持つ StackSet を作成または更新するには、信頼されたアクセスが必要です。組織の管理カウントの管理者のみが、AWS Organizations を使用して StackSets のための信頼されたアクセスをアクティブ化する のアクセス許可を持ちます。

  6. [前提条件 − テンプレートの準備] で、[テンプレートの準備完了] を選択します。

  7. [Specify template (テンプレートの指定)] で、スタックテンプレートを含む S3 バケットの URL を指定するか、スタックテンプレートファイルをアップロードするかを選択します。[次へ] を選択します。

  8. [StackSet の詳細を指定] ページで、StackSet の名前を指定し、パラメータを指定して、[次へ] を選択します。

  9. [StackSet オプションの設定] ページの [タグ] で、スタックのリソースに適用するタグを指定します。AWS でのタグの使用方法に関する詳細については、AWS Billing and Cost Management ユーザーガイドの「AWS コスト配分タグを使用してコストを整理および追跡する」を参照してください。

  10. [実行設定] で、[アクティブ] を選択して CloudFormation の最適化されたオペレーション処理を有効にします。

    • 競合しないオペレーションは、デプロイ時間を短縮するために同時に実行されます。

    • 競合するオペレーションは自動的にキューに入れられ、リクエストされた順序で処理されます。

    オペレーションが実行中またはキューに入れられている間、CloudFormation ではオペレーションが競合しない場合でもすべての受信オペレーションがキューに入ります。この間は実行設定を変更できません。

  11. テンプレートに IAM リソースが含まれる場合は、[機能] で[I acknowledge that this template may create IAM resources (このテンプレートが IAM リソースを作成する可能性を認識しています)] を選択して、テンプレート内の IAM リソースを使用することを指定します。詳細については、「CloudFormation テンプレートでの IAM リソースの承認」を参照してください。

  12. [次へ] を選択して続行し、信頼されたアクセスがまだアクティブ化になっていない場合はアクティブ化します。

  13. [デプロイオプションの設定]ページの[デプロイターゲット] で、次のいずれかを実行します。

    • 組織内のすべてのアカウントにデプロイするには、[Deploy to organization (組織にデプロイ)] を選択します。

    • 特定の OU のすべてのアカウントにデプロイするには、[Deploy to organizational units (OUs) (組織単位 (OU) にデプロイ)] を選択します。[Add an OU (OU の追加)] を選択し、テキストボックスにターゲット OU ID を貼り付けます。新しいターゲット OU ごとに繰り返します。

    [組織単位 (OU) へのデプロイ] を選択した場合、[アカウントフィルタータイプ] で、次のいずれかのオプションを選択し、アカウント番号を指定することで、デプロイターゲットを特定の個々のアカウントに設定できます。

    • [なし] (デフォルト) – 指定した OU 内のすべてのアカウントにスタックをデプロイします。

    • [共通集合] – 選択した OU 内の特定の個々のアカウントにスタックをデプロイします。

    • [差異] – 特定のアカウントを除く、選択した OU 内のすべてのアカウントにスタックをデプロイします。

    • [和集合] – 指定した OU と追加の個々のアカウントにスタックをデプロイします。

  14. [自動デプロイ] で、今後ターゲットの組織または OU に追加されるアカウントに自動デプロイを行うかどうかを選択します。詳細については、「AWS Organizations で StackSets の自動デプロイを有効または無効にする」を参照してください。

  15. 自動デプロイを有効にした場合、[Account removal behavior (アカウントの削除の動作)] で、ターゲットの組織または OU からアカウントを削除するときに、スタックリソースを保持するか削除するかを選択します。

    注記

    [スタックを保持] を選択すると、スタックは StackSet から削除されますが、スタックとそれに関連付けられたリソースは保持されます。リソースは現在の状態のままですが、StackSet には含まれなくなります。

  16. [リージョンの指定] で、スタックをデプロイするリージョンを選択します。

  17. [デプロイオプション] で、次の操作を行います。

    • [同時アカウントの最大数] で、同時に処理されるアカウントの数を指定します。

    • [障害耐性] には、リージョンごとに許可されるアカウント障害の最大数を指定します。この制限に達すると、オペレーションは停止し、他のリージョンには進みません。

    • [リージョンの同時実行] で、リージョンの処理方法を選択します。[順次] (一度に 1 つのリージョン) または [並列] (複数のリージョンを同時に) を選択できます。

    • [同時実行モード] で、オペレーションの実行中に同時実行がどのように動作するかを選択します。

      • [厳格な耐障害性] – 障害発生時の同時実行レベルを下げ、[障害耐性] の値を +1 の範囲内にとどめます。

      • [ソフトな障害耐性] – 障害に関係なく、指定された同時実行レベル ([同時アカウントの最大数] の値) を維持します。

  18. [次へ] を選択して続行します。

  19. [レビュー] ページで、StackSet が正しいリージョンに正しいアカウントをデプロイすることを確認し、[StackSet の作成] を選択します。

    [StackSet の詳細] ページが開きます。StackSet 内のスタックの作成の進行状況とステータスを表示できます。

サービスマネージド型のアクセス許可を持つ StackSet 作成 (AWS CLI)

このセクションの手順に従い、AWS CLI を使用して次の操作を実行します。

  • StackSet コンテナを作成します。

  • スタックインスタンスをデプロイします。

注記

委任管理者として機能する場合は、コマンドに --call-as DELEGATED_ADMIN を含める必要があります。

Deploy to your organization
StackSet を作成するには
  1. create-stack-set コマンドを使用して、my-stackset という名前の新しい StackSet を作成します。次の例では、S3 バケットに保存されているテンプレートを使用し、自動デプロイを有効にして、アカウントが削除されたときにスタックを保持します。詳細については、「AWS Organizations で StackSets の自動デプロイを有効または無効にする」を参照してください。

    aws cloudformation create-stack-set \ --stack-set-name my-stackset \ --template-url https://s3.region-code.amazonaws.com/amzn-s3-demo-bucket/MyApp.template \ --permission-model SERVICE_MANAGED \ --auto-deployment Enabled=true,RetainStacksOnAccountRemoval=true
  2. list-stack-sets コマンドを使用して、StackSet が作成されたことを確認します。新しい StackSet が結果に表示されます。

    aws cloudformation list-stack-sets
    • メンバーアカウントにサインインしているときに --call-as オプションを DELEGATED_ADMIN に設定した場合、list-stack-sets は組織の管理アカウント内のサービスマネージド型のアクセス許可を持つすべての StackSets を返します。

    • AWS アカウント にサインインしているときに --call-as オプションを SELF に設定した場合、list-stack-sets は AWS アカウント 内のすべてのセルフマネージド型の StackSets を返します。

    • 組織の管理アカウントにサインインしているときに --call-as オプションを SELF に設定した場合、list-stack-sets は組織の管理アカウント内のすべての StackSets を返します。

  3. create-stack-instances コマンドを使用して、StackSet にスタックを追加します。--deployment-targets オプションには、組織内のすべてのアカウントにデプロイする組織のルート ID を指定します。

    --operation-preferences オプションを使用して、同時アカウント処理およびその他のデプロイ設定を設定します。この例では、カウントベースの設定を使用します。MaxConcurrentCountFailureToleranceCount + 1 を超えることはできません。パーセンテージベースの設定の場合は、代わりに FailureTolerancePercentage または MaxConcurrentPercentage を使用します。

    aws cloudformation create-stack-instances --stack-set-name my-stackset \ --deployment-targets OrganizationalUnitIds=r-a1b2c3d4e5 \ --regions us-west-2 us-east-1 \ --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0

    詳細については、「AWS CloudFormation API リファレンス」の「CreateStackInstances」を参照してください。

  4. create-stack-instances 出力の一部として返された operation-id を使用して、次の describe-stack-set-operation コマンドを使用し、スタックが正常に作成されたことを確認します。

    aws cloudformation describe-stack-set-operation \ --stack-set-name my-stackset \ --operation-id operation_ID
Deploy to organizational units (OUs)
StackSet を作成するには
  1. create-stack-set コマンドを使用して、my-stackset という名前の新しい StackSet を作成します。次の例では、S3 バケットに保存されているテンプレートを使用し、KeyPairName に値 TestKey を設定するパラメータが含まれています

    aws cloudformation create-stack-set \ --stack-set-name my-stackset \ --template-url https://s3.region-code.amazonaws.com/amzn-s3-demo-bucket/MyApp.template \ --permission-model SERVICE_MANAGED \ --parameters ParameterKey=KeyPairName,ParameterValue=TestKey
  2. list-stack-sets コマンドを使用して、StackSet が作成されたことを確認します。新しい StackSet が結果に表示されます。

    aws cloudformation list-stack-sets
    • メンバーアカウントにサインインしているときに --call-as オプションを DELEGATED_ADMIN に設定した場合、list-stack-sets は組織の管理アカウント内のサービスマネージド型のアクセス許可を持つすべての StackSets を返します。

    • AWS アカウント にサインインしているときに --call-as オプションを SELF に設定した場合、list-stack-sets は AWS アカウント 内のすべてのセルフマネージド型の StackSets を返します。

    • 組織の管理アカウントにサインインしているときに --call-as オプションを SELF に設定した場合、list-stack-sets は組織の管理アカウント内のすべての StackSets を返します。

  3. create-stack-instances コマンドを使用して、StackSet にスタックを追加します。--deployment-targets オプションで、デプロイ先の OU ID を指定します。

    --operation-preferences オプションを使用して、同時アカウント処理およびその他のデプロイ設定を設定します。この例では、カウントベースの設定を使用します。MaxConcurrentCountFailureToleranceCount + 1 を超えることはできません。パーセンテージベースの設定の場合は、代わりに FailureTolerancePercentage または MaxConcurrentPercentage を使用します。

    aws cloudformation create-stack-instances --stack-set-name my-stackset \ --deployment-targets OrganizationalUnitIds=ou-rcuk-1x5j1lwo,ou-rcuk-slr5lh0a \ --regions us-west-2 us-east-1 \ --operation-preferences MaxConcurrentCount=1,FailureToleranceCount=0

    詳細については、「AWS CloudFormation API リファレンス」の「CreateStackInstances」を参照してください。

  4. create-stack-instances 出力の一部として返された operation-id を使用して、次の describe-stack-set-operation コマンドを使用し、スタックが正常に作成されたことを確認します。

    aws cloudformation describe-stack-set-operation \ --stack-set-name my-stackset \ --operation-id operation_ID
Deploy to specific accounts in OUs

特定の組織単位 (OU) をターゲットにし、アカウントフィルタリングを使用して、スタックデプロイを受信するアカウントを正確に制御できます。デフォルトでは、アカウントフィルタリングが指定されていない場合、スタックは指定された OU 内のすべてのアカウントにデプロイされます。

AWS CLI で、--deployment-targets オプションを使用してアカウントフィルタリングを指定します。詳細については、「DeploymentTargets」を参照してください。

create-stack-set コマンドを使用して StackSet コンテナを作成したら、次のいずれかの例を使用してスタックを特定のアカウントにデプロイします。

OU 内の特定のアカウントをターゲットにする

次の例では、OU1 内のアカウント A1 と A2 にのみスタックをデプロイします。

aws cloudformation create-stack-instances --stack-set-name my-stackset \ --deployment-targets OrganizationalUnitIds=OU1,Accounts=A1,A2,AccountFilterType=INTERSECTION \ --regions us-west-2 us-east-1
OU からアカウントを除外する

次の例では、アカウント A1 と A2 を除く OU1 内のすべてのアカウントにスタックをデプロイします。

aws cloudformation create-stack-instances --stack-set-name my-stackset \ --deployment-targets OrganizationalUnitIds=OU1,Accounts=A1,A2,AccountFilterType=DIFFERENCE \ --regions us-west-2 us-east-1
追加のアカウントを含める

次の例では、OU1 内のすべてのアカウントにスタックをデプロイし、別の OU から追加のアカウント A4 もデプロイします。

aws cloudformation create-stack-instances --stack-set-name my-stackset \ --deployment-targets OrganizationalUnitIds=OU1,Accounts=A4,AccountFilterType=UNION \ --regions us-west-2 us-east-1