メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

AWS Identity and Access Management によるアクセスの制御

AWS Identity and Access Management (IAM) により、IAM ユーザーを作成して、各ユーザーが AWS アカウントのどのリソースにアクセスできるかを制御することができます。IAM と AWS CloudFormation を使用して、スタックテンプレートの表示、スタックの作成、スタックの削除など、ユーザーが AWS CloudFormation で実行できるアクションを制御できます。

AWS CloudFormation アクションに加えて、各ユーザーが利用できる AWS サービスおよびリソースを管理できます。この方法で、ユーザーが AWS CloudFormation の使用時にアクセスできるリソースを管理できます。たとえば、Amazon EC2 インスタンスを作成できるユーザー、データベースインスタンスを終了できるユーザ、または VPC を更新できるユーザを指定できます。AWS CloudFormation を使用してそれらのアクションを実行するときはいつでも同じ権限が適用されます。

アクセスを制御できる全サービスの詳細については、IAM ユーザーガイドの「IAM をサポートする AWS サービス」を参照してください。

AWS CloudFormation のアクション

AWS アカウントでグループまたは IAM ユーザーを作成するときは、そのグループまたはユーザーと IAM ポリシーを関連付けることができます。これにより、付与する権限が指定されます。たとえば、入門レベルの開発者グループを想定してみましょう。入門レベルの開発者がすべて含まれる Junior application developers グループを作成できます。次に、ポリシーと、ユーザーに AWS CloudFormation スタックの表示のみを許可しているグループとを関連付けます。このシナリオでは、以下のサンプルのようなポリシーを使用します。

例 スタック表示アクセス許可を付与するポリシー例

Copy
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":[ "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResource", "cloudformation:DescribeStackResources" ], "Resource":"*" }] }

このポリシーは、Action エレメントにリストされたすべての DescribeStack API アクションへのアクセス許可を付与します。

注記

ステートメントでスタック名または ID を指定しない場合は、Resource 要素に * ワイルドカードを使用してアクションにすべてのリソースを使用するためのアクセス許可も付与する必要があります。

AWS CloudFormation アクションに加えて、スタックを作成または削除する IAM ユーザーには、スタックテンプレートに応じて追加の権限が必要です。たとえば、Amazon SQS キューを説明するテンプレートがある場合、ユーザーは、以下のサンプルポリシーに示すように、スタックを正常に作成するために Amazon SQS アクションに対する当該の権限が必要です。

例 スタックアクションの作成と表示、およびすべての Amazon SQS アクションを付与するサンプルポリシー

Copy
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Allow", "Action":[ "sqs:*", "cloudformation:CreateStack", "cloudformation:DescribeStacks", "cloudformation:DescribeStackEvents", "cloudformation:DescribeStackResources", "cloudformation:GetTemplate", "cloudformation:ValidateTemplate" ], "Resource":"*" }] }

許可または拒否できるすべての AWS CloudFormation アクションのリストについては、AWS CloudFormation API Referenceを参照してください。

AWS CloudFormation コンソール固有のアクション

AWS CloudFormation コンソールを使用する IAM ユーザーには、AWS Command Line Interface または AWS CloudFormation API を使用する場合に必要とならない追加の権限が必要です。CLI および API と比較して、コンソールには追加の権限が必要な追加の機能 (Amazon S3 バケットへのテンプレートアップロード、AWS 固有のパラメータータイプのドロップダウンリストなど) が備わっています。

次のすべてのアクションで、すべてのリソースに対する権限を付与します。アクションを特定のスタックまたはバケットに制限しないでください。

以下の必須アクションは、AWS CloudFormation コンソールでのみ使用されるため、API リファレンスには記載されていません。このアクションにより、ユーザーは Amazon S3 バケットにテンプレートをアップロードできるようになります。

Copy
cloudformation:CreateUploadBucket

ユーザーがテンプレートをアップロードするときは、次の Amazon S3 権限が必要です。

Copy
s3:PutObject s3:ListBucket s3:GetObject s3:CreateBucket

AWS 固有パラメータータイプのテンプレートでは、ユーザーには対応する記述用の API コールを行うためのアクセス権限が必要です。たとえば、テンプレートに AWS::EC2::KeyPair::KeyName パラメータータイプが含まれる場合、ユーザーには EC2 DescribeKeyPairs アクション (コンソールがパラメータードロップダウンリストの値を取得する方法) をコールするためのアクセス権限が必要です。次の例は、他のパラメータータイプでユーザーに必要なアクションです。

Copy
ec2:DescribeSecurityGroups (for the AWS::EC2::SecurityGroup::Id parameter type) ec2:DescribeSubnets (for the Subnet::Id parameter type) ec2:DescribeVpcs (for the AWS::EC2::VPC::Id parameter type)

AWS CloudFormation リソース

AWS CloudFormation はリソースレベルのアクセス許可をサポートしているため、以下のポリシーに示すように、特定のスタックに対するアクションを指定できます。

例 MyProductionStack に対するスタックアクションの削除と更新を拒否するサンプルポリシー

Copy
{ "Version":"2012-10-17", "Statement":[{ "Effect":"Deny", "Action":[ "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource":"arn:aws:cloudformation:us-east-1:123456789012:stack/MyProductionStack/*" }] }

上記のポリシーでは、スタック名の最後にワイルドカードを使用して、完全なスタック ID (arn:aws:cloudformation:us-east-1:123456789012:stack/MyProductionStack/abc9dbf0-43c2-11e3-a6e8-50fa526be49c など) およびスタック名 (MyProductionStack など) に基づいてスタックの削除と更新を拒否します。

AWS::Serverless トランスフォームが変更セットを作成できるようにするには、次のポリシーに示すように、ポリシーに arn:aws:cloudformation:<region>:aws:transform/Serverless-2016-10-31 リソースレベルのアクセス許可が含まれている必要があります。

例 トランスフォームの変更セットアクションの作成を許可するポリシーの例

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "cloudformation:CreateChangeSet" ], "Resource": "arn:aws:cloudformation:us-west-2:aws:transform/Serverless-2016-10-31" }] }

AWS CloudFormation 条件

IAM ポリシーでは、ポリシーが有効になるタイミングを制御する条件を任意で指定できます。たとえば、特定のテンプレート URL を指定したときにのみ IAM がユーザーにスタックの作成を許可するように、ポリシーを定義できます。AWS CloudFormation 固有の条件や AWS 全体に対する、ポリシーが有効でなくなるタイミングを指定する DateLessThan などの条件を定義できます。AWS 全体の条件のリストについては、「IAM ポリシーエレメントの参照」(IAM ユーザーガイド) を参照してください。

注記

AWS 全体に対する aws:SourceIp 条件を使用しないでください。AWS CloudFormation はリクエストの送信元 IP アドレスではなく、独自の IP アドレスを使用してリソースをプロビジョニングします。たとえば、スタックを作成する際、AWS CloudFormation は、EC2 インスタンスを起動したり S3 バケットを作成したりするために、CreateStack 呼び出しや aws cloudformation create-stack コマンドによって得られる IP アドレスではなく、スタックの IP アドレスからリクエストを行います。

次のリストは、AWS CloudFormation 固有の条件要件について説明しています. これらの条件は、ユーザーがスタックを作成または更新する場合にのみ適用されます。

cloudformation:ChangeSetName

ポリシーに関連付ける AWS CloudFormation 変更セットの名前。この条件を使用して、IAM ユーザーがどの変更セットを実行、または削除するかを制御します。

cloudformation:ResourceTypes

ポリシーに関連付ける AWS::EC2::Instance などのテンプレートリソース。この条件を使用して、IAM ユーザーがスタックを作成または更新したときに、操作できるリソースタイプを指定します。この条件は、ユーザーが ResourceTypes パラメーターで宣言したリソースタイプに対して確認されます。このパラメーターは、現在のところ CLI および API リクエストでのみサポートされています。このパラメーターを使用する場合、ユーザーはそのテンプレートにあるすべてのリソースタイプを指定する必要があります。ResourceTypes パラメーターの詳細については、AWS CloudFormation API Referenceの「CreateStack」アクションを参照してください。

次のリストは、リソースタイプを定義する方法を説明しています. リソースタイプのリストについては、「AWS リソースプロパティタイプのリファレンス」を参照してください。

AWS::*

すべての AWS リソースを指定します。

AWS::service_name::*

固有の AWS サービスのすべてのリソースを指定します。

AWS::service_name::resource_type

AWS::EC2::Instance (すべての EC2 インスタンス) などの特定の AWS リソースタイプを指定します。

Custom::*

すべてのカスタムリソースを指定します。

Custom::resource_type

テンプレートで定義されている特定のカスタムリソースタイプを指定します。

cloudformation:RoleARN

ポリシーに関連付ける IAM サービスロールの Amazon リソースネーム (ARN)。この条件を使用して、IAM ユーザーがスタックまたは変更セットを操作するとき、どのサービスロールを使用するかを制御します。

cloudformation:StackPolicyUrl

ポリシーに関連付ける Amazon S3 スタックポリシーの URL。IAM ユーザーがスタックの作成または更新アクション時にスタックに関連付けることができるスタックポリシーを制御するには、この条件を使用します。スタックポリシーの詳細については、「スタックのリソースが更新されないようにする」を参照してください。

注記

アップロードしたスタックポリシーを使用した場合のみ IAM ユーザーがスタックを作成または更新できるようにするには、それらのユーザーの S3 バケットを read only に設定します。

cloudformation:TemplateUrl

ポリシーに関連付ける Amazon S3 テンプレートの URL。この条件を使用して、スタックを作成または更新したときに IAM ユーザーが使用できるテンプレートを指定します。

注記

アップロードしたテンプレートを使用した場合のみ IAM ユーザーがスタックを作成または更新できるようにするには、それらのユーザーの S3 バケットを read only に設定します。

次のポリシー例では、ユーザーがスタックを作成または更新する場合に、https://s3.amazonaws.com/testbucket/test.template テンプレート URL のみを使用することができます。

例 テンプレート URL の条件

Copy
{ "Version":"2012-10-17", "Statement":[ { "Effect" : "Allow", "Action" : [ "cloudformation:CreateStack", "cloudformation:UpdateStack" ], "Resource" : "*", "Condition" : { "ForAllValues:StringEquals" : { "cloudformation:TemplateUrl" : [ "https://s3.amazonaws.com/testbucket/test.template" ] } } } ] }

次のポリシー例では、スタックのテンプレートに IAM サービスからのリソースが含まれていなければ、ユーザーにスタックの作成を許可します。このポリシーでは、ユーザーが ResourceTypes パラメーター (CLI および API リクエストでのみ使用可能) を指定することも要求されます。このポリシーは、明示的な拒否ステートメントを使用することにより、他のポリシーが追加のアクセス権限を付与している場合、このポリシーが常に有効なままになるようにします (明示的な拒否ステートメントは常に明示的な許可ステートメントより優先されます)。

例 リソースタイプの条件

Copy
{ "Version":"2012-10-17", "Statement":[ { "Effect" : "Allow", "Action" : [ "cloudformation:CreateStack" ], "Resource" : "*" }, { "Effect" : "Deny", "Action" : [ "cloudformation:CreateStack" ], "Resource" : "*", "Condition" : { "ForAnyValue:StringLikeIfExists" : { "cloudformation:ResourceTypes" : [ "AWS::IAM::*" ] } } }, { "Effect": "Deny", "Action" : [ "cloudformation:CreateStack" ], "Resource": "*", "Condition": { "Null": { "cloudformation:ResourceTypes": "true" } } } ] }

次のポリシー例は、前述の例と似ています。このポリシーでは、スタックのテンプレートに IAM サービスからのリソースが含まれていなければ、ユーザーにスタックの作成を許可します。さらに、ユーザーが ResourceTypes パラメーター (CLI および API リクエストでのみ使用可能) を指定することも要求します。このポリシーはよりシンプルですが、明示的な拒否ステートメントを使用しません。追加のアクセス権限を付与する他のポリシーにより、このポリシーがオーバーライドされる可能性があります。

例 リソースタイプの条件

Copy
{ "Version":"2012-10-17", "Statement":[ { "Effect" : "Allow", "Action" : [ "cloudformation:CreateStack" ], "Resource" : "*", "Condition" : { "ForAllValues:StringNotLikeIfExists" : { "cloudformation:ResourceTypes" : [ "AWS::IAM::*" ] }, "Null":{ "cloudformation:ResourceTypes": "false" } } } ] }

AWS CloudFormation テンプレートでの IAM リソースの承認

スタックを作成する前に、AWS CloudFormation によってテンプレートが検証されます。検証中に、AWS CloudFormation は IAM リソースが作成する可能性があるテンプレートを確認します。完全アクセス権を持つ IAM ユーザーなどの IAM リソースは、AWS アカウントの任意のリソースにアクセスし、変更できます。したがって、拡大した権限で意図していないリソースを作成しないように、進める前に各 IAM に関連付けられた権限を確認することをお勧めします。実行されたことを確認するには、スタックを作成する前に、AWS CloudFormation に指定された機能を付与して、テンプレートにそれらのリソースを含めることを承認する必要があります。

AWS CloudFormation コンソール、AWS Command Line Interface (CLI)、または API を使用して、AWS CloudFormation テンプレートの機能を承認できます。

  • AWS CloudFormation コンソールで、[Create Stack] または [Update Stack] ウィザードの [Review] ページで [I acknowledge that this template may create IAM resources] を選択します。

  • CLI で、aws cloudformation create-stack および aws cloudformation update-stack コマンドを使用する場合は、--capabilities パラメーターに CAPABILITY_IAM または CAPABILITY_NAMED_IAM 値を指定します。テンプレートに IAM リソースがある場合、いずれかの機能を指定できます。テンプレートの IAM リソースにカスタム名がある場合、CAPABILITY_NAMED_IAM を指定する必要があります。

  • API で CreateStackUpdateStack アクションを使用するためには、Capabilities.member.1=CAPABILITY_IAM あるいは Capabilities.member.1=CAPABILITY_NAMED_IAM を指定します。 テンプレートに IAM リソースがある場合、いずれかの機能を指定できます。テンプレートの IAM リソースにカスタム名がある場合、CAPABILITY_NAMED_IAM を指定する必要があります。

重要

テンプレートにカスタム名の IAM リソースが含まれている場合、同じテンプレートを再利用する複数のスタックを作成しないでください。IAM リソースはアカウント内でグローバルに一意でなければなりません。同じテンプレートを使用して異なるリージョンで複数のスタックを作成する場合、それぞれのスタックは一意なリソースを持つのではなく、同じ IAM リソースを共有する可能性があります。スタック間でリソースを共有すると、回復不可能な意図しない結果をまねく可能性があります。たとえば、1 つのスタックの共有された IAM リソースを削除または更新すると、意図せずに他のスタックのリソースの変更することになります。

Amazon EC2 インスタンスで実行されるアプリケーションの認証情報の管理

Amazon EC2 インスタンスで実行されるアプリケーションで、Amazon S3 バケットや DynamoDB テーブルなどの AWS リソースにリクエストを送信する必要がある場合、そのアプリケーションでは AWS セキュリティ認証情報が必要になります。ただし、起動するすべてのインスタンスにおける長期的なセキュリティ認証情報を配信して埋め込むことは非常に難しく、潜在的なセキュリティリスクを伴います。IAM ユーザー認証情報のような長期認証情報を使用する代わりに、インスタンスが起動される際に Amazon EC2 インスタンスに関連付けられる IAM ロールを作成することをお勧めします。アプリケーションは Amazon EC2 インスタンスから一時的な認証情報を得ることができます。インスタンスに長期認証情報を埋め込む必要はありません。また、認証情報を管理しやすくするために、複数の Amazon EC2 インスタンスに対して 1 つのロールのみを指定できます。インスタンスごとに個別の認証情報を作成する必要はありません。

ロールでのインスタンスの起動方法を示すテンプレートスニペットについては、「IAM ロールのテンプレートの例」を参照してください。

注記

一時的なセキュリティ認証情報を使用するインスタンスにあるアプリケーションでは、AWS CloudFormation アクションを呼び出すことができます。ただし、AWS CloudFormation は他の多数の AWS サービスとやり取りするため、使用するすべてのサービスが一時的なセキュリティ認証情報をサポートすることを確認する必要があります。詳細については、「AWS STS をサポートする AWS サービス」を参照してください。

一時的なアクセス権の付与 (フェデレーションアクセス)

場合によっては、AWS アカウントに対して AWS 認証情報のない一時的なアクセス権をユーザーに付与する必要があります。一時的なアクセス権を付与する場合は、長期認証情報を作成して削除するのではなく、AWS Security Token Service (AWS STS) を使用します。たとえば、IAM ロールを使用できます。1 つの IAM ロールから、多くの一時的なセキュリティ認証情報 (アクセスキー、シークレットアクセスキー、およびセキュリティトークンを含む) をプログラムで作成し、配信することができます。こうした認証情報の有効期限は限られているため、期限が切れた後は AWS アカウントへのアクセスに使用することはできません。複数の IAM ロールを作成し、個々のユーザーに異なるレベルのアクセス許可を付与することもできます。IAM ロールは、フェデレーティッドアイデンティティやシングルサインオンのようなシナリオに対して有用です。

フェデレーティッドアイデンティティは、複数のシステムで使用できる固有のアイデンティティです。確立されたオンプレミスアイデンティティシステム (LDAP または Active Directory など) を使用している企業ユーザーの場合、そのオンプレミスアイデンティティシステムを使用してすべての認証を処理できます。ユーザーが認証された後で、適切な IAM ユーザーまたは IAM ロールから一時的なセキュリティ認証情報を提供します。たとえば、管理者が AWS アカウントへの完全アクセス権を持つ administrators ロールや、開発者が AWS CloudFormation スタックでの作業のみのアクセス許可を持つ developers ロールを作成できます。管理者は、認証された後で、administrators ロールから一時的なセキュリティ認証情報を取得することが許可されます。一方で、開発者は developers ロールからのみ一時的なセキュリティ認証情報を取得できます。

また、AWS マネジメントコンソール にフェデレーションユーザーアクセスを付与できます。ユーザーがオンプレミスアイデンティティシステムで認証された後で、AWS マネジメントコンソール への直接アクセス権を付与する一時的な URL をプログラムによって作成できます。ユーザーは既に認証されているため (シングルサインオン)、その一時的な URL を使用するときには AWS にサインインする必要がありません。また、この URL はユーザーの一時的なセキュリティ認証情報から作成されるため、この認証情報で利用できるアクセス許可によって、AWS マネジメントコンソール でユーザーに付与されるアクセス許可が決まります。

一時的なセキュリティ認証情報を生成するために複数のさまざまな AWS STS API を使用できます。使用する API の詳細については、一時的なセキュリティ認証情報の使用の「一時的セキュリティ認証情報を取得する方法」を参照してください。

重要

GetFederationToken API から生成された一時的なセキュリティ認証情報を使用する場合は、IAM で作業することはできません。IAM での作業が必要な場合、代わりにロールからの一時的なセキュリティ認証情報を使用します。

AWS CloudFormation は他の多数の AWS サービスとやり取りします。AWS CloudFormation で一時的なセキュリティ認証情報を使用する場合は、使用するすべてのサービスが一時的なセキュリティ認証情報をサポートすることを確認してください。詳細については、「AWS STS をサポートする AWS サービス」を参照してください。

詳細については、一時的なセキュリティ認証情報の使用で以下の関連リソースを参照してください。