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

AWS CodeCommit は新規顧客には利用できなくなりました。 AWS CodeCommit の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細はこちら

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

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

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

認証

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

アイデンティティタイプ

  • IAM ユーザーIAM ユーザーは、単に特定のカスタムアクセス許可を持つ、Amazon Web Services アカウント内のアイデンティティです。例えば、IAM ユーザーは、CodeCommit リポジトリにアクセスするための Git 認証情報を作成および管理するためのアクセス許可を持つことができます。以下は、CodeCommit での作業に推奨されるユーザータイプです。IAM ユーザー名とパスワードを使用して、、 AWS ディスカッションフォーラムAWS Management ConsoleAWS 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 サービスにプログラムでアクセスするときは、いずれかの AWS SDKs または AWS Command Line Interface (AWS CLI) を使用してアクセスキーを使用します。SDK と CLI ツールでは、アクセスキーを使用してリクエストが暗号で署名されます。 AWS ツールを使用しない場合は、リクエストに自分で署名する必要があります。CodeCommit では、署名バージョン 4 がサポートされています。これは、インバウンド API リクエストを認証するためのプロトコルです。リクエストの認証の詳細については、『』の「署名バージョン 4 の署名プロセスAWS 全般のリファレンス」を参照してください。

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

    重要

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

  • IAM Identity Center と IAM Identity Center のユーザー – AWS IAM Identity Center の機能を拡張 AWS Identity and Access Management し、ユーザーの管理と AWS アカウント およびクラウドアプリケーションへのアクセスをまとめた一元的な場所を提供します。IAM Identity Center は、 AWSを使用するほとんどのユーザーにベストプラクティスとして推奨されていますが、現在のところ、Git 認証情報や SSH キーペアのメカニズムは提供されていません。これらのユーザーは、git-remote-codecommit をインストールして CodeCommit リポジトリのクローンをローカルに作成するように設定できますが、すべての統合開発環境 (IDE) が git-remote-codecommit を使用したクローン作成、プッシュ、またはプルをサポートしているわけではありません。

    ベストプラクティスとして、人間のユーザーが一時的な認証情報 AWS のサービス を使用して にアクセスするには、ID プロバイダーとのフェデレーションを使用する必要があります。

    フェデレーティッド ID は、エンタープライズディレクトリ、ウェブ ID プロバイダー、または ID ソースの認証情報 AWS のサービス を使用して Directory Service にアクセスするユーザーです。フェデレーティッドアイデンティティは、一時的な認証情報を提供するロールを引き受けます。

    一元的なアクセス管理を行うには、 をお勧めします AWS IAM Identity Center。詳細については、「AWS IAM Identity Center ユーザーガイド」の「What is IAM Identity Center?」(IAM Identity Center とは?) を参照してください。

  • IAM ロール – IAM ユーザーと同様に、IAM ロールは、アカウントに作成できる IAM アイデンティティで、特定のアクセス許可を付与できます。

    IAM ロールは、一時的な認証情報を提供する特定のアクセス許可を持つ ID です。ユーザーから IAM ロール (コンソール) に切り替えるか、 または API オペレーションを呼び出すことで、ロールを引き受けることができます。 AWS CLI AWS 詳細については、「IAM ユーザーガイド」の「ロールを引き受けることができない」を参照してください。

    IAM ロールは、フェデレーティッドユーザーアクセス、一時的な IAM ユーザーアクセス許可、クロスアカウントアクセス、クロスサービスアクセス、および Amazon EC2 で実行されているアプリケーションに役立ちます。詳細については、「IAM ユーザーガイド」の「IAM でのクロスアカウントリソースアクセス」を参照してください。

    注記

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

アクセスコントロール

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

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

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

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

注記

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

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

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

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

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

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

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

すべての CodeCommit リポジトリ

arn:aws:codecommit:*

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

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

注記

ほとんどの AWS サービスは、ARN のARNs。ただし、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 ID にアクセス許可ポリシーをアタッチします。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 という名前のリポジトリでブランチを作成することを許可します。

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

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

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

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

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

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

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

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

リソースへのユーザーのアクセスを許可または拒否するポリシー、または、それらのリソースに対してユーザーが特定のアクションを実行するのを許可または拒否するポリシーを作成できます。CodeCommit は、ユーザーが CodeCommit コンソール、 SDKs、、 AWS CLIまたはこれらの API を直接呼び出してサービスを操作する方法を定義する一連のパブリック APIs オペレーションを定義します。これらの 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 ユーザーガイド「条件に使用可能なキー」を参照してください。