ARTIFACTORY: AWS S3连接和故障排除步骤
场景1:
由于S3文件存储库权限问题,Artifactory无法处理下载请求。
示例日志:
[jfrt] [ERROR] [7eba4cb41d212e78] [.f.t.s。][http-nio-8081- exec3] -从s3下载blob 'da0b0dfc939bc14fddd90be244882d3d9b61a567'失败
com.amazonaws.services.s3.model。AmazonS3 exception: Access Denied (Service: AmazonS3;状态码:403;错误码:AccessDenied;请求ID: XXXXX4S2TKYQ487Y;S3扩展请求ID: XXXXX5PPCjwA1Be0frXEcfUaj+dhDnb88woRy4OmZFQ5E3fUS9L5Cmtw31lyyXXXXSx+gS2k=;代理:零)
原因及解决方法:
上述错误通常与错误的凭据或缺少权限有关。请检查s3桶的连接权限。
用户应保持以下动作:“s3: propertynames”,
“s3: GetObject”,
“s3: ListAllMyBuckets”,
“s3: AbortMultipartUpload”,
“s3: ListBucket”,
“s3: DeleteObject”,
“s3: HeadBucket”,
“s3: ListMultipartUploadParts”
“s3: CreateBucket”
场景2:
在某些场景中,Artifactory无法下载/上传工件,因为cache-fs已满。
示例截图和错误日志:
原因及解决方法:
通常,如果分配给cache-fs存储的存储空间已满,即使S3文件存储中有足够的空间,也可能发生此问题。
cache-fs作为二进制缓存工作,使用LRU(最近最少使用)作为其清理协议。cache-fs协议可以提高Artifactory的性能,因为频繁的请求将由cache-fs提供服务。cache-fs二进制提供程序将是Artifactory最接近的文件存储层。这意味着,如果挂载了文件存储库,我们希望缓存-fs位于人工服务器本身的本地(如果文件存储库是本地的,那么缓存-fs就没有意义)。
为cache-fs分配足够的大小是一种好做法,因为它可以提高Artifactory的性能,因为频繁的请求将由cache-fs提供服务(它使用Least Recently Used作为其清理协议)。这意味着,如果文件存储被挂载在NFS/ S3 Cloud Storage上,那么本地节点上的缓存将有助于为Artifactory收到的频繁下载请求提供服务。
例如,每次从它下载一个工件时,都会自动保存在缓存中。它也可以作为FIFO(先进先出)顺序工作,所以当缓存填满时,它将删除缓存的第一个工件。
根据经验,您应该监视cache-fs 24小时,如果它在更短的时间内满了,这意味着最大缓存大小不够,可以增加以提高Artifactory性能。例如,如果我们有500gb的最大缓存大小,24小时后缓存只填满了200gb,那么可以肯定地说,我们不需要更多的缓存。
当您使用S3作为具有最终机制的文件存储时,5GB是cache-fs提供程序的默认值。为缓存分配的最大存储空间(以字节为单位)。
< maxCacheSize > 50000000000 < / maxCacheSize >
缓存< cacheProviderDir > < / cacheProviderDir >
> < /供应商
场景3:
当使用“S3存储v3”使用加密密钥和测试连接时,人工失败[jfrt] [ERROR] [a1e1ab1fc3221833] [ctoryContextConfigListener:128] [art-init] -应用程序无法初始化:测试连接S3AwsBinaryProvider服务器失败。远程文件ecfd1db9-XXXXXXXX72-c37cd360与本地文件:/opt/jfrog/artifactory/var/data/artifactory/testProvider-startup/ecfd1db9-25f2-XXXX-XXXX-XXX不匹配
java.lang.reflect.InvocationTargetException:零
产生原因:java.lang.RuntimeException: Failed to test connection with S3AwsBinaryProvider server。远程文件ecfd1db9-25f2-41fe-a272-c37cd360与本地文件:/opt/jfrog/artifactory/var/data/artifactory/testProvider-startup/ecfd1db9-25f2-XXXXXX-c37cd360a728不匹配
原因及解决方法:
此错误可能与内部已知问题RTMID-18958有关," S3 Storage v3 -使用加密密钥和testconnection导致人工加载失败",该问题是为使用" kmsServerSideEncryptionKeyId "和" testconnection=true "导致人工加载失败的场景创建的。为了解决这个错误,你应该把“testconnection”的值改为“false”,然后重新启动“Artifactory”。
场景4:
当为S3端点添加的证书与正确的DNS名称不一致时,Artifactory将抛出以下错误消息。
错误日志:
2022 - 06 - 24 t10:57:55.232l ^ [[1; 32 m [jfrt] ^ [[0; 39 m ^ [[1; 31 m(错误)^ [[0;39 m [dfebd86567e4587c] [s。S3SignedUrlStorageService:72] [art-init] -检查filestore/c1/c1c4e4ae4fe4c264fe253a6b627ccffd5675c808失败
javax.net.ssl.SSLPeerUnverifiedException:
原因及解决方法:
根据错误描述和解释,设置
场景5:
由于为S3桶添加了错误的凭据,Artifactory将抛出以下错误消息。
错误日志消息:
2012-04-22 18:37:48,031Z [jfrt] [WARN] [b21e8dd09760cb1d] [j.s.]S3JetS3tBinaryProvider:478] [art-init] -检查桶是否存在失败,桶artifactory-replication-storage-s3。服务错误信息。
[jfrt] [DEBUG] [b21e8dd09760cb1d] [j.s.]S3JetS3tBinaryProvider:388] [art-init] -开始添加项'6c956d8ad21e44e253dc8b8416f02dd39c3a4631'桶'artifactory-replication-storage-s3'到s3
[jfrt] [ERROR] [b21e8dd09760cb1d] [j.s.]S3JetS3tBinaryProvider:399] [art-init] -将blob '6c956d8ad21e44e253dc8b8416f02dd39c3a4631'放入s3失败,原因是403:您提供的AWS Access Key ID在我们的记录中不存在
org.jets3t.service。S3ServiceException: Service Error Message。
原因及解决方法:
此错误似乎表明“binarstore .xml”文件中提供的凭据有问题。您可能需要参考下面的AWS文档以获取更多信息:
https://aws.amazon.com/premiumsupport/knowledge-center/access-key-does-not-exist/
场景6:
当缓存太小或缓存已满时,我们会注意到连接超时问题。
错误日志消息:
上传失败,原因是{}
sdkclientexception:无法执行HTTP请求:超时等待连接池org.jfrog.storage.binstore.providers.cache.fs.ConcurrentReadCacheMissHandler.handleCacheMiss (ConcurrentReadCacheMissHandler.java: 64)
原因及解决方法:
当缓存太小,或者缓存快满了,Artifactory试图查询缓存然后缓冲文件(因为缓存已满)时,连接超时,就会发生上述错误。在本例中,我们需要增加binarstore .xml中配置的maxConnections和connectionTimeout。我们需要使用以下内容编辑binarstore .xml(突出显示的是我添加的内容),并重新启动实例以应用更改。真正< useInstanceCredentials > < / useInstanceCredentials >
200年< maxConnections > < / maxConnections >
100000年< connectionTimeout > < / connectionTimeout >
500000年< socketTimeout > < / socketTimeout >
> < /供应商
场景7:
当Artifactory无法信任为S3存储桶添加的证书时,将抛出以下错误。
错误日志消息:
org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为'storageServiceImpl'的bean时出错:通过方法'setBinaryStore'参数0表示不满意的依赖;org.springframework.beans.factory.BeanCreationException:创建名为'binaryServiceImpl'的bean时出错:init方法调用失败;嵌套异常是com.amazonaws.SdkClientException:无法执行HTTP请求:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径
原因及解决方法:
当为S3桶添加的证书不受Artifactory信任时,就会出现这个问题。为了解决这个问题,将S3桶所需的证书添加到Artifactory的$JFORG_HOME/ Artifactory /var/etc/security/trusted文件夹中,并重新启动Artifactory,以使更改生效。
场景8:
如何使用Amazon s3 bucket与kms服务器端加密与artifactory。
解决方案:
1.为Artifactory S3桶配置服务器端加密。以下连结供参考:
https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-kms-encryption.html。<配置version = " 2 " >
<链模板= " cluster-s3-storage-v3 " / >
端点> < s3.amazonaws.com > < /端点
< bucketName > bucketName < / bucketName >
<路径> pathPrefix > < /路径
<地区> s3Region > < /地区
<标识> yourIdentity > < /身份
<凭证> yourCredentials < /证书>
真正< usePresigning > < / usePresigning >
600年< signatureExpirySeconds > < / signatureExpirySeconds >
< kmsClientSideEncryptionKeyId > * * * * * < / kmsClientSideEncryptionKeyId >
> < /供应商
< / config >
2.在二进制存储模板中使用KMS详细信息。<配置version = " 2 " >
<链模板= " cluster-s3-storage-v3 " / >
端点> < s3.amazonaws.com > < /端点
< bucketName > bucketName < / bucketName >
<路径> pathPrefix > < /路径
<地区> s3Region > < /地区
<标识> yourIdentity > < /身份
<凭证> yourCredentials < /证书>
真正< usePresigning > < / usePresigning >
600年< signatureExpirySeconds > < / signatureExpirySeconds >
< kmsClientSideEncryptionKeyId > * * * * * < / kmsClientSideEncryptionKeyId >
> < /供应商
< / config >
场景9:
当使用S3 bucket配置kmsClientSideEncryptionKeyId时,Artifactory将抛出以下错误消息。
错误日志消息:
[2012-03-23] [jfrt] [ERROR] [45ad7832de304c87] [o.a.w.s s.]RepoFilter:315] [HTTP -nio-8081-exec-3] -发送HTTP错误码500:null (Service: AWSKMS;状态码:400;错误码:AccessDeniedException;请求ID: af406bd0-0736-46ba-9410-a9226e9311d9;代理:零)
61
model. awskmsexception: null (Service: AWSKMS;状态码:400;错误码:AccessDeniedException;请求ID: af406bd0-0736-46ba-9410-a9226e9311d9;代理:零)
60
com.amazonaws.http.AmazonHttpClient RequestExecutor.handleErrorResponse美元(AmazonHttpClient.java: 1828)
59
com.amazonaws.http.AmazonHttpClient RequestExecutor.handleServiceErrorResponse美元(AmazonHttpClient.java: 1412)
58
com.amazonaws.http.AmazonHttpClient RequestExecutor.executeOneRequest美元(AmazonHttpClient.java: 1374)
57
com.amazonaws.http.AmazonHttpClient RequestExecutor.executeHelper美元(AmazonHttpClient.java: 1145)
56
com.amazonaws.http.AmazonHttpClient RequestExecutor.doExecute美元(AmazonHttpClie
原因及解决方法:
在某些情况下,即使正确配置了kmsClientSideEncryptionKeyId,如果在托管Artifactory的主机/集群上没有将以下URL https://sts.amazonaws.com列入白名单,您将在Artifactory日志中观察到上述错误。
下面是I AM permission的例子:{
“版本”:“2012-10-17”,
“声明”:[
{
“席德”:“VisualEditor”,
“效应”:“允许”,
“行动”:“s3: *”,
“资源”:“XXXXXXXXX”
},
{
“席德”:“AllowUseOfKeyInAccountxxxxx”,
“效应”:“允许”,
“行动”(
公里:加密”,
公里:解密”,
“公里:ReEncrypt *”,
“公里:GenerateDataKey *”,
“公里:DescribeKey”
],
“资源”:“XXXXXXXXXX”
}
]
}
