タグを使用した CodePipeline リソースへのアクセスのコントロール - AWS CodePipeline

タグを使用した CodePipeline リソースへのアクセスのコントロール

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

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

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

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

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

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

タグ条件キーの完全な構文とセマンティクスについては、IAM ユーザーガイドの「タグを使用したアクセス制御」を参照してください。

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

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

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

次のポリシーは、この権限を制限し、認証されていないユーザーに対して特定のプロジェクトのパイプラインを作成するアクセス許可を拒否します。これを行うには、リクエストに指定されているタグ Project の値が ProjectA または ProjectB のいずれかである場合に、CreatePipeline アクションを拒否します。(この aws:RequestTag 条件キーを使用して、IAM リクエストで渡すことができるタグをコントロールします)。 また、このポリシーでは aws:TagKeys 条件キーを使用して、タグ変更アクションにこれらの同じタグ値を含めることや Project タグを完全に削除することを許可しないことで、これらの権限のないユーザーがリソースを改ざんするのを防ぎます。お客様の管理者は、管理されたユーザーポリシーに加えて、この IAM ポリシーを未承認の IAM ユーザーにアタッチする必要があります。

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

例 2: リソースタグに基づいてアクションを制限する

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

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

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "codepipeline:TagResource", "codepipeline:UntagResource", "codepipeline:UpdatePipeline", "codepipeline:DeletePipeline", "codepipeline:ListTagsForResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Project": ["ProjectA", "ProjectB"] } } } ] }

例 3: リクエストのタグに基づいてアクションを許可する

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

これを行うには、リクエストに指定されているタグ Project の値が ProjectA である場合に、CreatePipeline アクションと TagResource アクションを許可します。(この aws:RequestTag 条件キーを使用して、IAM リクエストで渡すことができるタグをコントロールします)。 aws:TagKeys 条件は、タグキーの大文字と小文字を区別します。このポリシーは、CodePipelineFullAccess マネージドユーザーポリシーがアタッチされていない IAM ユーザーに便利です。管理ポリシーは、すべてのリソースに対して任意の 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: リソースタグに基づいてアクションを制限する

次のポリシーでは、CodePipeline のプロジェクトのパイプラインに対してアクションを実行し、これらのパイプラインに関する情報を取得するアクセス許可をユーザーに付与します。

これを行うには、パイプラインに含まれているタグ Project の値が ProjectA である場合に、特定のアクションを許可します。(この aws:RequestTag 条件キーを使用して、IAM リクエストで渡すことができるタグをコントロールします)。 aws:TagKeys 条件は、タグキーの大文字と小文字を区別します。このポリシーは、 CodePipelineFullAccess マネージドユーザーポリシーがアタッチされていない IAM ユーザーに便利です。管理ポリシーは、すべてのリソースに対して任意の CodePipeline アクションを実行する無制限のアクセス許可をユーザーに付与します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codepipeline:UpdatePipeline", "codepipeline:DeletePipeline", "codepipeline:ListPipelines" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Project": "ProjectA" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["Project"] } } } ] }