AWS CodeCommit の認証とアクセスコントロール
AWS CodeCommit へのアクセスには、認証情報が必要です。これらの認証情報には、CodeCommit リポジトリなどの AWS リソースにアクセスするためのアクセス許可が付与されており、Git 接続を作成するために使用する Git 認証情報や SSH パブリックキーの管理に使用する IAM ユーザーが含まれている必要があります。以下のセクションでは、「AWS Identity and Access Management (IAM)」と「CodeCommit」を使用してリソースに安全にアクセスする方法について詳しく説明します。
認証
CodeCommit リポジトリは Git ベースで Git 認証情報を含む Git の基本機能をサポートしているので、CodeCommit で作業する場合は、IAM ユーザーを使用することをお勧めします。他のアイデンティティタイプで CodeCommit にアクセスすることができますが、その他のアイデンティティタイプは、以下に説明するように制限されることがあります。
アイデンティティタイプ
-
IAM ユーザー – IAM ユーザーは、単に特定のカスタムアクセス許可を持つ、AWS アカウント内のアイデンティティです。たとえば、IAM ユーザーは、CodeCommit リポジトリにアクセスするための Git 認証情報を作成および管理するためのアクセス許可を持つことができます。 以下は、CodeCommit での作業に推奨されるユーザータイプです。 IAM のユーザー名とパスワードを使用して、AWS マネジメントコンソール
、AWS ディスカッションフォーラム 、AWS Support Center などのセキュリティ保護された 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 Command Line Interface (AWS CLI) を使ってプログラムで、AWS サービスにアクセスするときに、アクセスキーを使用します。SDK と CLI ツールでは、アクセスキーを使用してリクエストが暗号で署名されます。AWS ツールを使用しない場合は、リクエストを自分で署名する必要があります。CodeCommit supports では、署名バージョン 4 がサポートされています。これは、インバウンド API リクエストを認証するためのプロトコルです。リクエストの認証の詳細については、『AWS General Reference』の「署名バージョン 4 の署名プロセス」を参照してください。 -
AWS アカウントのルートユーザー – AWS にサインアップするときは、AWS アカウントに関連付けられた E メールアドレスとパスワードを指定します。これらは ルート認証情報であり、これらの情報を使用すると、すべての AWS リソースへの完全なアクセスが可能になります。ルートアカウントのユーザーは、一部の CodeCommit 機能を利用できません。また、root アカウントで Git を使用する唯一の方法は、git-remote-codecommit をインストールおよび設定するか (推奨)、AWS CLI に含まれている AWS 認証情報ヘルパーを設定することです。ルートアカウントのユーザーは、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 ロールを使って、お客様のアカウントのリソースへアクセスするためのアクセス許可を別の AWS アカウントに付与できます。この例については、IAM ユーザーガイド の「ロールを使用して AWS CodeCommit リポジトリへのクロスアカウントアクセスを設定する」および「チュートリアル: IAM ロールを使用した AWS アカウント間のアクセスの委任」を参照してください。
-
AWS のサービスのアクセス – アカウントで IAM ロールを使用して、アカウントのリソースにアクセスするために AWS のサービスに必要なアクセス権限を付与できます。たとえば、AWS Lambda がお客様に代わって CodeCommit リポジトリにアクセスするのを許可するロールを作成できます。詳細については、IAM ユーザーガイドのAWS サービスにアクセス許可を委任するロールの作成を参照してください。
-
Amazon EC2 で実行されるアプリケーション – EC2 インスタンスで実行中のアプリケーションによる使用や、AWS API リクエストの作成を目的として、アクセスキーをこのインスタンス内に保存する代わりに、IAM ロールを使用して、これらのアプリケーション用の一時認証情報を管理できます。AWS ロールを EC2 インスタンスに割り当て、そのすべてのアプリケーションで使用できるようにするには、インスタンスにアタッチされたインスタンスプロファイルを作成します。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるプログラムは一時認証情報を取得することができます。詳細については、『IAM ユーザーガイド』の「Amazon EC2 上のアプリケーションに対するロールの使用」を参照してください。
-
アクセスコントロール
リクエストを認証するために有効な認証情報を持つことができますが、アクセス許可を持っていなければ CodeCommit リソースを作成またはアクセスすることはできません。たとえば、リポジトリの表示、コードのプッシュ、Git の認証情報の作成および管理などにはアクセス許可が必要です。
以下のセクションでは、CodeCommit のアクセス許可を管理する方法について説明します。最初に概要のセクションを読むことをお勧めします。
CodeCommit リソースに対するアクセス許可の管理の概要
AWS リソースはすべて、AWS アカウントによって所有されます。リソースを作成またはアクセスするためのアクセス許可は、アクセス許可ポリシーで管理されます。アカウント管理者は、IAM ID (ユーザー、グループ、ロール) にアクセス許可ポリシーをアタッチできます。一部のサービス (AWS Lambda など) は、アクセス許可ポリシーをリソースにアタッチすることができます。
アカウント管理者 (または管理者ユーザー) は、管理者権限を持つユーザーです。詳細については、IAM ユーザーガイド の「IAM のベストプラクティス」を参照してください。
アクセス許可を付与する場合、アクセス許可を取得するユーザー、取得するアクセス許可の対象となるリソース、およびそれらのリソースに対して許可される特定のアクションを決定します。
トピック
CodeCommit リソースおよびオペレーション
CodeCommit では、プライマリリソースは repository です。リソースにはそれぞれ、一意の Amazon リソースネーム (ARN) が関連付けられています。ポリシーで Amazon リソースネーム (ARN) を使用して、ポリシーを適用するリソースを識別します。ARN の詳細については、『アマゾン ウェブ サービス全般のリファレンス』の『Amazon リソースネーム (ARN) と AWS のサービスの名前空間』を参照してください。CodeCommit では、現在、サブリソースと呼ばれる他のリソースタイプはサポートされていません。
次の表で、CodeCommit リソースを指定する方法について説明します。
リソースタイプ | ARN 形式 |
---|---|
リポジトリ |
arn:aws:codecommit: |
すべての CodeCommit リポジトリ |
arn:aws:codecommit:* |
指定した AWS リージョンの指定したアカウントが所有するすべての CodeCommit リポジトリ |
arn:aws:codecommit: |
ほとんどの AWS のサービスでは、ARN 内のコロン (:) またはスラッシュ (/) は同じ文字として扱われます。ただし、CodeCommit では、リソースパターンおよびルールで完全一致が必要です。イベントパターンの作成時に正しい ARN 文字を使用して、リソース内の ARN 構文とそれらの文字が一致する必要があります。
たとえば、以下の要領で ARN を使用して、ステートメント内で特定のリポジトリ (MyDemoRepo
) を指定することができます。
"Resource": "arn:aws:codecommit:
us-west-2
:111111111111
:MyDemoRepo
"
特定のアカウントに属するすべての repositories を指定するには、以下のようにワイルドカード文字 (*) を使用します。
"Resource": "arn:aws:codecommit:
us-west-2
:111111111111
:*
"
すべてのリソースを指定する場合、または特定の API アクションが ARN をサポートしていない場合は、以下の要領で、Resource
エレメント内でワイルドカード文字 (*) を使用します。
"Resource": "
*
"
また、ワイルドカード文字 (*) を使用して、リポジトリ名の一部に一致するすべてのリソースを指定できます。たとえば、以下の ARN は、us-east-2
の AWS リージョン内の AWS アカウント 111111111111
に登録されている名前 MyDemo
で始まる CodeCommit リポジトリを指定しています。
arn:aws:codecommit:us-east-2:111111111111:MyDemo*
CodeCommit リソースで動作する使用可能なオペレーションのリストについては、「CodeCommit のアクセス許可に関するリファレンス」を参照してください。
リソース所有権について
AWS アカウントは、誰がリソースを作成したかにかかわらず、アカウントで作成されたリソースを所有します。具体的には、リソース所有者は、リソースの作成リクエストを認証するプリンシパルエンティティ (ルートアカウント、IAM ユーザー、または IAM ロール) の AWS アカウントです。以下の例では、このしくみを示しています。
-
AWS アカウントに IAM ユーザーを作成し、そのユーザーに CodeCommit リソースを作成するアクセス許可を付与する場合、そのユーザーは CodeCommit リソースを作成できます。ただし、ユーザーが属する AWS アカウントは CodeCommit リソースを所有しているとします。
-
AWS アカウントのルートアカウントの認証情報を使用してルールを作成する場合、AWS アカウントは CodeCommit リソースの所有者です。
-
CodeCommit リソースを作成するためのアクセス許可を持つ AWS アカウントに IAM ロールを作成する場合は、ロールを引き受けることのできるいずれのユーザーも CodeCommit リソースを作成できます。ロールが属する AWS アカウントは CodeCommit リソースを所有しているとします。
リソースへのアクセスの管理
AWS リソースへのアクセスを管理するには、アクセス許可ポリシーを使用します。アクセスポリシーでは、誰が何にアクセスできるかを記述します。以下のセクションで、アクセス許可のポリシーを作成するためのオプションについて説明します。
このセクションでは、CodeCommit のコンテキストでの IAM の使用について説明します。これは、IAM サービスに関する詳細情報を取得できません。IAM の詳細については、『IAM ユーザーガイド』の「IAM とは」を参照してください。IAM ポリシー構文の詳細および説明については、IAM ユーザーガイド の「AWS IAM ポリシーリファレンス」を参照してください。
IAM アイデンティティにアタッチされたアクセス許可ポリシーは、アイデンティティベースのポリシー (IAM ポリシー) と呼ばれます。リソースにアタッチされたアクセス許可ポリシーは、リソースベースのポリシーと呼ばれます。現在、CodeCommit では、アイデンティティベースのポリシー (IAM ポリシー) のみがサポートされています。
アイデンティティベースのポリシー (IAM ポリシー)
AWS リソースへのアクセスを管理するには、IAM アイデンティティにアクセス許可ポリシーをアタッチします。CodeCommit で、アイデンティティベースのポリシーを使用して、リポジトリへのアクセスを制御します。たとえば、次の操作を実行できます。
-
アカウントのユーザーまたはグループにアクセス許可ポリシーをアタッチする – CodeCommit コンソールに CodeCommit リソースを表示するアクセス許可をユーザーに付与するには、ユーザーまたはユーザーが属するグループにアイデンティティベースのアクセス許可ポリシーをアタッチします。
-
アクセス許可ポリシーをロールにアタッチする (クロスアカウントのアクセス許可を付与) – クロスアカウントアクセスを付与するときなど、委任には、リソースを所有するアカウント (信頼するアカウント) と、リソースへアクセスする必要のあるユーザーを含むアカウント (信頼されたアカウント) の間に信頼を設定することが含まれます。アクセス許可ポリシーは、リソースに対して目的のタスクを実行するために必要なアクセス許可をロールのユーザーに付与します。信頼ポリシーは、どの信頼されたアカウントのユーザーに、ロールを引き受ける権限を与えるかを指定します。詳細については、「IAM の用語と概念」を参照してください。
クロスアカウントのアクセス許可を付与するには、アイデンティティベースのアクセス許可ポリシーを IAM ロールにアタッチします。たとえば、アカウント A の管理者は、次のように別の AWS アカウント (たとえば、アカウント B) または AWS サービスにクロスアカウントアクセス許可を付与するロールを作成できます。
-
アカウント A の管理者は、IAM ロールを作成して、アカウント A のリソースに権限を付与するロールに権限ポリシーをアタッチします。
-
アカウント A の管理者は、アカウント B をそのロールを引き受けるプリンシパルとして識別するロールに、信頼ポリシーをアタッチします。
-
アカウント B の管理者は、アカウント B の任意のユーザーにロールを引き受けるアクセス許可を委任できるようになります。これにより、アカウント B のユーザーにアカウント A のリソースの作成とアクセスが許可されます。AWS のサービスにロールを引き受けるアクセス許可を付与する場合は、信頼ポリシーのプリンシパルは AWS のサービスのプリンシパルともなることができます。詳細については、「IAM の用語と概念」の「委託」を参照してください。
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 ユーザーガイド』の「AWS IAM ポリシーのリファレンス」を参照してください。
すべての CodeCommit API アクションとそれらが適用されるリソースの表については、「CodeCommit のアクセス許可に関するリファレンス」を参照してください。
ポリシーでの条件を指定する
アクセス許可を付与するとき、IAM のアクセスポリシー言語を使用してポリシーの適用条件を指定できます。たとえば、特定の日付の後にのみ適用されるポリシーが必要になる場合があります。ポリシー言語での条件の指定の詳細については、『IAM ユーザーガイド』の「条件」および「ポリシーの文法」を参照してください。
条件を表すには、あらかじめ定義された条件キーを使用します。CodeCommit に固有の条件キーはありません。ただし、必要に応じて使用できる AWS 全体の条件キーがあります。AWS 全体を対象とするすべてのキーのリストについては、IAM ユーザーガイド の「条件に利用可能なキー」を参照してください。