CloudFormation レジストリからサードパーティーのパブリック拡張を使用する - AWS CloudFormation

CloudFormation レジストリからサードパーティーのパブリック拡張を使用する

テンプレートでサードパーティーのパブリック拡張を使用するには、まず、使用するアカウントとリージョンに対して拡張を有効にする必要があります。拡張を有効にすると、それが有効になっているアカウントとリージョンのスタックオペレーションで使用できるようになります。

サードパーティーのパブリック拡張を有効にすると、CloudFormation はアカウントの拡張レジストリに、有効化された拡張機能のエントリをプライベート拡張として作成します。    これにより、拡張機能に含まれる設定プロパティを設定できます。設定プロパティは、拡張を特定の AWS アカウント とリージョンに対して設定する方法を定義します。

設定プロパティの設定に加えて、以下の方法で拡張をカスタマイズすることもできます。

  • 拡張のログ設定に加えて、CloudFormation が拡張を有効にするために使用する実行ロールを指定します。

  • 新しいマイナーバージョンまたはパッチバージョンが利用可能になったときに、拡張を自動的に更新するかどうかを指定します。

  • サードパーティーのパブリック拡張名ではなく、使用するエイリアスを指定します。これは、サードパーティーの拡張間の名前の衝突を避けるのに役立ちます。

IAM アクセス許可とパブリック拡張アクセスの信頼ポリシーを使用して実行ロールを設定する

CloudFormation レジストリからパブリック拡張をアクティブ化すると、AWS アカウント およびリージョンでその拡張を呼び出すために必要なアクセス許可を CloudFormation に付与する実行ロールを提供できます。

実行ロールに必要なアクセス許可は、拡張スキーマのハンドラーセクションで定義されています。拡張に必要な特定のアクセス許可を付与し、実行ロールにアタッチする IAM ポリシーを作成する必要があります。

アクセス許可ポリシーに加えて、実行ロールには、CloudFormation がロールを引き受けることを許可する信頼ポリシーも必要です。「IAM ユーザーガイド」の「カスタム信頼ポリシーを使用してロールを作成する」のガイダンスに従って、カスタム信頼ポリシーを使用してロールを作成します。

信頼関係

使用する信頼ポリシーの例を下記に示します。

1 つ以上のグローバル条件コンテキストキーと Condition フィールドを使用して、必要に応じてサービス間での混乱した代理の防止のためのアクセス許可の範囲を制限します。詳細については、「サービス間の混乱した代理の防止」を参照してください。

  • aws:SourceAccount の値をアカウント ID に設定します。

  • aws:SourceArn の値を拡張機能の ARN に設定します。

信頼ポリシーの例 1

リソースタイプ拡張の IAM ロールの信頼ポリシーの例を次に示します。

{ "Version": "2012-10-17", "Statement":[ { "Effect": "Allow", "Principal":{ "Service": "resources.cloudformation.amazonaws.com" }, "Action":"sts:AssumeRole", "Condition":{ "StringEquals":{ "aws:SourceAccount":"123456789012" }, "StringLike":{ "aws:SourceArn":"arn:aws:cloudformation:us-west-2:123456789012:type/resource/Organization-Service-Resource/*" } } } ] }
信頼ポリシーの例 2

フック拡張に関する IAM ロールの信頼ポリシーの例を次に示します。

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal": { "Service": [ "resources.cloudformation.amazonaws.com", "hooks.cloudformation.amazonaws.com" ] }, "Action":"sts:AssumeRole", "Condition":{ "StringEquals":{ "aws:SourceAccount":"123456789012" }, "StringLike":{ "aws:SourceArn":"arn:aws:cloudformation:us-west-2:123456789012:type/hook/Organization-Service-Hook/*" } } } ] }

拡張の新しいバージョンを自動的に使用する

拡張を有効にするときに、最新のマイナーバージョンを使用する拡張の種類を指定することもできます。パブリッシャーが有効化された拡張で新しいバージョンをリリースするたびに、拡張の種類によってマイナーバージョンが更新されます。

例えば、次にその拡張を含むテンプレートを使用してスタックの作成、更新などのスタックオペレーションを実行すると、CloudFormation は新しいマイナーバージョンを使用します。

自動または手動で新しい拡張バージョンに更新しても、スタックですでにプロビジョニングされている拡張インスタンスには影響しません。

CloudFormation は、拡張のメジャーバージョン更新を重大な変更を含む可能性があるものとして扱うため、拡張の新しいメジャーバージョンに手動で更新する必要があります。

AWS で公開された拡張は、利用可能なすべてのアカウントとリージョンでデフォルトで有効化され、常に各 AWS リージョン で利用可能な最新バージョンを使用します。

重要

拡張を最新バージョンに更新するかどうか、いつ更新するかはアカウントで制御できるため、異なるアカウントやリージョンに同じ拡張の異なるバージョンがデプロイされる可能性があります。

これにより、その拡張を含む同じテンプレートをそれらのアカウントとリージョンをまたいで使用すると、予期しない結果につながる可能性があります。

拡張を参照するエイリアスを使用する

特定の AWS アカウント とリージョンにおいて、特定の名前で複数の拡張を有効にすることはできません。異なるパブリッシャーが同じ拡張名でパブリック拡張を提供している場合があるため、CloudFormation では、有効にするサードパーティーのパブリック拡張のエイリアスを指定できます。

拡張にエイリアスを指定すると、CloudFormation はそのエイリアスをこのアカウントとリージョン内の拡張タイプ名として扱います。テンプレート、API 呼び出し、および CloudFormation コンソールで拡張を参照するには、エイリアスを使用する必要があります。

拡張のエイリアスは、特定のアカウントとリージョン内で一意である必要があります。異なるタイプ名のエイリアスを使用して、同じアカウントとリージョン内で同じパブリックリソースを複数回有効にできます。

重要

拡張のエイリアスが一意である必要があるのは、特定のアカウントとリージョン内のみのことではありますが、アカウントとリージョンをまたいで異なるサードパーティーのパブリック拡張に同じエイリアスを割り当てるのはしないことを強くお勧めします。複数のアカウントまたはリージョンにまたがる拡張エイリアスを含むテンプレートを使用すると、予期しない結果が生じる可能性があります。

パブリック拡張を操作するためによく使用される AWS CLI コマンド

パブリック拡張を操作するために一般的に使用されるコマンドは次のとおりです。

  • activate-type は、アカウント内のパブリックサードパーティのモジュールまたはリソースタイプを有効にします。

  • アカウント内の拡張機能の設定データを指定し、フックを無効または有効にする set-type-configuration

  • list-types は、アカウントの拡張機能を一覧表示します。

  • describe-type は、現在の設定データなど、特定の拡張機能または特定の拡張機能バージョンに関する詳細情報を返します。

  • set-type-default-version は、どのバージョンの拡張機能がデフォルトバージョンであるかを指定します。

  • deactivate-type は、アカウントで以前に有効化されたパブリックサードパーティーモジュールまたはリソースタイプを無効にします。