翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 ユーザーは、単に特定のカスタムアクセス許可を持つ、Amazon Web Services アカウント内のアイデンティティです。例えば、IAM ユーザーは、CodeCommit リポジトリにアクセスするための Git 認証情報を作成および管理するためのアクセス許可を持つことができます。以下は、CodeCommit での作業に推奨されるユーザータイプです。IAM のユーザー名とパスワードを使用して、AWS Management Console
、AWS ディスカッションフォーラム 、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 リクエストを認証するためのプロトコルです。リクエストの認証の詳細については、『』の「署名バージョン 4 の署名プロセスAWS 全般のリファレンス」を参照してください。 -
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 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 を使用したクローン作成、プッシュ、またはプルをサポートしているわけではありません。
ベストプラクティスとして、管理者アクセスを必要とするユーザーを含む人間のユーザーに対し、ID プロバイダーとのフェデレーションを使用して、一時的な認証情報の使用により、AWS のサービスにアクセスすることを要求します。
フェデレーテッドアイデンティティ は、エンタープライズユーザーディレクトリ、ウェブ ID プロバイダー、AWS Directory Service、アイデンティティセンターディレクトリのユーザーか、または ID ソースから提供された認証情報を使用して AWS のサービス にアクセスするユーザーです。フェデレーテッドアイデンティティ が AWS アカウント にアクセスすると、ロールが継承され、ロールは一時的な認証情報を提供します。
アクセスを一元管理する場合は、AWS IAM Identity Center を使用することをお勧めします。IAM アイデンティティセンター でユーザーとグループを作成するか、すべての AWS アカウント とアプリケーションで使用するために、独自の ID ソースで一連のユーザーとグループに接続して同期することもできます。IAM アイデンティティセンター の詳細については、「AWS IAM Identity Center ユーザーガイド」の「What is IAM アイデンティティセンター?」(IAM アイデンティティセンター とは) を参照してください。
-
IAM ロール – IAM ユーザーと同様に、IAM ロールは、アカウントに作成できる IAM アイデンティティで、特定のアクセス許可を付与できます。
IAM ロールは、特定の権限を持つ、AWS アカウント 内のアイデンティティです。これは IAM ユーザーに似ていますが、特定のユーザーには関連付けられていません。ロールを切り替えることによって、AWS Management Console で IAM ロールを一時的に引き受けることができます。ロールを引き受けるには、AWS CLI または AWS API オペレーションを呼び出すか、カスタム URL を使用します。ロールを使用する方法の詳細については、『IAM ユーザーガイド』の「IAM ロールの使用」を参照してください。
一時的な認証情報を持った IAM ロールは、以下の状況で役立ちます。
-
フェデレーションユーザーユーザーアクセス – フェデレーションアイデンティティに権限を割り当てるには、ロールを作成してそのロールの権限を定義します。フェデレーティッドアイデンティティが認証されると、そのアイデンティティはロールに関連付けられ、ロールで定義されている権限が付与されます。フェデレーションの詳細については、「IAM ユーザーガイド」の「サードパーティー ID プロバイダー向けロールの作成」を参照してください。IAM アイデンティティセンターを使用する場合、権限セットを設定します。アイデンティティが認証後にアクセスできるものを制御するため、IAM Identity Center は、権限セットを IAM のロールに関連付けます。権限セットの詳細については、『AWS IAM Identity Center ユーザーガイド』の「権限セット」を参照してください。
-
一時的な IAM ユーザー権限 - IAM ユーザーまたはロールは、特定のタスクに対して複数の異なる権限を一時的に IAM ロールで引き受けることができます。
-
クロスアカウントアクセス - IAM ロールを使用して、自分のアカウントのリソースにアクセスすることを、別のアカウントの人物 (信頼済みプリンシパル) に許可できます。クロスアカウントアクセス権を付与する主な方法は、ロールを使用することです。ただし、一部の AWS のサービスでは、(ロールをプロキシとして使用する代わりに) リソースにポリシーを直接アタッチできます。クロスアカウントアクセスにおけるロールとリソースベースのポリシーの違いについては、『IAM ユーザーガイド』の「IAM ロールとリソースベースのポリシーとの相違点」を参照してください。
-
クロスサービスアクセス - 一部の AWS のサービスでは、他の AWS のサービスの機能を使用します。例えば、あるサービスで呼び出しを行うと、通常そのサービスによって Amazon EC2 でアプリケーションが実行されたり、Amazon S3 にオブジェクトが保存されたりします。サービスでは、呼び出し元プリンシパルの権限、サービスロール、またはサービスリンクロールを使用してこれを行う場合があります。
-
転送アクセスセッション (FAS) – IAM ユーザーまたはロールを使用して AWS でアクションを実行するユーザーは、プリンシパルと見なされます。一部のサービスを使用する際に、アクションを実行することで、別のサービスの別のアクションがトリガーされることがあります。FAS は、AWS のサービスを呼び出すプリンシパルの権限を、AWS のサービスのリクエストと合わせて使用し、ダウンストリームのサービスに対してリクエストを行います。FAS リクエストは、サービスが、完了するために他の AWS のサービス またはリソースとのやりとりを必要とするリクエストを受け取ったときにのみ行われます。この場合、両方のアクションを実行するための権限が必要です。FAS リクエストを行う際のポリシーの詳細については、「転送アクセスセッション」を参照してください。
-
サービスロール - サービスがユーザーに代わってアクションを実行するために引き受ける IAM ロールです。IAM 管理者は、IAM 内からサービスロールを作成、変更、削除できます。詳細については、『IAM ユーザーガイド』の「AWS のサービス に権限を委任するロールの作成」を参照してください。
-
サービスリンクロール - サービスリンクロールは、AWS のサービス にリンクされたサービスロールの一種です。サービスがロールを引き受け、ユーザーに代わってアクションを実行できるようになります。サービスリンクロールは、AWS アカウント に表示され、サービスによって所有されます。IAM 管理者は、サービスリンクロールの権限を表示できますが、編集することはできません。
-
-
Amazon EC2 で実行されているアプリケーション - EC2 インスタンスで実行され、AWS CLI または AWS API 要求を行っているアプリケーションの一時的な認証情報を管理するには、IAM ロールを使用できます。これは、EC2 インスタンス内でのアクセスキーの保存に推奨されます。AWS ロールを EC2 インスタンスに割り当て、そのすべてのアプリケーションで使用できるようにするには、インスタンスに添付されたインスタンスプロファイルを作成します。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるプログラムは一時的な認証情報を取得できます。詳細については、「IAM ユーザーガイド」の「Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス許可を付与する」を参照してください。
IAM ロールと IAM ユーザーのどちらを使用するかについては、『IAM ユーザーガイド』の「(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: |
すべての 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
"
特定のアカウントに属するすべてのリポジトリを指定するには、以下のようにワイルドカード文字 (*) を使用します。
"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 のサービスにクロスアカウントアクセス許可を付与するロールを作成できます。
-
アカウント A の管理者は、IAM ロールを作成して、アカウント A のリソースに権限を付与するロールに権限ポリシーをアタッチします。
-
アカウント A の管理者は、アカウント B をそのロールを引き受けるプリンシパルとして識別するロールに、信頼ポリシーをアタッチします。
-
アカウント 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 ユーザーガイドの条件に利用可能なキーを参照してください。