

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用分散式地圖狀態的 IAM 政策
<a name="iam-policies-eg-dist-map"></a>

當您使用 Step Functions 主控台建立工作流程時，Step Functions 可以根據您工作流程定義中的資源自動產生 IAM 政策。產生的政策包含允許狀態機器角色叫用*分散式映射狀態*的 `[StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)` API 動作和存取 AWS 資源所需的最低權限，例如 Amazon S3 儲存貯體和物件，以及 Lambda 函數。

我們建議您在 IAM 政策中只包含必要的許可。例如，如果您的工作流程包含分散式模式中`Map`的狀態，請將您的政策範圍縮小到包含您的資料的特定 Amazon S3 儲存貯體和資料夾。

**重要**  
如果您指定 Amazon S3 儲存貯體和物件或字首，以及*分散式映射狀態*輸入中現有鍵值對的[參考路徑](amazon-states-language-paths.md#amazon-states-language-reference-paths)，請確定您更新工作流程的 IAM 政策。將政策範圍縮小至路徑在執行時間解析的儲存貯體和物件名稱。

## 執行分散式映射狀態的 IAM 政策範例
<a name="iam-policy-run-dist-map"></a>

當您在工作流程中包含*分散式地圖狀態*時，Step Functions 需要適當的許可，以允許狀態機器角色叫用*分散式地圖狀態*的 `[StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)` API 動作。

下列 IAM 政策範例會將執行*分散式映射狀態*所需的最低權限授予狀態機器角色。

**注意**  
請務必將 `stateMachineName`取代為您使用*分散式地圖*狀態的狀態機器名稱。例如 `arn:aws:states:region:account-id:stateMachine:mystateMachine`。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "states:StartExecution"
      ],
      "Resource": [
        "arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachineName"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "states:DescribeExecution"
      ],
      "Resource": "arn:aws:states:us-east-1:123456789012:execution:myStateMachineName:*"
    }
  ]
}
```

## 分散式映射的 IAM redriving 政策範例
<a name="iam-policy-redrive-dist-map"></a>

您可以由[redriving](redrive-executions.md)父[工作流程在 Map Run 中重新啟動失敗的子工作流程](state-map-distributed.md#dist-map-orchestrate-parallel-workloads-key-terms)執行。redriven 父工作流程redrives所有失敗狀態，包括分散式地圖。請確定您的執行角色具有允許其在父工作流程上叫用 `[RedriveExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_RedriveExecution.html)` API 動作所需的最低權限。

下列 IAM 政策範例會為您的狀態機器角色授予redriving*分散式映射狀態*所需的最低權限。

**注意**  
請務必將 `stateMachineName`取代為您使用*分散式地圖狀態*之狀態機器的名稱。例如 `arn:aws:states:region:account-id:stateMachine:mystateMachine`。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "states:RedriveExecution"
      ],
      "Resource": "arn:aws:states:us-east-2:123456789012:execution:myStateMachineName/myMapRunLabel:*"
    }
  ]
}
```

## 從 Amazon S3 資料集讀取資料的 IAM 政策範例
<a name="iam-policy-eg-item-reader"></a>

下列範例顯示使用 [ListObjectsV2](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) 和 [GetObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html) API 動作授予存取 Amazon S3 資料集所需最低權限的技術。

**Example 使用 Amazon S3 物件做為資料集的條件**  
下列條件授予存取 Amazon S3 儲存貯體`processImages`資料夾中物件的最低權限。  

```
"Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ],
"Condition": {
   "StringLike": { 
      "s3:prefix": [ "processImages" ]
   }
}
```

**Example 使用 CSV 檔案做為資料集**  
下列範例顯示存取名為 的 CSV 檔案所需的動作`ratings.csv`。  

```
"Action": [ "s3:GetObject" ],
"Resource": [
   "arn:aws:s3:::amzn-s3-demo-bucket/csvDataset/ratings.csv"
   ]
```

**Example 使用 Amazon S3 清查做為資料集**  
以下顯示 Amazon S3 清查清單檔案和資料檔案的範例資源。  

```
"Resource": [
   "arn:aws:s3:::myPrefix/amzn-s3-demo-bucket/myConfig-id/YYYY-MM-DDTHH-MMZ/manifest.json",
   "arn:aws:s3:::myPrefix/amzn-s3-demo-bucket/myConfig-id/data/*"
   ]
```

**Example 使用 ListObjectsV2 限制為資料夾字首**  
使用 [ListObjectsV2](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) 時，會產生兩個政策。需要一個允許**列出**儲存貯體 (`ListBucket`) 的內容，另一個政策將允許**擷取儲存貯體 () 中的物件**`GetObject`。  
以下顯示動作、資源和條件的範例：  

```
"Action": [ "s3:ListBucket" ],
"Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ],
"Condition": {
   "StringLike": {
      "s3:prefix": [ "/path/to/your/json/" ]
   }
}
```

```
"Action": [ "s3:GetObject" ],
"Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/path/to/your/json/*" ]
```
請注意， `GetObject`不會設定範圍，而您將針對 物件使用萬用字元 (`*`)。

## 將資料寫入 Amazon S3 儲存貯體的 IAM 政策範例
<a name="iam-policy-eg-result-writer"></a>

下列 IAM 政策範例會使用 `[PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)` API 動作，授予將子工作流程執行結果寫入 Amazon S3 儲存貯體中名為 *csvJobs* 的資料夾所需的最低權限。

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListMultipartUploadParts",
                "s3:AbortMultipartUpload"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-destination-bucket/csvJobs/*"
            ]
        }
    ]
}
```

### AWS KMS key 加密 Amazon S3 儲存貯體的 IAM 許可
<a name="multiupload-dmap-result-policy"></a>

*分散式映射狀態*使用分段上傳，將子工作流程執行結果寫入 Amazon S3 儲存貯體。如果使用 AWS Key Management Service(AWS KMS)金鑰加密儲存貯體，您還必須在IAM政策中包含許可，才能對金鑰執行 `kms:Decrypt`、 `kms:Encrypt`和 `kms:GenerateDataKey`動作。這些許可是必要的，因為在加密檔案完成分段上傳之前，Amazon S3 必須從部分加密檔案解密並讀取資料。

下列 IAM 政策範例會針對用來加密 Amazon S3 儲存貯體的金鑰`kms:Encrypt`授予 `kms:Decrypt`、 和 `kms:GenerateDataKey`動作的許可。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "kms:Decrypt",
      "kms:Encrypt",
      "kms:GenerateDataKey"
    ],
    "Resource": [
      "arn:aws:kms:us-east-1:123456789012:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    ]
  }
}
```

如需詳細資訊，請參閱 *AWS 知識中心*中的[使用 AWS KMS key透過加密以將大型檔案上傳至 Amazon S3](https://aws.amazon.com/premiumsupport/knowledge-center/s3-large-file-encryption-kms-key/)。

如果您的 IAM 使用者或角色與 位於相同的 AWS 帳戶 中KMS key，則您必須擁有金鑰政策的這些許可。如果您的 IAM 使用者或角色屬於與 不同的帳戶KMS key，則您必須同時擁有金鑰政策和 IAM 使用者或角色的許可。