{"id":1814,"date":"2023-03-27T23:06:27","date_gmt":"2023-03-27T15:06:27","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1814"},"modified":"2024-01-24T21:05:04","modified_gmt":"2024-01-24T13:05:04","slug":"aws-transfer-family-iam-role-configuration","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/27\/aws-transfer-family-iam-role-configuration\/","title":{"rendered":"AWS Transfer Family IAM\u89d2\u8272\u914d\u7f6e"},"content":{"rendered":"<h2>Use an IAM policy to control access to AWS Transfer Family<\/h2>\n<p>\u53c2\u8003\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/docs.aws.amazon.com\/transfer\/latest\/userguide\/users.html\">https:\/\/docs.aws.amazon.com\/transfer\/latest\/userguide\/users.html<\/a><br \/>\n\u53c2\u8003\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/docs.aws.amazon.com\/transfer\/latest\/userguide\/users-policies.html\">https:\/\/docs.aws.amazon.com\/transfer\/latest\/userguide\/users-policies.html<\/a><\/p>\n<blockquote>\n<p>\u9488\u5bf9<code>Service managed<\/code>(Create and manage users within the service)\u65b9\u5f0f<\/p>\n<\/blockquote>\n<p><!-- more --><\/p>\n<h3>Allowing read and write access to an Amazon S3 bucket<\/h3>\n<p>Following, you can see how to create an IAM policy that allows read and write access to a specific Amazon S3 bucket. Assigning an IAM role that has this IAM policy to your user gives that user read\/write access to the specified Amazon S3 bucket.<\/p>\n<p>The following policy provides programmatic read and write access to an Amazon S3 bucket.<\/p>\n<pre><code class=\"language-json\">{\n  &quot;Version&quot;: &quot;2012-10-17&quot;,\n  &quot;Statement&quot;: [\n    {\n      &quot;Effect&quot;: &quot;Allow&quot;,\n      &quot;Action&quot;: [\n            &quot;s3:ListBucket&quot;,\n            &quot;s3:GetBucketLocation&quot;\n       ],\n      &quot;Resource&quot;: [&quot;arn:aws:s3:::bucketname&quot;]\n    },\n    {\n      &quot;Effect&quot;: &quot;Allow&quot;,\n      &quot;Action&quot;: [\n        &quot;s3:PutObject&quot;,\n        &quot;s3:GetObject&quot;,\n        &quot;s3:DeleteObject&quot;,              \n        &quot;s3:DeleteObjectVersion&quot;,\n        &quot;s3:GetObjectVersion&quot;,\n        &quot;s3:GetObjectACL&quot;,\n        &quot;s3:PutObjectACL&quot;\n      ],\n      &quot;Resource&quot;: [&quot;arn:aws:s3:::bucketname\/*&quot;]\n    }\n  ]\n}<\/code><\/pre>\n<p>The <code>ListBucket<\/code> action requires permission to the bucket itself. The <code>PUT<\/code>, <code>GET<\/code>, and <code>DELETE<\/code> actions require object permissions. Because these are different entities, they are specified using different Amazon Resource Names (ARNs).<\/p>\n<p>If your bucket is enabled for AWS Key Management Service (AWS KMS) encryption, you need to enable additional actions in the policy. For more information about AWS KMS, see <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/docs.aws.amazon.com\/kms\/latest\/developerguide\/overview.html\" title=\"What is AWS Key Management Service?\">What is AWS Key Management Service?<\/a><\/p>\n<p>To further scope down your users&#8217; access to only the home directory of the specified Amazon S3 bucket, see <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/docs.aws.amazon.com\/transfer\/latest\/userguide\/users-policies.html#users-policies-scope-down\" title=\"Create a scope-down policy\">Create a scope-down policy<\/a>.<\/p>\n<h3>Create a scope-down policy<\/h3>\n<p>A <code>scope-down policy<\/code> is an AWS Identity and Access Management (IAM) policy that restricts users to certain portions of an Amazon S3 bucket. It does so by evaluating access in real time.<\/p>\n<p>You can use a <code>scope-down policy<\/code> when you need to give the same access to a group of users to a particular portion of your Amazon S3 bucket. For example, a group of users might need access to only the <code>home<\/code> directory. That group of users share the same IAM role.<\/p>\n<p>To create a <code>scope-down policy<\/code>, use the following policy variables in your IAM policy:<\/p>\n<ul>\n<li><code>${transfer:HomeBucket}<\/code><\/li>\n<li><code>${transfer:HomeDirectory}<\/code><\/li>\n<li><code>${transfer:HomeFolder}<\/code><\/li>\n<li><code>${transfer:UserName}<\/code><\/li>\n<\/ul>\n<blockquote>\n<p>Note: You can&#8217;t use the variables listed preceding as policy variables in an IAM role definition. You create these variables in an IAM policy and supply them directly when setting up your user. Also, you can&#8217;t use the ${aws:Username}variable in this scope-down policy. This variable refers to an IAM user name and not the user name required by AWS Transfer Family.<\/p>\n<\/blockquote>\n<p>An example of a scope-down policy is shown in the code example following.<\/p>\n<pre><code class=\"language-json\">{\n  &quot;Version&quot;: &quot;2012-10-17&quot;,\n  &quot;Statement&quot;: [\n      {\n          &quot;Sid&quot;: &quot;AllowListingOfUserFolder&quot;,\n          &quot;Action&quot;: [\n              &quot;s3:ListBucket&quot;\n          ],\n          &quot;Effect&quot;: &quot;Allow&quot;,\n          &quot;Resource&quot;: [\n              &quot;arn:aws:s3:::${transfer:HomeBucket}&quot;\n          ],\n          &quot;Condition&quot;: {\n              &quot;StringLike&quot;: {\n                  &quot;s3:prefix&quot;: [\n                      &quot;${transfer:HomeFolder}\/*&quot;,\n                      &quot;${transfer:HomeFolder}&quot;\n                  ]\n              }\n          }\n      },\n      {\n          &quot;Sid&quot;: &quot;HomeDirObjectAccess&quot;,\n          &quot;Effect&quot;: &quot;Allow&quot;,\n          &quot;Action&quot;: [\n              &quot;s3:PutObject&quot;,\n              &quot;s3:GetObject&quot;,\n              &quot;s3:DeleteObjectVersion&quot;,\n              &quot;s3:DeleteObject&quot;,\n              &quot;s3:GetObjectVersion&quot;,\n              &quot;s3:GetObjectACL&quot;,\n              &quot;s3:PutObjectACL&quot;\n          ],\n          &quot;Resource&quot;: &quot;arn:aws:s3:::${transfer:HomeDirectory}*&quot;\n       }\n  ]\n}<\/code><\/pre>\n<p>With the preceding policy in place, when a user logs in, they can access only objects in their home directory. At connection time, AWS Transfer Family replaces these variables with the appropriate values for the user. Doing this makes it easier to apply the same policy documents to multiple users. This approach reduces the overhead of IAM role and policy management for managing your users&#8217; access to your Amazon S3 bucket.<\/p>\n<p>You can also use a scope-down policy to customize access for each of your users based on your business requirements. For more information, see <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/docs.aws.amazon.com\/IAM\/latest\/UserGuide\/id_credentials_temp_control-access_assumerole.html\" title=\"Permissions for AssumeRole, AssumeRoleWithSAML, and AssumeRoleWithWebIdentity\">Permissions for AssumeRole, AssumeRoleWithSAML, and AssumeRoleWithWebIdentity<\/a> in the IAM User Guide.<\/p>\n<blockquote>\n<p>Note: AWS Transfer Family stores the policy JSON, instead of the Amazon Resource Name (ARN) of the policy. So when you change the policy in the IAM console, you need to return to AWS Transfer Family console and update your users with the latest policy contents. You can update the user under <code>Policy Info<\/code> tab in the <code>User configuration<\/code> section. For more information, see <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/docs.aws.amazon.com\/transfer\/latest\/userguide\/users.html\" title=\"Editing the user configuration\">Editing the user configuration<\/a>.<\/p>\n<\/blockquote>\n<h3>Preventing users from creating a directory in an S3 bucket<\/h3>\n<p>You can prevent users from creating a directory in an Amazon S3 bucket. To do so, you create an IAM policy that allows the <code>s3:PutObject<\/code> action but also denies it when the key ends with a <code>&quot;\/&quot;<\/code> (forward slash).<\/p>\n<p>The following example policy allows users to upload files to an Amazon S3 bucket but doesn\u2019t allow them to create a directory in the bucket. That is, it denies the mkdir command in the Amazon S3 bucket.<\/p>\n<pre><code class=\"language-json\">{\n   &quot;Sid&quot;:&quot;DenyMkdir&quot;,\n   &quot;Action&quot;:[\n      &quot;s3:PutObject&quot;\n   ],\n   &quot;Effect&quot;:&quot;Deny&quot;,\n   &quot;Resource&quot;:&quot;arn:aws:s3:::my-sftp-bucket\/*\/&quot;\n}<\/code><\/pre>\n<h2>API Gateway Lambda Functions IAM\u89d2\u8272\u5b9e\u8df5<\/h2>\n<blockquote>\n<p>\u9488\u5bf9<code>Custom<\/code>(Provide an Amazon API Gateway URL)\u65b9\u5f0f<\/p>\n<\/blockquote>\n<h3>Transfer\u64cd\u4f5cS3\u6dfb\u52a0\u7ba1\u7406\u5458\u89d2\u8272<\/h3>\n<p>\uff081\uff09Create role<\/p>\n<p>\uff082\uff09\u9009\u62e9Transfer\u670d\u52a1<\/p>\n<p>\uff083\uff09Create policy<\/p>\n<ul>\n<li>Service: \u9009\u62e9<code>S3<\/code><\/li>\n<li>Actions: \u9009\u62e9<code>GetObject<\/code>, <code>GetObjectAcl<\/code>, <code>s3:PutObject<\/code>, <code>PutObjectAcl<\/code><\/li>\n<li>Resources: <code>Specific<\/code>, \u5982<code>arn:aws:s3:::ok-cloud-sftp\/*<\/code><\/li>\n<li>Name: <code>TransferS3Admin<\/code><\/li>\n<\/ul>\n<p>\u53c2\u8003\u914d\u7f6e\uff1a<\/p>\n<p><div class=\"erphp-wppay payme payme-center\">\r\n                <div class=\"payme-toggle\">\r\n                <div id=\"wppay-payment-todo\" style=\"display: inline\">\r\n                  \u60a8\u9700\u8981\u5148\u652f\u4ed8 <b>1\u5143<\/b> \u624d\u80fd\u67e5\u770b\u6b64\u5904\u5185\u5bb9\uff01<br\/><br\/><a href=\"javascript:;\" class=\"erphp-wppay-loader btn btn-link\" data-post=\"1814\"><span style=\"color: white; \">\u7acb\u5373\u652f\u4ed8<\/span><\/a><br\/>\r\n                  <a id=\"wppay-query-link\" href=\"javascript:;\">\u5df2\u652f\u4ed8\uff1f\u70b9\u51fb\u8fd9\u91cc\u67e5\u8be2<\/a>\r\n                <\/div>\r\n\t\t\t\t<div id=\"wppay-payment-query\" style=\"display: none\">\r\n\t\t\t\t  <div id=\"wppay-query-form\">\r\n                    <input type=\"hidden\" name=\"post_id\" value=\"1814\">\r\n                    <input type=\"hidden\" name=\"post_title\" value=\"\">\r\n                    <input type=\"hidden\" name=\"post_url\" value=\"\">\r\n                    <input type=\"hidden\" name=\"post_price\" value=\"5.00\">\r\n                    <div>\r\n                        <label for=\"query_string\">\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7\uff1a<\/label>\r\n                        <input type=\"text\" id=\"order_num\" name=\"order_num\" style=\"width:300px\" aria-required=\"true\" aria-invalid=\"true\" autofocus=\"\" placeholder=\"\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7\">\r\n                        <button class=\"btn payme-btn\" name=\"button\" id=\"do-payment-query\"><span style=\"color: white; \">\u67e5 \u8be2<\/span><\/button>\r\n                    <\/div>\r\n                    <div>\r\n                        \uff08<a id=\"wppay-alipay-help-link\" href=\"javascript:;\">\u5982\u4f55\u67e5\u770b\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7?<\/a>\uff09<br\/>\r\n                        <a id=\"wppay-pay-link\" href=\"javascript:;\">\u8fd4\u56de\u7ee7\u7eed\u652f\u4ed8<\/a><br\/>\r\n                        <div id=\"alipay-get-out-trade-no\" style=\"display: none;\">\r\n                          <br\/>\r\n                          <img decoding=\"async\" style=\"max-width: 100%\" src=\"\/wp-content\/uploads\/2024\/01\/get_alipay_out_trade_no.png\" alt=\"\"\/>\r\n                        <\/div>\r\n                    <\/div>\r\n                  <\/div>\r\n                <\/div>\r\n\t\t\t<\/div><\/div><\/p>\n<p>\uff084\uff09\u5237\u65b0policy\uff0c<code>Filter policies<\/code>\u8f93\u5165<code>S3<\/code>\u8fdb\u884c\u8fc7\u6ee4\uff0c\u5e76\u9009\u62e9\u521a\u521a\u521b\u5efa\u7684<code>TransferS3Admin<\/code><\/p>\n<p>\uff085\uff09\u540d\u79f0\u53ca\u63cf\u8ff0<\/p>\n<ul>\n<li>Role name: <code>role-sftp-admin<\/code><\/li>\n<li>Role description: Allow AWS Transfer to call AWS S3<\/li>\n<\/ul>\n<h3>Transfer\u64cd\u4f5cS3\u6dfb\u52a0\u5f00\u53d1\u73af\u5883\u5b50\u8def\u5f84\u7ba1\u7406\u89d2\u8272<\/h3>\n<p>\uff081\uff09\u6dfb\u52a0\u7b56\u7565\uff1a<code>TransferS3ReconcileDev<\/code><\/p>\n<p><div class=\"erphp-wppay payme payme-center\">\r\n                <div class=\"payme-toggle\">\r\n                <div id=\"wppay-payment-todo\" style=\"display: inline\">\r\n                  \u60a8\u9700\u8981\u5148\u652f\u4ed8 <b>1\u5143<\/b> \u624d\u80fd\u67e5\u770b\u6b64\u5904\u5185\u5bb9\uff01<br\/><br\/><a href=\"javascript:;\" class=\"erphp-wppay-loader btn btn-link\" data-post=\"1814\"><span style=\"color: white; \">\u7acb\u5373\u652f\u4ed8<\/span><\/a><br\/>\r\n                  <a id=\"wppay-query-link\" href=\"javascript:;\">\u5df2\u652f\u4ed8\uff1f\u70b9\u51fb\u8fd9\u91cc\u67e5\u8be2<\/a>\r\n                <\/div>\r\n\t\t\t\t<div id=\"wppay-payment-query\" style=\"display: none\">\r\n\t\t\t\t  <div id=\"wppay-query-form\">\r\n                    <input type=\"hidden\" name=\"post_id\" value=\"1814\">\r\n                    <input type=\"hidden\" name=\"post_title\" value=\"\">\r\n                    <input type=\"hidden\" name=\"post_url\" value=\"\">\r\n                    <input type=\"hidden\" name=\"post_price\" value=\"5.00\">\r\n                    <div>\r\n                        <label for=\"query_string\">\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7\uff1a<\/label>\r\n                        <input type=\"text\" id=\"order_num\" name=\"order_num\" style=\"width:300px\" aria-required=\"true\" aria-invalid=\"true\" autofocus=\"\" placeholder=\"\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7\">\r\n                        <button class=\"btn payme-btn\" name=\"button\" id=\"do-payment-query\"><span style=\"color: white; \">\u67e5 \u8be2<\/span><\/button>\r\n                    <\/div>\r\n                    <div>\r\n                        \uff08<a id=\"wppay-alipay-help-link\" href=\"javascript:;\">\u5982\u4f55\u67e5\u770b\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7?<\/a>\uff09<br\/>\r\n                        <a id=\"wppay-pay-link\" href=\"javascript:;\">\u8fd4\u56de\u7ee7\u7eed\u652f\u4ed8<\/a><br\/>\r\n                        <div id=\"alipay-get-out-trade-no\" style=\"display: none;\">\r\n                          <br\/>\r\n                          <img decoding=\"async\" style=\"max-width: 100%\" src=\"\/wp-content\/uploads\/2024\/01\/get_alipay_out_trade_no.png\" alt=\"\"\/>\r\n                        <\/div>\r\n                    <\/div>\r\n                  <\/div>\r\n                <\/div>\r\n\t\t\t<\/div><\/div><\/p>\n<p>\uff082\uff09\u6dfb\u52a0\u89d2\u8272\uff1a<code>role-sftp-reconcile-dev<\/code><\/p>\n<p>\u9009\u62e9\u670d\u52a1\uff1a<code>Transfer<\/code><br \/>\n\u914d\u7f6e\u7b56\u7565\uff1a<code>TransferS3ReconcileDev<\/code><\/p>\n<h3>Transfer\u64cd\u4f5cS3\u6dfb\u52a0\u6d4b\u8bd5\u73af\u5883\u5b50\u8def\u5f84\u7ba1\u7406\u89d2\u8272<\/h3>\n<p>\uff081\uff09\u6dfb\u52a0\u7b56\u7565\uff1a<code>TransferS3ReconcileTest<\/code><\/p>\n<p><div class=\"erphp-wppay payme payme-center\">\r\n                <div class=\"payme-toggle\">\r\n                <div id=\"wppay-payment-todo\" style=\"display: inline\">\r\n                  \u60a8\u9700\u8981\u5148\u652f\u4ed8 <b>1\u5143<\/b> \u624d\u80fd\u67e5\u770b\u6b64\u5904\u5185\u5bb9\uff01<br\/><br\/><a href=\"javascript:;\" class=\"erphp-wppay-loader btn btn-link\" data-post=\"1814\"><span style=\"color: white; \">\u7acb\u5373\u652f\u4ed8<\/span><\/a><br\/>\r\n                  <a id=\"wppay-query-link\" href=\"javascript:;\">\u5df2\u652f\u4ed8\uff1f\u70b9\u51fb\u8fd9\u91cc\u67e5\u8be2<\/a>\r\n                <\/div>\r\n\t\t\t\t<div id=\"wppay-payment-query\" style=\"display: none\">\r\n\t\t\t\t  <div id=\"wppay-query-form\">\r\n                    <input type=\"hidden\" name=\"post_id\" value=\"1814\">\r\n                    <input type=\"hidden\" name=\"post_title\" value=\"\">\r\n                    <input type=\"hidden\" name=\"post_url\" value=\"\">\r\n                    <input type=\"hidden\" name=\"post_price\" value=\"5.00\">\r\n                    <div>\r\n                        <label for=\"query_string\">\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7\uff1a<\/label>\r\n                        <input type=\"text\" id=\"order_num\" name=\"order_num\" style=\"width:300px\" aria-required=\"true\" aria-invalid=\"true\" autofocus=\"\" placeholder=\"\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7\">\r\n                        <button class=\"btn payme-btn\" name=\"button\" id=\"do-payment-query\"><span style=\"color: white; \">\u67e5 \u8be2<\/span><\/button>\r\n                    <\/div>\r\n                    <div>\r\n                        \uff08<a id=\"wppay-alipay-help-link\" href=\"javascript:;\">\u5982\u4f55\u67e5\u770b\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7?<\/a>\uff09<br\/>\r\n                        <a id=\"wppay-pay-link\" href=\"javascript:;\">\u8fd4\u56de\u7ee7\u7eed\u652f\u4ed8<\/a><br\/>\r\n                        <div id=\"alipay-get-out-trade-no\" style=\"display: none;\">\r\n                          <br\/>\r\n                          <img decoding=\"async\" style=\"max-width: 100%\" src=\"\/wp-content\/uploads\/2024\/01\/get_alipay_out_trade_no.png\" alt=\"\"\/>\r\n                        <\/div>\r\n                    <\/div>\r\n                  <\/div>\r\n                <\/div>\r\n\t\t\t<\/div><\/div><\/p>\n<p>\uff082\uff09\u6dfb\u52a0\u89d2\u8272\uff1a<code>role-sftp-reconcile-test<\/code><\/p>\n<p>\u9009\u62e9\u670d\u52a1\uff1a<code>Transfer<\/code><br \/>\n\u914d\u7f6e\u7b56\u7565\uff1a<code>TransferS3ReconcileTest<\/code><\/p>\n<h3>Transfer\u64cd\u4f5cS3\u6dfb\u52a0\u6d4b\u6c99\u7bb1\u5883\u5b50\u8def\u5f84\u7ba1\u7406\u89d2\u8272<\/h3>\n<p>\uff081\uff09\u6dfb\u52a0\u7b56\u7565\uff1a<code>TransferS3ReconcileSandbox<\/code><\/p>\n<p><div class=\"erphp-wppay payme payme-center\">\r\n                <div class=\"payme-toggle\">\r\n                <div id=\"wppay-payment-todo\" style=\"display: inline\">\r\n                  \u60a8\u9700\u8981\u5148\u652f\u4ed8 <b>1\u5143<\/b> \u624d\u80fd\u67e5\u770b\u6b64\u5904\u5185\u5bb9\uff01<br\/><br\/><a href=\"javascript:;\" class=\"erphp-wppay-loader btn btn-link\" data-post=\"1814\"><span style=\"color: white; \">\u7acb\u5373\u652f\u4ed8<\/span><\/a><br\/>\r\n                  <a id=\"wppay-query-link\" href=\"javascript:;\">\u5df2\u652f\u4ed8\uff1f\u70b9\u51fb\u8fd9\u91cc\u67e5\u8be2<\/a>\r\n                <\/div>\r\n\t\t\t\t<div id=\"wppay-payment-query\" style=\"display: none\">\r\n\t\t\t\t  <div id=\"wppay-query-form\">\r\n                    <input type=\"hidden\" name=\"post_id\" value=\"1814\">\r\n                    <input type=\"hidden\" name=\"post_title\" value=\"\">\r\n                    <input type=\"hidden\" name=\"post_url\" value=\"\">\r\n                    <input type=\"hidden\" name=\"post_price\" value=\"5.00\">\r\n                    <div>\r\n                        <label for=\"query_string\">\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7\uff1a<\/label>\r\n                        <input type=\"text\" id=\"order_num\" name=\"order_num\" style=\"width:300px\" aria-required=\"true\" aria-invalid=\"true\" autofocus=\"\" placeholder=\"\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7\">\r\n                        <button class=\"btn payme-btn\" name=\"button\" id=\"do-payment-query\"><span style=\"color: white; \">\u67e5 \u8be2<\/span><\/button>\r\n                    <\/div>\r\n                    <div>\r\n                        \uff08<a id=\"wppay-alipay-help-link\" href=\"javascript:;\">\u5982\u4f55\u67e5\u770b\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7?<\/a>\uff09<br\/>\r\n                        <a id=\"wppay-pay-link\" href=\"javascript:;\">\u8fd4\u56de\u7ee7\u7eed\u652f\u4ed8<\/a><br\/>\r\n                        <div id=\"alipay-get-out-trade-no\" style=\"display: none;\">\r\n                          <br\/>\r\n                          <img decoding=\"async\" style=\"max-width: 100%\" src=\"\/wp-content\/uploads\/2024\/01\/get_alipay_out_trade_no.png\" alt=\"\"\/>\r\n                        <\/div>\r\n                    <\/div>\r\n                  <\/div>\r\n                <\/div>\r\n\t\t\t<\/div><\/div><\/p>\n<p>\uff082\uff09\u6dfb\u52a0\u89d2\u8272\uff1a<code>role-sftp-reconcile-sandbox<\/code><\/p>\n<p>\u9009\u62e9\u670d\u52a1\uff1a<code>Transfer<\/code><br \/>\n\u914d\u7f6e\u7b56\u7565\uff1a<code>TransferS3ReconcileSandbox<\/code><\/p>\n<h3>Transfer\u64cd\u4f5cS3\u6dfb\u52a0\u751f\u4ea7\u73af\u5883\u5b50\u8def\u5f84\u7ba1\u7406\u89d2\u8272<\/h3>\n<p>\uff081\uff09\u6dfb\u52a0\u7b56\u7565\uff1a<code>TransferS3ReconcileProd<\/code><\/p>\n<p><div class=\"erphp-wppay payme payme-center\">\r\n                <div class=\"payme-toggle\">\r\n                <div id=\"wppay-payment-todo\" style=\"display: inline\">\r\n                  \u60a8\u9700\u8981\u5148\u652f\u4ed8 <b>1\u5143<\/b> \u624d\u80fd\u67e5\u770b\u6b64\u5904\u5185\u5bb9\uff01<br\/><br\/><a href=\"javascript:;\" class=\"erphp-wppay-loader btn btn-link\" data-post=\"1814\"><span style=\"color: white; \">\u7acb\u5373\u652f\u4ed8<\/span><\/a><br\/>\r\n                  <a id=\"wppay-query-link\" href=\"javascript:;\">\u5df2\u652f\u4ed8\uff1f\u70b9\u51fb\u8fd9\u91cc\u67e5\u8be2<\/a>\r\n                <\/div>\r\n\t\t\t\t<div id=\"wppay-payment-query\" style=\"display: none\">\r\n\t\t\t\t  <div id=\"wppay-query-form\">\r\n                    <input type=\"hidden\" name=\"post_id\" value=\"1814\">\r\n                    <input type=\"hidden\" name=\"post_title\" value=\"\">\r\n                    <input type=\"hidden\" name=\"post_url\" value=\"\">\r\n                    <input type=\"hidden\" name=\"post_price\" value=\"5.00\">\r\n                    <div>\r\n                        <label for=\"query_string\">\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7\uff1a<\/label>\r\n                        <input type=\"text\" id=\"order_num\" name=\"order_num\" style=\"width:300px\" aria-required=\"true\" aria-invalid=\"true\" autofocus=\"\" placeholder=\"\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7\">\r\n                        <button class=\"btn payme-btn\" name=\"button\" id=\"do-payment-query\"><span style=\"color: white; \">\u67e5 \u8be2<\/span><\/button>\r\n                    <\/div>\r\n                    <div>\r\n                        \uff08<a id=\"wppay-alipay-help-link\" href=\"javascript:;\">\u5982\u4f55\u67e5\u770b\u5546\u5bb6\u8ba2\u5355\u53f7\/\u8ba2\u5355\u53f7?<\/a>\uff09<br\/>\r\n                        <a id=\"wppay-pay-link\" href=\"javascript:;\">\u8fd4\u56de\u7ee7\u7eed\u652f\u4ed8<\/a><br\/>\r\n                        <div id=\"alipay-get-out-trade-no\" style=\"display: none;\">\r\n                          <br\/>\r\n                          <img decoding=\"async\" style=\"max-width: 100%\" src=\"\/wp-content\/uploads\/2024\/01\/get_alipay_out_trade_no.png\" alt=\"\"\/>\r\n                        <\/div>\r\n                    <\/div>\r\n                  <\/div>\r\n                <\/div>\r\n\t\t\t<\/div><\/div><\/p>\n<p>\uff082\uff09\u6dfb\u52a0\u89d2\u8272\uff1a<code>role-sftp-reconcile-prod<\/code><\/p>\n<p>\u9009\u62e9\u670d\u52a1\uff1a<code>Transfer<\/code><br \/>\n\u914d\u7f6e\u7b56\u7565\uff1a<code>TransferS3ReconcileProd<\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Use an IAM policy to control access to AWS Transfer Fam [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[90],"tags":[400,95],"class_list":["post-1814","post","type-post","status-publish","format-standard","hentry","category-cloud-devops","tag-aws","tag-sftp"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1814"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1814\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}