の認証とアクセスコントロールAWS CodeCommit - AWS CodeCommit

の認証とアクセスコントロールAWS CodeCommit

AWS CodeCommit へのアクセスには、認証情報が必要です。これらの認証情報には、CodeCommit リポジトリなどの AWS リソースにアクセスするための権限を持ち、Git 接続を作成するために使用する Git 認証情報や SSH パブリックキーの管理に使用する IAM ユーザーを含んでいる必要があります。以下のセクションでは、リソースへの安全なアクセスのために、AWS Identity and Access Management (IAM) と CodeCommit を役立てる方法について詳しく説明します。

Authentication

CodeCommit リポジトリは Git ベースで Git 認証情報を含む Git の基本機能をサポートしているので、CodeCommit で作業する場合は、IAM ユーザーを使用することをお勧めします。他のアイデンティティタイプで CodeCommit にアクセスすることができますが、その他のアイデンティティタイプは、以下に説明するように制限されることがあります。

アイデンティティタイプ

  • IAM ユーザーIAM ユーザーは、単に特定のカスタムアクセス許可を持つ、Amazon Web Services アカウント内のアイデンティティです。例えば、IAM ユーザーは、CodeCommit リポジトリにアクセスするための Git 認証情報を作成および管理するためのアクセス許可を持つことができます。以下は、CodeCommit での作業に推奨されるユーザータイプです。IAM のユーザー名とパスワードを使用して、AWS Management ConsoleAWS ディスカッションフォーラムAWS Support センターなどのセキュリティ保護された AWS ウェブページにサインインできます。

    Git の認証情報を生成するか SSH パブリックキーを IAM ユーザーに関連付ける、または git-remote-codecommit をインストールして設定することができます。これらは、CodeCommit リポジトリと連携するように Git を設定する最も簡単な方法です。Git 認証情報で、IAM の静的ユーザー名とパスワードを生成します。HTTPS 接続のためのこれらの認証情報は、Git だけでなく、Git のユーザー名およびパスワード認証をサポートするサードパーティーツールでも使用します。SSH 接続では、SSH 認証用に Git および CodeCommit が使用するパブリックキーとプライベートキーのファイルをローカルマシンで作成します。パブリックキーを IAM ユーザーに関連付けて、プライベートキーをローカルマシンに保存します。git-remote-codecommit は Git 自体を拡張するため、ユーザーの Git 認証情報を設定する必要はありません。

    また、各ユーザーのアクセスキーを生成することができます。AWS SDK のいずれか、または AWS (AWS Command Line Interface) を使ってプログラムで、AWS CLI サービスにアクセスするときに、アクセスキーを使用します。SDK と CLI ツールでは、アクセスキーを使用してリクエストが暗号で署名されます。AWS ツールを使用しない場合は、リクエストを自分で署名する必要があります。CodeCommit では、署名バージョン 4 がサポートされています。これは、インバウンド API リクエストを認証するためのプロトコルです。リクエストの認証の詳細については、AWS の全般リファレンス署名バージョン 4 署名プロセスを参照してください。

  • Amazon Web Services アカウントのルートユーザー – AWS にサインアップするときは、 Amazon Web Services アカウントに関連付けられた E メールアドレスとパスワードを指定します。これらは ルート認証情報であり、これらの情報を使用すると、すべての AWS リソースへの完全なアクセスが可能になります。ルートアカウントのユーザーは、一部の CodeCommit 機能を利用できません。また、root アカウントで Git を使用する唯一の方法は、git-remote-codecommit をインストールおよび設定するか (推奨)、AWS に含まれている AWS CLI 認証情報ヘルパーを設定することです。ルートアカウントのユーザーは、Git 認証情報または SSH パブリック/プライベートキーペアを使用できません。これらの理由により、CodeCommit で作業するときにルートアカウントのユーザーを使用することはお勧めしません。

    重要

    セキュリティ上の理由から、ルート認証情報は、AWS アカウントへの完全なアクセス許可を持つ管理者ユーザー (IAM ユーザー) を作成するためにのみ使用することをお勧めします。その後、この管理者ユーザーを使用して、制限されたアクセス許可を持つ他の IAM ユーザーとロールを作成できます。詳細については、IAM ユーザーガイドIAM ベストプラクティスおよび管理者のユーザーおよびグループの作成を参照してください。

  • IAM ロール – IAM ユーザーと同様に、IAM ロールは、アカウントに作成できる IAM アイデンティティで、特定のアクセス許可を付与できます。これは IAM ユーザーに似ていますが、特定のユーザーに関連付けられていません。IAM ユーザー ID とは異なり、このアイデンティティタイプでは、Git 認証情報や SSH キーを使用することはできません。ただし、IAM ロールでは、AWS のサービスおよびリソースにアクセスするために使用できる一時的なアクセスキーを取得することができます。IAM ロールと一時的な認証情報は、次の状況で役立ちます。

    • フェデレーティッドユーザーアクセス – IAM ユーザーを作成するのではなく、AWS Directory Service、エンタープライズユーザーディレクトリ、またはウェブアイデンティティプロバイダーの既存のユーザーアイデンティティを使用することもできます。このようなユーザーはフェデレーティッドユーザーと呼ばれます。AWS では、ID プロバイダーを通じてアクセスがリクエストされたとき、フェデレーティッドユーザーにロールを割り当てます。フェデレーティッドユーザーの詳細については、IAM ユーザーガイドフェデレーティッドユーザーとロールを参照してください。

      注記

      フェデレーティッドユーザーは、Git 認証情報または SSH パブリック/プライベートキーペアを使用できません。さらに、ユーザー設定はフェデレーティッドユーザーでは使用できません。フェデレーティッドアクセスを使用して接続を設定する方法については、「git-remote-codecommit を使用して AWS CodeCommit への HTTPS 接続をセットアップする手順」を参照してください。

    • クロスアカウントアクセス – アカウントの IAM ロールを使用して、アカウントのリソースにアクセスするための権限を別の Amazon Web Services アカウントに付与することができます。この例については、ロールを使用して AWS CodeCommit リポジトリへのクロスアカウントアクセスを設定する および IAM ユーザーガイドチュートリアル: Amazon Web Services アカウント間の IAM ロールを使用したアクセスの委任を参照してください。

    • AWS のサービスのアクセス – アカウントで IAM ロールを使用して、アカウントのリソースにアクセスするために AWS のサービスに必要なアクセス許可を付与できます。例えば、AWS Lambda がユーザーに代わって CodeCommit リポジトリにアクセスすることを許可するロールを作成できます。詳細については、IAM ユーザーガイド AWS のサービスにアクセス許可を委任するロールの作成を参照してください。

    • Amazon EC2で実行されるアプリケーション – インスタンスで実行し、AWS API リクエストを作成するアプリケーションで使用されるアクセスキーを EC2 インスタンス内に保存する代わりに、IAM ロールを使用して、これらのアプリケーション用の一時認証情報を管理できます。AWS ロールを EC2 インスタンスに割り当て、そのすべてのアプリケーションで使用できるようにするには、インスタンスにアタッチされたインスタンスプロファイルを作成します。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるプログラムは一時認証情報を取得することができます。詳細については、IAM ユーザーガイドAmazon EC2 上のアプリケーションに対するロールの使用を参照してください。

アクセスコントロール

有効な認証情報があればリクエストを認証できますが、アクセス許可がなければ CodeCommit リソースの作成やアクセスはできません。たとえば、リポジトリの表示、コードのプッシュ、Git の認証情報の作成および管理などにはアクセス許可が必要です。

以下のセクションでは、CodeCommit のアクセス許可を管理する方法について説明します。最初に概要のセクションを読むことをお勧めします。

CodeCommit リソースに対するアクセス許可の管理の概要

すべての AWS リソースは、Amazon Web Services アカウントによって所有されています。リソースを作成またはアクセスするためのアクセス許可は、アクセス許可ポリシーで管理されます。アカウント管理者は、IAM アイデンティティ (ユーザー、グループ、ロール) にアクセス許可ポリシーをアタッチできます。一部のサービス (AWS Lambda など) は、アクセス許可ポリシーをリソースにアタッチすることができます。

注記

アカウント管理者 (または管理者ユーザー) は、管理者権限を持つユーザーです。詳細については、IAM ユーザーガイドIAM ベストプラクティスを参照してください。

アクセス許可を付与する場合、アクセス許可を取得するユーザー、取得するアクセス許可の対象となるリソース、およびそれらのリソースに対して許可される特定のアクションを決定します。

CodeCommit のリソースとオペレーション

CodeCommit では、プライマリリソースがリポジトリとなります。リソースにはそれぞれ、一意の Amazon リソースネーム (ARN) が関連付けられています。ポリシーで Amazon リソースネーム (ARN) を使用して、ポリシーを適用するリソースを識別します。ARN の詳細については、Amazon Web Services 全般のリファレンス Amazon リソースネーム (ARN) と AWS のサービスの名前空間を参照してください。CodeCommit では、現在、サブリソースと呼ばれる他のリソースタイプはサポートされていません。

次の表で、CodeCommit リソースを指定する方法について説明します。

リソースタイプ ARN 形式
リポジトリ

arn:aws:codecommit:region:account-id:repository-name

すべての CodeCommit リポジトリ

arn:aws:codecommit:*

指定した AWS リージョン の指定したアカウントが所有するすべての CodeCommit リポジトリ

arn:aws:codecommit:region:account-id:*

注記

ほとんどの AWS のサービスでは、ARN 内のコロン (:) またはスラッシュ (/) は同じ文字として扱われます。ただし、CodeCommit では、リソースパターンおよびルールで完全一致が必要です。イベントパターンの作成時に正しい ARN 文字を使用して、リソース内の ARN 構文とそれらの文字が一致する必要があります。

たとえば、以下の要領で ARN を使用して、ステートメント内で特定のリポジトリ (MyDemoRepo) を指定することができます。

"Resource": "arn:aws:codecommit:us-west-2:111111111111:MyDemoRepo"

特定のアカウントに属するすべてのリポジトリを指定するには、以下のようにワイルドカード文字 (*) を使用します。

"Resource": "arn:aws:codecommit:us-west-2:111111111111:*"

すべてのリソースを指定する場合、または特定の API アクションが ARN をサポートしていない場合は、以下の要領で、Resource エレメント内でワイルドカード文字 (*) を使用します。

"Resource": "*"

また、ワイルドカード文字 (*) を使用して、リポジトリ名の一部に一致するすべてのリソースを指定できます。例えば、以下の ARN は、us-east-2 AWS リージョン 内の Amazon Web Services アカウント 111111111111 に登録されている名前 MyDemo で始まる CodeCommit リポジトリを指定しています。

arn:aws:codecommit:us-east-2:111111111111:MyDemo*

CodeCommit リソースで動作する使用可能なオペレーションのリストについては、CodeCommit アクセス許可リファレンス を参照してください。

リソース所有権について

Amazon Web Services アカウントは、誰がリソースを作成したかにかかわらず、アカウントで作成されたリソースを所有します。具体的には、リソース所有者は、リソースの作成リクエストを認証するプリンシパルエンティティ (ルートアカウント、IAM ユーザー、または IAM ロール) の Amazon Web Services アカウントです。以下の例では、このしくみを示しています。

  • Amazon Web Services アカウントに IAM ユーザーを作成し、そのユーザーに CodeCommit リソースを作成するためのアクセス許可を付与する場合、そのユーザーは CodeCommit リソースを作成できます。ただし、ユーザーが属する Amazon Web Services アカウントは CodeCommit リソースを所有しているとします。

  • Amazon Web Services アカウントのルートアカウントの認証情報を使用してルールを作成する場合、 Amazon Web Services アカウントは CodeCommit リソースの所有者です。

  • CodeCommit リソースを作成するためのアクセス許可を持つ Amazon Web Services アカウントに IAM ロールを作成する場合は、ロールを引き受けることのできるいずれのユーザーも CodeCommit リソースを作成できます。ロールが属する Amazon Web Services アカウントは CodeCommit リソースを所有しているとします。

リソースへのアクセスの管理

AWS リソースへのアクセスを管理するには、アクセス許可ポリシーを使用します。アクセスポリシーでは、誰が何にアクセスできるかを記述します。以下のセクションで、アクセス権限のポリシーを作成するためのオプションについて説明します。

注記

このセクションでは、CodeCommit のコンテキストでの IAM の使用について説明します。これは、IAM サービスに関する詳細情報を取得できません。詳細については、IAM ユーザーガイドIAM とはを参照してください。IAM ポリシー構文の詳細と説明については、IAM ユーザーガイドIAM ポリシーの参照を参照してください。

IAM アイデンティティにアタッチされたアクセス許可ポリシーは、アイデンティティベースのポリシー (IAM ポリシー) と呼ばれます。リソースにアタッチされたアクセス許可ポリシーは、リソースベースのポリシーと呼ばれます。現在、CodeCommit では、アイデンティティベースのポリシー (IAM ポリシー) のみがサポートされています。

アイデンティティベースのポリシー (IAM ポリシー)

AWS リソースへのアクセスを管理するには、IAM アイデンティティにアクセス許可ポリシーをアタッチします。CodeCommit で、アイデンティティベースのポリシーを使用して、リポジトリへのアクセスを制御します。例えば、次の操作を実行できます。

  • アカウントのユーザーまたはグループにアクセス許可ポリシーをアタッチする – CodeCommit コンソールに CodeCommit リソースを表示するアクセス許可をユーザーに付与するには、ユーザーまたはユーザーが属するグループにアイデンティティベースのアクセス許可ポリシーをアタッチします。

  • アクセス許可ポリシーをロールにアタッチする (クロスアカウントのアクセス許可を付与) – クロスアカウントアクセスを付与するときなど、委任には、リソースを所有するアカウント (信頼するアカウント) と、リソースへアクセスする必要のあるユーザーを含むアカウント (信頼されたアカウント) の間に信頼を設定することが含まれます。アクセス許可ポリシーは、リソースに対して目的のタスクを実行するために必要なアクセス許可をロールのユーザーに付与します。信頼ポリシーは、どの信頼されたアカウントのユーザーに、ロールを引き受ける権限を与えるかを指定します。詳細については、IAM の用語と概念を参照してください。

    クロスアカウントのアクセス許可を付与するには、アイデンティティベースのアクセス許可ポリシーを IAM ロールにアタッチします。たとえば、アカウント A の管理者は、次のように別の Amazon Web Services アカウント (たとえば、アカウント B) または AWS のサービスにクロスアカウントアクセス許可を付与するロールを作成できます。

    1. アカウント A の管理者は、IAM ロールを作成して、アカウント A のリソースに権限を付与するロールに権限ポリシーをアタッチします。

    2. アカウント A の管理者は、アカウント B をそのロールを引き受けるプリンシパルとして識別するロールに、信頼ポリシーをアタッチします。

    3. アカウント B の管理者は、アカウント B の任意のユーザーにロールを引き受けるアクセス許可を委任できるようになります。これにより、アカウント B のユーザーにアカウント A のリソースの作成とアクセスが許可されます。AWS のサービスにロールを引き受けるアクセス許可を付与する場合は、信頼ポリシーのプリンシパルは AWS のサービスのプリンシパルともなることができます。詳細については、IAM の用語と概念の Delegation (委任) を参照してください。

    IAM を使用した許可委任の詳細については、IAM ユーザーガイドアクセス管理を参照してください。

次のポリシーの例では、ユーザーが MyDemoRepo という名前のリポジトリでブランチを作成することを許可します。

{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "codecommit:CreateBranch" ], "Resource" : "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo" } ] }

アカウントのユーザーがアクセスできる呼び出しとリソースを制限するには、特定の IAM ポリシーを作成した後、IAM ユーザーにそれらのポリシーをアタッチします。IAM ロールを作成する方法、および CodeCommit の IAM ポリシーステートメントの例を調べる方法の詳細については、カスタマー管理のアイデンティティポリシーの例 を参照してください。

リソースベースのポリシー

Amazon S3 などのいくつかのサービスでは、リソースベースのアクセス許可ポリシーもサポートされています。たとえば、リソースベースのポリシーを S3 バケットにアタッチして、そのバケットに対するアクセス権限を管理できます。CodeCommit はリソースベースのポリシーをサポートしていませんが、タグを使用してリソースを識別し、IAM ポリシーで使用できます。タグベースのポリシーの例については、アイデンティティベースのポリシー (IAM ポリシー) を参照してください。

CodeCommit でのリソースのスコープ

CodeCommit では、CodeCommit のリソースとオペレーション で説明されているように、アイデンティティベースのポリシーとリソースへのアクセス許可の範囲を指定できます。ただし、リソースへの ListRepositories アクセス許可の範囲を指定することはできません。代わりに、すべてのリソースを範囲とします (ワイルドカード * を使用)。そうしない場合、そのアクションは失敗します。

他のすべての CodeCommit アクセス許可は、リソースにスコープできます。

ポリシー要素 (リソース、アクション、効果、プリンシパル) の指定

リソースへのユーザーのアクセスを許可または拒否するポリシー、または、それらのリソースに対してユーザーが特定のアクションを実行するのを許可または拒否するポリシーを作成できます。CodeCommit は、一連のパブリック API オペレーションで、ユーザーがサービスを操作する方法 (CodeCommit コンソール、SDK、AWS CLI で、または、それらの API の直接呼び出しなど) を指定します。これらの API オペレーションを実行するためのアクセス許可を付与するために、CodeCommit ではポリシーに一連のアクションを定義できます。

API オペレーションによっては、複数のアクションに対するアクセス許可が必要になる場合があります。リソースおよび API オペレーションに関する詳細については、「CodeCommit のリソースとオペレーション」および「CodeCommit アクセス許可リファレンス」を参照してください。

以下に、ポリシーの基本的な要素を示します。

  • リソース – ポリシーを適用するリソースを識別するには、Amazon リソースネーム (ARN) を使用します。詳細については、「CodeCommit のリソースとオペレーション」を参照してください。

  • アクション – 許可または拒否するリソースオペレーションを識別するには、アクションキーワードを使用します。例えば、指定された Effect に応じて、codecommit:GetBranch アクセス許可は、CodeCommit リポジトリのブランチの詳細を取得する GetBranch オペレーションをユーザーが実行するのを許可または拒否します。

  • 効果 – ユーザーが特定のアクションをリクエストする際の効果の実行について、許可または拒否のいずれかを指定します。リソースへのアクセスを明示的に許可していない場合、アクセスは暗黙的に拒否されます。また、明示的にリソースへのアクセスを拒否すると、別のポリシーによってアクセスが許可されている場合でも、ユーザーはリソースにアクセスできなくなります。

  • プリンシパル – CodeCommit がサポートしている唯一のポリシータイプであるアイデンティティベースのポリシー (IAM ポリシー) で、ポリシーがアタッチされているユーザーが黙示的なプリンシパルとなります。

IAM ポリシーの構文の詳細については、IAM ユーザーガイドIAM ポリシーリファレンスを参照してください。

すべての CodeCommit API アクションとそれらが適用されるリソースの表については、CodeCommit アクセス許可リファレンス を参照してください。

ポリシーでの条件を指定する

アクセス許可を付与するとき、IAM のアクセスポリシー言語を使用してポリシーの適用条件を指定できます。たとえば、特定の日付の後にのみ適用されるポリシーが必要になる場合があります。ポリシー言語での条件の指定の詳細については、IAM ユーザーガイド条件およびポリシーの文法を参照してください。

条件を表すには、あらかじめ定義された条件キーを使用します。CodeCommit に固有の条件キーはありません。ただし、必要に応じて使用できる AWS 全体の条件キーがあります。AWS 全体を対象とするすべてのキーのリストについては、IAM ユーザーガイド条件に利用可能なキーを参照してください。