タグを使用してリソースへのアクセス CodePipelineを制御する - AWS CodePipeline

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

タグを使用してリソースへのアクセス CodePipelineを制御する

IAM ポリシーステートメントの条件は、 CodePipeline アクションに必要なリソースへのアクセス許可を指定するために使用する構文の一部です。条件内でタグを使用することは、リソースとリクエストへのアクセスをコントロールするひとつの方法です。 CodePipeline リソースのタグ付けの詳細については、「」を参照してくださいリソースのタグ付け。このトピックでは、タグベースのアクセスコントロールについて説明します。

IAM ポリシーを設計するときは、特定のリソースへのアクセスを許可することで、きめ細かなアクセス許可を設定している場合があります。管理するリソースの数が増えるに従って、このタスクはより困難になります。リソースにタグ付けしてポリシーステートメント条件でタグを使用することにより、このタスクをより容易にすることができます。特定のタグを使用して任意のリソースへのアクセス権を一括して付与します。次に、作成時や以降の段階で、このタグを関連リソースに繰り返し適用します。

タグは、リソースにアタッチするか、タグ付けをサポートするサービスへのリクエストに渡すことができます。では CodePipeline、リソースにタグを含めることができ、一部のアクションにはタグを含めることができます。IAM ポリシーを作成するときは、タグ条件キーを使用して以下を制御できます。

  • どのユーザーがパイプラインリソースに対してアクションを実行できるか (リソースに既に付けられているタグに基づいて)。

  • どのタグをアクションのリクエストで渡すことができるか。

  • リクエストで特定のタグキーを使用できるかどうか。

文字列条件演算子では、キーと文字列値の比較に基づいてアクセスを制限する Condition 要素を構築できます。Null 条件以外の条件演算子名の末尾に IfExists を追加できます。「ポリシーキーがリクエストのコンテキストで存在する場合、ポリシーで指定されたとおりにキーを処理します。キーが存在しない場合、条件要素は true と評価されます。」 例えば、StringEqualsIfExists を使用して、他のタイプのリソースには存在しない可能性のある条件キーに基づいた制限を行うことができます。

タグ条件キーの完全な構文と意味については、「タグを使用したアクセスコントロール」を参照してください。条件キーの詳細については、以下のリソースを参照してください。このセクションの CodePipelineポリシー例は、条件キーに関する以下の情報と一致しており、リソースのネスト CodePipeline などの のニュアンスの例で拡張されています。

次の例は、 CodePipeline ユーザーのポリシーでタグ条件を指定する方法を示しています。

例 1: リクエストのタグに基づいてアクションを制限する

AWSCodePipeline_FullAccess マネージドユーザーポリシーは、任意のリソースに対して CodePipeline アクションを実行する無制限のアクセス許可をユーザーに付与します。

以下ののポリシーでは、この権限を制限し、権限のないユーザーがリクエストに特定のタグが記載されたパイプラインを作成することを許可しません。これを行うには、リクエストに指定されているタグ Project の値が ProjectA または ProjectB のいずれかである場合、CreatePipeline アクションを拒否します。(aws:RequestTag条件キーは、IAMリクエストで渡すことができるタグを制御するために使用されます)。

以下の例で、ポリシーの目的は、指定したタグ値を使用してパイプラインを作成するアクセス許可を、権限のないユーザーに与えないことです。ただし、パイプラインを作成するには、パイプライン自体に加えてリソース (パイプラインのアクションやステージなど) にアクセスする必要があります。ポリシーで'Resource'指定された は であるため'*'、 と を持つすべてのリソースに対してポリシーが評価ARNされ、パイプラインの作成時に作成されます。これらの追加のリソースにはタグ条件キーがないため、StringEquals のチェックは失敗し、ユーザーはいずれのタイプのインスタンスも起動できません。これに対応するには、StringEqualsIfExists 条件演算子を代わりに使用します。そうすれば、条件キーが存在する場合のみにテストが行われます。

以下のコードは次のように解釈できます。「チェックされるリソースには "RequestTag/Project" 条件キーがあり、キー値が projectA で始まる場合にのみ、アクションを許可します。チェックされるリソースにこの条件キーがなくても問題ありません。」

また、このポリシーでは aws:TagKeys 条件キーを使用して、タグ変更アクションにこれらの同じタグ値を含めることを許可しないことで、これらの権限のないユーザーがリソースを改ざんするのを防ぎます。顧客の管理者は、管理ユーザーIAMポリシーに加えて、このポリシーを権限のない管理ユーザーにアタッチする必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codepipeline:CreatePipeline", "codepipeline:TagResource" ], "Resource": "*", "Condition": { "StringEqualsIfExists": { "aws:RequestTag/Project": ["ProjectA", "ProjectB"] } } }, { "Effect": "Deny", "Action": [ "codepipeline:UntagResource" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": ["Project"] } } } ] }
例 2: リソースタグに基づいてタグ付けアクションを制限する

AWSCodePipeline_FullAccess マネージドユーザーポリシーは、任意のリソースに対して CodePipeline アクションを実行する無制限のアクセス許可をユーザーに付与します。

次のポリシーは、この権限を制限し、権限のないユーザーに対して特定のプロジェクトのパイプラインでアクションを実行するアクセス許可を拒否します。そのために、ProjectA または ProjectB の値のいずれかを持つ Project という名前のタグをこのリソースが持つ場合、一部のアクションを拒否します。(このaws:ResourceTag 条件キーを使用して、それらのリソースのタグに基づいて、このリソースへのアクセスをコントロールします)。お客様の管理者は、 マネージドIAMユーザーIAMポリシーに加えて、このポリシーを権限のないユーザーにアタッチする必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codepipeline:TagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Project": ["ProjectA", "ProjectB"] } } } ] }
例 3: リクエストのタグに基づいてアクションを許可する

次のポリシーは、 で開発パイプラインを作成するアクセス許可をユーザーに付与します CodePipeline。

これを行うには、リクエストに指定されているタグ Project の値が ProjectA である場合に、CreatePipeline アクションと TagResource アクションを許可します。つまり、指定できるタグキーは Project のみで、その値は ProjectA であることが必要です。

aws:RequestTag 条件キーは、IAMリクエストで渡すことができるタグを制御するために使用されます。aws:TagKeys 条件は、タグキーの大文字と小文字を区別します。このポリシーは、AWSCodePipeline_FullAccess マネージドユーザーポリシーがアタッチされていないユーザーまたはロールに便利です。マネージドポリシーは、ユーザーに任意のリソースに対して CodePipeline アクションを実行する無制限のアクセス許可を付与します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:CreatePipeline", "codepipeline:TagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/Project": "ProjectA" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["Project"] } } } ] }
例 4: リソースタグに基づいてタグ削除アクションを制限する

AWSCodePipeline_FullAccess マネージドユーザーポリシーは、任意のリソースに対して CodePipeline アクションを実行する無制限のアクセス許可をユーザーに付与します。

次のポリシーは、この権限を制限し、権限のないユーザーに対して特定のプロジェクトのパイプラインでアクションを実行するアクセス許可を拒否します。そのために、ProjectA または ProjectB の値のいずれかを持つ Project という名前のタグをこのリソースが持つ場合、一部のアクションを拒否します。

また、このポリシーでは aws:TagKeys 条件キーを使用して、タグ変更アクションに Project タグを完全に削除することを許可しないことで、これらの権限のないユーザーがリソースを改ざんするのを防ぎます。顧客の管理者は、 マネージドユーザーIAMポリシーに加えて、このポリシーを権限のないユーザーまたはロールにアタッチする必要があります。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codepipeline:UntagResource" ], "Resource": "*", "Condition": { "ForAllValues:StringEquals": { "aws:TagKeys": ["Project"] } } } ] }