AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

「S3エラー: アクセス拒否」が CloudFormation で発生する理由を理解したいです。

所要時間2分
0

AWS CloudFormation でスタックを作成または更新したときに発生する、Amazon Simple Storage Service (Amazon S3) の「アクセス拒否」エラーを解決したいです。

解決策

**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

IAM ロールまたはユーザーポリシーのトラブルシューティング

CreateChangeSet または CreateStack で使用した AWS Identity and Access management (IAM) ID を確認します。IAM ユーザーまたはロールに必要なアクセス許可があることを確認します。必要に応じて、GetObject アクセスアクセス許可を与えるポリシーを IAM ID にアタッチします。次のポリシー例には、GetObject アクセス許可が含まれています。

{
   "Version":"2012-10-17",
     "Statement":[
        {
           "Effect":"Allow",
           "Action":[
              "s3:GetObject",
              "s3:GetObjectVersion"
           ],
           "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
        }
     ]
  }

テンプレートファイルが存在し、タイプミスがないことを確認する

テンプレートファイルが存在し、タイプミスが含まれていないかどうかを確認するには、次の手順を実行します。

ネストされたスタックに指定されたテンプレート URL が有効であることを確認します。AWS CLI コマンド list-objects を実行してオブジェクトを一覧表示します。

aws s3 list-objects --bucket DOC-EXAMPLE-BUCKET --prefix file-path/template-file.json

テンプレートの URL に余分なスペースが含まれていないことを確認してください。タイプミスにより S3 アクセス拒否エラーが発生する可能性があります。

S3 バケットポリシーに明示的な Deny ステートメントがないか確認する

S3 バケットに IAM ロールの明示的な Deny ステートメントがあるかどうかを確認するには、次の手順を実行します。

  1. Amazon S3 コンソールを開きます。
  2. バケットのリストから、テンプレートファイルを含むバケットを開きます。
  3. [アクセス許可] タブを選択します。
  4. バケットポリシーセグメントに移動します。
  5. "Effect": "Deny" を含むステートメントを検索します。
  6. バケットポリシーを編集し、"Effect": "Deny" ステートメントのうち、s3:GetObject または s3:GetObjectVersion への IAM ロールアクセスを拒否しているものを更新します。
  7. CloudFormation で使用している IAM ロールを削除します。
  8. [保存] を選択します。
  9. スタックを再度作成または更新します。

S3 バケットポリシーの詳細については、「バケットポリシーの例」を参照してください。

S3 バケットの暗号化設定を検証し、IAM ロールで KMS アクセスを有効にする

バケットがカスタマーマネージド AWS Key Management Service (KMS) キーを使用して暗号化を有効にしている場合、S3 Access Denied エラーが発生する場合があります。バケットが暗号化されている場合は、IAM ID が KMS キーにアクセスできるようにキーポリシーを更新します。

次の手順を実行します。

  1. AWS KMS コンソールを開きます。
  2. S3 バケット内のオブジェクトの暗号化に使用しているキーを特定し、[キーポリシー] タブを選択します。
  3. 次のステートメントを使用してポリシーを更新します。
    {
        "Action": [
          "kms:Decrypt",
          "kms:GenerateDataKey"
        ],
        "Effect": "Allow",
        "Principal": {
          "AWS": "arn:aws:iam::111122223333:user/IDENTITY"
        },
        "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    }
    注: IAM ID が他の AWS アカウントにある場合は、「Amazon S3 バケットで、カスタム AWS KMS キーを使用してデフォルトの暗号化を行っています。ユーザーがそのバケットでダウンロードやアップロードを行えるよう設定する方法を教えてください」を参照してください。

テンプレートファイルのオブジェクト ACL アクセス許可を確認する

テンプレートファイルが別のアカウントからアップロードされていても、ファイルの所有者はソースアカウントである場合があります。このアクションにより、ターゲットアカウントのユーザーはソースアカウントのテンプレートにアクセスできなくなります。この問題を解決するには、テンプレートファイルを S3 バケットにコピーして、バケット所有者にテンプレートへのフルアクセス許可を付与します。

次の put-object AWS CLI コマンドを実行して、バケットへのアクセスを許可します。

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key key-name --body path-to-file --acl bucket-owner-full-control

アクセス制御リスト (ACL) の詳細については、「オブジェクトの所有権を管理し、バケットで ACL を無効にする」を参照してください。

AWS公式
AWS公式更新しました 9ヶ月前
コメントはありません

関連するコンテンツ