AWS CodeBuild リソースに対するアクセス許可の管理の概要
すべての AWS リソースは AWS アカウントによって所有され、リソースの作成またはアクセスは、アクセス権限のポリシーによって管理されます。アカウント管理者は、IAM ID (ユーザー、グループ、ロール) にアクセス許可ポリシーをアタッチできます。
アカウント管理者 (または管理者ユーザー) は、管理者権限を持つユーザーです。詳細については、 の「IAM のベストプラクティスIAM ユーザーガイド」を参照してください。
アクセス許可を付与するときは、アクセス許可を取得するユーザー、アクセスできるリソース、およびそれらのリソースに対して実行できるアクションを決定します。
AWS CodeBuild リソースおよびオペレーション
AWS CodeBuild で、プライマリリソースはビルドプロジェクトです。ポリシーで Amazon リソースネーム (ARN) を使用して、ポリシーを適用するリソースを識別します。ビルドもリソースであり、ARNs が関連付けられています。詳細については、AWS の「Amazon リソースネーム (ARN) と アマゾン ウェブ サービス全般のリファレンス のサービスの名前空間」を参照してください。
リソースタイプ | ARN 形式 |
---|---|
ビルドプロジェクト |
|
Build |
|
レポートグループ | arn:aws:codebuild: |
レポート | arn:aws:codebuild: |
すべての CodeBuild リソース |
|
特定の AWS リージョンの特定アカウントが所有するすべての CodeBuild リソース |
|
ほとんどの AWS のサービスでは、ARNs 内でコロン (:) またはスラッシュ (/) は同じ文字として扱われます。 ただし、CodeBuild では、リソースパターンとルールで完全一致が使用されます。イベントパターンの作成時に正しい文字を使用して、リソース内の ARN 構文とそれらの文字が一致する必要があります。
たとえば、特定のビルドプロジェクト (myBuildProject
) を、次のように ARN を使用してステートメントに追加します。
"Resource": "arn:aws:codebuild:
us-east-2
:123456789012
:project/myBuildProject
"
すべてのリソースを指定する場合、または API アクションが ARNs をサポートしていない場合は、以下のように Resource
エレメント内でワイルドカード文字 (*) を使用します。
"Resource": "*"
一部の CodeBuild API アクションは複数のリソースを受け入れます (例: BatchGetProjects
)。1 つのステートメントで複数のリソースを指定するには、次のように ARNs をカンマで区切ります。
"Resource": [ "arn:aws:codebuild:
us-east-2
:123456789012
:project/myBuildProject
", "arn:aws:codebuild:us-east-2
:123456789012
:project/myOtherBuildProject
" ]
CodeBuild には、CodeBuild リソースを操作するための一連のオペレーションが用意されています。リストについては、「AWS CodeBuild のアクセス許可に関するリファレンス」を参照してください。
リソース所有権について
AWS アカウントは、誰がリソースを作成したかにかかわらず、アカウントで作成されたリソースを所有します。具体的には、リソース所有者は、リソースの作成リクエストを認証するAWSプリンシパルエンティティ (ルートアカウント、 ユーザー、または IAM ロール) の IAM アカウントです。以下の例では、このしくみを示しています。
-
AWS アカウントのルートアカウントの認証情報を使用してルールを作成する場合、AWS アカウントは CodeBuild リソースの所有者です。
-
AWS アカウントに IAM ユーザーを作成し、そのユーザーに CodeBuild リソースを作成するアクセス許可を付与する場合、そのユーザーは CodeBuild リソースを作成できます。ただし、ユーザーが属する AWS アカウントは CodeBuild リソースを所有しているとします。
-
CodeBuild リソースを作成するためのアクセス許可を持つ AWS アカウントに IAM ロールを作成する場合は、ロールを引き受けることのできるいずれのユーザーも CodeBuild リソースを作成できます。ロールが属する AWS アカウントは CodeBuild リソースを所有しているとします。
リソースへのアクセスの管理
アクセスポリシーでは、誰がどのリソースにアクセスできるかを記述します。
IAM アイデンティティにアタッチされているポリシーは、アイデンティティベースのポリシー (IAM ポリシー) と呼ばれます。リソースにアタッチされたポリシーは、リソースベースのポリシーと呼ばれます。CodeBuild では、アイデンティティベース (IAM ポリシー) のみがサポートされています。
アイデンティティベースのポリシー
ポリシーを IAM アイデンティティにアタッチできます。
-
アカウントのユーザーまたはグループにアクセス許可ポリシーをアタッチする – AWS CodeBuild コンソールのビルドプロジェクトや他の AWS CodeBuild リソースを表示するためのアクセス許可をユーザーに付与するには、ユーザーやユーザーが所属するグループにアクセス許可ポリシーをアタッチできます。
-
アクセス許可ポリシーをロールにアタッチする (クロスアカウントのアクセス許可を付与する) – アイデンティティベースのアクセス許可ポリシーを IAM ロールにアタッチして、クロスアカウントのアクセス許可を付与することができます。たとえば、アカウント A の管理者は、次のように別の AWS アカウント (たとえば、アカウント B) または AWS サービスにクロスアカウントアクセス許可を付与するロールを作成できます。
-
アカウント A の管理者は、IAM ロールを作成して、アカウント A のリソースに権限を付与するロールに権限ポリシーをアタッチします。
-
アカウント A の管理者は、アカウント B をそのロールを引き受けるプリンシパルとして識別するロールに、信頼ポリシーをアタッチします。
-
アカウント B の管理者は、アカウント B の任意のユーザーにロールを引き受けるアクセス許可を委任できるようになります。これにより、アカウント B のユーザーにアカウント A のリソースの作成とアクセスが許可されます。AWS サービスのアクセス許可を付与してロールを引き受けさせたい場合は、信頼ポリシー内のプリンシパルも、AWS サービスのプリンシパルである必要があります。
IAM を使用してアクセス権限を委任する詳しい方法については、「アクセス管理」 (IAM ユーザーガイド) を参照してください。
-
CodeBuild で、アイデンティティベースのポリシーは、デプロイプロセスに関連するリソースに対するアクセス許可を管理するために使用されます。たとえば、ビルドプロジェクトへのアクセスを制御できます。
お客様のアカウントのユーザーがアクセスを許可される呼び出しとリソースを制限する IAM ポリシーを作成し、IAM ユーザーにそれらのポリシーをアタッチできます。IAM ロールを作成する方法、CodeBuild の IAM ポリシーステートメントの例を調べる方法の詳細については、「AWS CodeBuild リソースに対するアクセス許可の管理の概要」を参照してください。
S3 バケットへの安全なアクセス
CodeBuild プロジェクトに関連付けられている S3 バケットが本人または本人が信頼するユーザーによって所有されていることを確認するために、次のアクセス許可を IAM ロールに含めることを強くお勧めします。これらのアクセス許可は、AWS 管理ポリシーおよびロールには含まれていません。自分で追加する必要があります。
-
s3:GetBucketACL
-
s3:GetBucketLocation
プロジェクトで使用している S3 バケットの所有者が変更された場合は、自分を本来のバケット所有者にして IAM ロールのアクセス許可を更新する必要があります (まだ更新していない場合)。詳細については、「IAM グループまたは IAM ユーザーに対して CodeBuild へのアクセス許可を追加する」および「CodeBuild サービスロールの作成」を参照してください。
ポリシー要素の指定: アクション、効果、プリンシパル
サービスは、AWS CodeBuild リソースごとに一連の API オペレーションを定義します。こうした API オペレーションへのアクセス権限を付与するために、CodeBuild は一連のアクションをポリシーに定義します。一部の API オペレーションは、API オペレーションを実行するために複数のアクションに対するアクセス許可を要求できます。詳細については、「AWS CodeBuild リソースおよびオペレーション」および「AWS CodeBuild のアクセス許可に関するリファレンス」を参照してください。
以下は、基本的なポリシーの要素です。
-
リソース – Amazon リソースネーム (ARN) を使用して、ポリシーを適用するリソースを識別します。
-
アクション – アクションのキーワードを使用して、許可または拒否するリソースオペレーションを識別します。たとえば、
codebuild:CreateProject
権限は、CreateProject
オペレーションを実行する権限をユーザーに与えます。 -
効果 – ユーザーがアクションをリクエストする際の効果を指定します。許可または拒否のいずれかになります。リソースへのアクセスを明示的に許可していない場合、アクセスは暗黙的に拒否されます。リソースへのアクセスを明示的に拒否することもできます。これは、別のポリシーがアクセスを許可している場合でも、ユーザーがリソースにアクセスできないようにするために行うことができます。
-
プリンシパル – アイデンティティベースのポリシー (IAM ポリシー) で、ポリシーがアタッチされているユーザーが暗黙のプリンシパルとなります。リソースベースのポリシーでは、権限を受け取りたいユーザー、アカウント、サービス、またはその他のエンティティを指定します。
IAM ポリシーの構文と記述の詳細については、IAMの「AWS IAM ユーザーガイド ポリシーの参照」を確認してください。
すべての CodeBuild API アクションとそれらが適用されるリソースの表については、「AWS CodeBuild のアクセス許可に関するリファレンス」を参照してください。