タグを使用した 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"] } } } ] }