

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

# タグを使用した CodePipeline リソースへのアクセスのコントロール
<a name="tag-based-access-control"></a>

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

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

タグは、リソースにアタッチしたり、タグ付けをサポートするサービスへのリクエストに渡したりすることができます。CodePipeline では、リソースにタグを付けることができ、一部のアクションにタグを含めることができます。IAM ポリシーを作成するときに、タグ条件キーを使用して以下をコントロールできます。
+ どのユーザーがパイプラインリソースに対してアクションを実行できるか (リソースに既に付けられているタグに基づいて)。
+ どのタグをアクションのリクエストで渡すことができるか。
+ リクエストで特定のタグキーを使用できるかどうか。

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

タグ条件キーの完全な構文と意味については、「[タグを使用したアクセスコントロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)」を参照してください。条件キーの詳細については、以下のリソースを参照してください。このセクションに示す CodePipeline ポリシーの例は、条件キーに関する以下の情報に沿っています。また、リソースのネスティングなど CodePipeline 特有の考慮点についても、例を交えて補足説明しています。
+ [文字列条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String)
+ [AWS のサービス IAM で動作する](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)
+ [SCP 構文](https://docs.aws.amazon.com/IAM/latest/UserGuide/orgs_manage_policies_scps_syntax.html)
+ [IAM JSON ポリシーエレメント: 条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)
+ [aws:RequestTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)
+ [CodePipeline の条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_awscodepipeline.html#awscodepipeline-policy-keys)

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

**Example 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"]
        }
      }
    }
  ]
}
```

**Example 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"]
        }
      }
    }
  ]
}
```

**Example 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"]
        }
      }
    }
  ]
}
```

**Example 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"]
        }
      }
    }
  ]
}
```