跳至內容

我要如何允許使用者從使用客戶自管 AWS KMS key 金鑰加密的 Amazon S3 儲存貯體下載內容,並上傳內容到該儲存貯體?

2 分的閱讀內容
0

我將 Amazon Simple Storage Service (Amazon S3) 儲存貯體設定為使用預設加密,並採用客戶自管 AWS Key Management Service (KMS) 金鑰。我想要允許 AWS Identity and Access Management (IAM) 使用者從該儲存貯體下載物件,並將物件上傳至該儲存貯體。

解決方法

首先,修改 AWS KMS 金鑰政策。接著,修改 IAM 使用者的身分型政策。如果 IAM 使用者與 S3 儲存貯體位於不同帳戶,您也必須修改儲存貯體政策。

修改金鑰政策

請完成以下步驟:

  1. 開啟 AWS KMS console (AWS KMS 主控台)。

  2. 在導覽窗格中,選擇 Customer managed keys (客戶自管金鑰),然後在金鑰清單中選取您的金鑰。

  3. 選擇 Key policy (金鑰政策) 索引標籤以檢視政策文件。
    **注意:**如果您使用 AWS KMS 主控台建立客戶自管金鑰,您必須在 Key policy (金鑰政策) 索引標籤上選擇 Switch to policy view (切換至政策檢視) 才能檢視政策文件。

  4. 選擇 Edit (編輯),然後將以下陳述式新增至金鑰政策,以授與 kms:GenerateDataKeykms:Decrypt 權限:

    {
      "Sid": "ExampleStmt",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/Jane"
      },
      "Resource": "*"
    }

    **注意:**前述範例政策陳述式僅包含將物件下載與上傳至已加密 S3 儲存貯體所需的最低權限。您可以依據您的使用案例新增更多權限。

修改同帳戶存取的身分型政策

請完成以下步驟:

  1. 開啟 IAM console (IAM 主控台)。

  2. 將以下政策附加至 IAM 使用者,讓該使用者可以將物件上傳至儲存貯體並從儲存貯體下載物件:

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

    注意:Resource (資源) 值替換為該儲存貯體的 Amazon Resource Name (ARN)。 萬用字元 (*) 代表儲存貯體中的物件。

**重要:**儲存貯體政策中的明確 Deny 陳述式會封鎖身分型政策所授與的權限。檢閱儲存貯體政策,以確認沒有與身分型政策衝突的明確 Deny 陳述式。

修改跨帳戶存取的身分型政策與儲存貯體政策

**重要:**您可以為客戶自管金鑰授與跨帳戶存取,但無法為 AWS 受管金鑰授與跨帳戶存取。您無法修改 AWS 受管金鑰的金鑰政策。

請完成以下步驟:

  1. 在 IAM 使用者帳戶中開啟 IAM console (IAM 主控台)。

  2. 將以下政策附加至 IAM 使用者,讓該使用者可以上傳與下載物件並使用 AWS KMS key:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "DownloadandUpload",
          "Action": [
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:PutObject",
            "s3:PutObjectAcl"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
        },
        {
          "Sid": "ListBucket",
          "Action": [
            "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
        },
        {
          "Sid": "KMSAccess",
          "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
        }
      ]
    }

    注意:Resource (資源) 值替換為您的儲存貯體與 AWS KMS key 的 ARN。萬用字元 (*) 代表儲存貯體中的物件。

  3. 在擁有 S3 儲存貯體的帳戶中開啟 Amazon S3 console (Amazon S3 主控台)。

  4. 將以下陳述式新增至儲存貯體政策,以授與 IAM 使用者存取儲存貯體的權限:

    {
      "Id": "Policy1584399307003",
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "DownloadandUpload",
          "Action": [
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:PutObject",
            "s3:PutObjectAcl"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*",
          "Principal": {
            "AWS": [
              "arn:aws:iam::111122223333:user/Jane"
            ]
          }
        },
        {
          "Sid": "ListBucket",
          "Action": [
            "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
          "Principal": {
            "AWS": [
              "arn:aws:iam::111122223333:user/Jane"
            ]
          }
        }
      ]
    }

    **注意:**將 Id 替換為您的儲存貯體政策 ID,將 Principal 值替換為 IAM 使用者的 ARN,並將 Resource 值替換為您的儲存貯體 ARN。

除了跨帳戶存取所需的最低權限外,您也可以授與 s3:PutObjectAcl 權限,讓 IAM 使用者設定物件的存取控制清單 (ACL)。接著,將 bucket-owner-full-control canned ACL 授與儲存貯體帳戶。您也可以授與同步 S3 目錄或首碼,以及在儲存貯體之間複製物件所需的 s3:ListBucket 權限。

相關資訊

啟用與停用金鑰

搭配 AWS KMS 使用 IAM 政策

授與 Amazon S3 儲存貯體物件的讀取與寫入存取權

為所有新儲存貯體停用 ACL 並強制執行物件擁有權

AWS 官方已更新 4 個月前