AWS CodePipeline にファイルをアップロードすると、"Access Denied" エラーが発生します。
解決策
Amazon Simple Storage Service (Amazon S3) バケットに対する権限が十分でないことが原因で、"Access Denied" エラーまたは権限エラーが発生する可能性があります。AWS Identity and Access Management (IAM) ユーザーとロールに適切なアクセス権がアタッチされていない場合も、エラーが発生する可能性があります。
ユーザー権限
CodePipeline リソースを作成、管理するための AWS マネージドポリシー権限が IAM ユーザーにアタッチされていることを確認します。
CodePipeline のサービスロール
CodePipeline に関連付けられたサービスロールには、AWS サービスと連携するための権限が付与されていることを確認します。
サービスロールのステートメントを編集し、使用しないリソースへのアクセスを削除するか追加します。サービスロールのステートメントを編集し、特定のリソースに対する権限を制限するには、Resource 値に Amazon リソースネーム (ARN) を含めます。次の CodePipeline サービスロールポリシー例をリソースにアタッチして最小権限を付与します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3BucketAccess",
"Effect": "Allow",
"Action": [
"s3:GetBucketVersioning",
"s3:GetBucketAcl",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::[[pipeArtifactBucketNames]]"
],
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "{{accountId}}"
}
}
},
{
"Sid": "AllowS3ObjectAccess",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObjectTagging",
"s3:GetObjectTagging",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::[[pipeArtifactBucketNames]]/*"
],
"Condition": {
"StringEquals": {
"aws:ResourceAccount": "{{accountId}}"
}
}
}
]
}
注: pipeArtifactBucketNames を S3 バケット名に、accountId を AWS アカウント ID に置き換えてください。
CodePipeline のアーティファクトバケット
パイプラインのアーティファクトを保存する S3 バケットに対するバケットポリシーおよび権限が正しく割り当てられていることを確認します。
クロスアカウントアクセスについては、「クロスアカウントの CodeCommit リポジトリで CodePipeline ソースステージを構成する方法を教えてください」の「アカウント B で CodePipeline のアーティファクトバケットに対するバケットポリシーを更新する」セクションを参照してください。
AWS KMS の権限
暗号化に使用する AWS Key Management Service (AWS KMS) キーには、クロスアカウントリソースへのアクセス権を付与するキーポリシーが設定されていることを確認します。次のポリシー例を IAM ロールにアタッチして権限を追加し、クロスアカウントロールが KMS キーを使用できるようにします。
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account_B:role/cross_account_role_name", // allows access to cross account role
"AWS": "arn:aws:iam::account_B:root" // allows access to any role for account_B
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
}
注: account_B:role/cross_account_role_name を実際の ARN に置き換えてください、
CodeConnections の権限
パイプラインが AWS CodeConnections を使用する場合は、その接続がソースリポジトリへのアクセス権を持つことを確認します。リストに一部のリポジトリしか含まれていない場合は、サードパーティの Source Control Management (SCM) システムにインストールされたコネクタアプリケーションに制限が適用されている可能性があります。
この問題を解決するには、SCM でアプリケーションを更新し、リポジトリへのアクセスを付与します。SCM でリポジトリへのアクセスを確認するには、リポジトリアクセス設定をレビューします。CodeConnections を使用してサードパーティーのソースプロバイダーをパイプラインに追加することができます。